]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics/src/org/simantics/DiskWarningSystem.java
Include acorn db in db.client feature and make it the default db driver
[simantics/platform.git] / bundles / org.simantics / src / org / simantics / DiskWarningSystem.java
1 package org.simantics;\r
2 \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
7 \r
8 /**\r
9  * @author Antti Villberg\r
10  */\r
11 public class DiskWarningSystem {\r
12 \r
13     public interface DiskWarningListener {\r
14         /*\r
15          * @param available in bytes\r
16          */\r
17         void diskLow(long available);\r
18     }\r
19 \r
20     private final Collection<DiskWarningListener> listeners = new CopyOnWriteArrayList<DiskWarningListener>();\r
21 \r
22     // In bytes\r
23     private long limit = Long.MAX_VALUE;\r
24 \r
25     private boolean disposed = false;\r
26 \r
27     private ScheduledFuture<?> future;\r
28 \r
29     /*\r
30      * @param limit in megabytes\r
31      */\r
32     public void setLimit(long limit) {\r
33         this.limit = limit*1024*1024;\r
34     }\r
35 \r
36     public long get() {\r
37         return Simantics.getDiskBytes();\r
38     }\r
39     \r
40     public boolean check() {\r
41                 return get() > limit;\r
42     }\r
43         \r
44     \r
45     public DiskWarningSystem(int amount, TimeUnit unit) {\r
46         \r
47         future = Simantics.scheduleAtFixedRate(new Runnable() {\r
48 \r
49                 @Override\r
50                 public void run() {\r
51                         if(!disposed && !check()) {\r
52                                 long bytes = get();\r
53                                 for (DiskWarningListener listener : listeners) {\r
54                                         listener.diskLow(bytes);\r
55                                 }\r
56                         }\r
57                 }\r
58 \r
59         }, 0, amount, unit);\r
60         \r
61     }\r
62 \r
63     public boolean addListener(DiskWarningListener listener) {\r
64         return listeners.add(listener);\r
65     }\r
66 \r
67     public boolean removeListener(DiskWarningListener listener) {\r
68         return listeners.remove(listener);\r
69     }\r
70 \r
71     public void dispose() {\r
72         if (!disposed) {\r
73             disposed = true;\r
74             future.cancel(false);\r
75             listeners.clear();\r
76         }\r
77     }\r
78 \r
79 }