1 package org.simantics;
\r
3 import java.util.Collection;
\r
4 import java.util.concurrent.CopyOnWriteArrayList;
\r
5 import java.util.concurrent.ScheduledFuture;
\r
6 import java.util.concurrent.TimeUnit;
\r
9 * @author Antti Villberg
\r
11 public class DiskWarningSystem {
\r
13 public interface DiskWarningListener {
\r
15 * @param available in bytes
\r
17 void diskLow(long available);
\r
20 private final Collection<DiskWarningListener> listeners = new CopyOnWriteArrayList<DiskWarningListener>();
\r
23 private long limit = Long.MAX_VALUE;
\r
25 private boolean disposed = false;
\r
27 private ScheduledFuture<?> future;
\r
30 * @param limit in megabytes
\r
32 public void setLimit(long limit) {
\r
33 this.limit = limit*1024*1024;
\r
37 return Simantics.getDiskBytes();
\r
40 public boolean check() {
\r
41 return get() > limit;
\r
45 public DiskWarningSystem(int amount, TimeUnit unit) {
\r
47 future = Simantics.scheduleAtFixedRate(new Runnable() {
\r
51 if(!disposed && !check()) {
\r
53 for (DiskWarningListener listener : listeners) {
\r
54 listener.diskLow(bytes);
\r
59 }, 0, amount, unit);
\r
63 public boolean addListener(DiskWarningListener listener) {
\r
64 return listeners.add(listener);
\r
67 public boolean removeListener(DiskWarningListener listener) {
\r
68 return listeners.remove(listener);
\r
71 public void dispose() {
\r
74 future.cancel(false);
\r