Upgrade pdfbox to 2.0.3 and fastutil to 7.0.13 in target platform defs
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / SCL.java
1 package org.simantics.modeling;\r
2 \r
3 import java.io.File;\r
4 import java.text.SimpleDateFormat;\r
5 import java.util.Date;\r
6 import java.util.List;\r
7 \r
8 import org.eclipse.core.runtime.NullProgressMonitor;\r
9 import org.eclipse.core.runtime.Platform;\r
10 import org.eclipse.core.runtime.jobs.IJobManager;\r
11 import org.eclipse.core.runtime.jobs.Job;\r
12 import org.simantics.DatabaseJob;\r
13 import org.simantics.Simantics;\r
14 import org.simantics.SimanticsPlatform;\r
15 import org.simantics.SimanticsPlatform.OntologyRecoveryPolicy;\r
16 import org.simantics.db.ReadGraph;\r
17 import org.simantics.db.Resource;\r
18 import org.simantics.db.WriteGraph;\r
19 import org.simantics.db.common.request.ReadRequest;\r
20 import org.simantics.db.common.request.WriteRequest;\r
21 import org.simantics.db.exception.DatabaseException;\r
22 import org.simantics.db.layer0.request.external.EclipsePreferencePrimitiveRead;\r
23 import org.simantics.db.layer0.util.RemoverUtil;\r
24 import org.simantics.db.layer0.util.SimanticsClipboard;\r
25 import org.simantics.db.service.DebugSupport;\r
26 import org.slf4j.Logger;\r
27 import org.slf4j.LoggerFactory;\r
28 \r
29 public class SCL {\r
30     private static final Logger LOGGER = LoggerFactory.getLogger(SCL.class);\r
31 \r
32     public static void killPlatformWrite(WriteGraph graph) throws DatabaseException {\r
33         // Currently not supported.\r
34         // Would be relatively easy to support the desired functionality.\r
35         // To implement this I would recommend something like:\r
36         // SimanticsPlatform.INSTANCE.breakWrite();\r
37         // And it's implementation with db.management.breakWrite() method.\r
38         // To be clear, at the moment this method (breakWrite) does not exist.\r
39     }\r
40     public static void killPlatformRead(ReadGraph graph) throws DatabaseException {\r
41         // See above.\r
42     }\r
43     public static void killPlatform() throws Exception {\r
44         SimanticsPlatform.INSTANCE.shutdown(null);\r
45     }\r
46     public static void shutdownPlatform() throws Exception {\r
47         SimanticsPlatform.INSTANCE.shutdown(null);\r
48     }\r
49     public static void reconnectPlatform() throws Exception {\r
50         SimanticsPlatform.INSTANCE.reconnect(Simantics.getDefaultDatabaseDriver());\r
51     }\r
52     public static void synchronizeOntologies() throws Exception {\r
53         SimanticsPlatform.INSTANCE.synchronizeOntologies(new NullProgressMonitor(), OntologyRecoveryPolicy.Merge, true);\r
54         Simantics.getSession().getService(DebugSupport.class).query(Simantics.getSession(), "exec QueryControl.flush");\r
55     }\r
56 \r
57     public static void sync() throws DatabaseException {\r
58         // Multiple bugs here:\r
59         // -Model performs activation in separate write transactions because API does not support changing the virtual graph\r
60         //  => activation & activation listener is delayed beyond this point\r
61         // -This should be fixed by the following code\r
62         //     TransactionSupport ts = session.getService(TransactionSupport.class);\r
63         //     ts.waitCompletion();\r
64         //  but unfortunately this does not work either...\r
65         // so we synchronize by a familiar write transaction\r
66         // And then wait still some more\r
67                 for(int i=0;i<3;i++) {\r
68                Simantics.getSession().syncRequest(new WriteRequest() {\r
69                     @Override\r
70                     public void perform(WriteGraph graph) throws DatabaseException {\r
71                     }\r
72 \r
73                         @Override\r
74                         public String toString() {\r
75                                 return "Utils sync";\r
76                         }\r
77                });\r
78 \r
79                // And then wait still some more\r
80                Simantics.getSession().syncRequest(new ReadRequest() {\r
81                    @Override\r
82                    public void run(ReadGraph graph) throws DatabaseException {\r
83                    }\r
84               });\r
85                 }\r
86     }\r
87 \r
88     public static void syncGraph() throws Exception {\r
89         sync();\r
90 \r
91                 // OK, now the experiment activate job should be scheduled\r
92                 // Wait for the job to finish\r
93         IJobManager job = Job.getJobManager();\r
94         Job[] jobs = job.find(null);\r
95         for (Job j : jobs) {\r
96             if(j instanceof DatabaseJob) j.join();\r
97         }\r
98         sync();\r
99         }\r
100 \r
101     public static boolean deleteMBNode(List<Resource> resources) throws DatabaseException {\r
102         boolean value = false;\r
103                 try {\r
104                 value = RemoverUtil.tryCollectionRemover(resources);\r
105         } catch (DatabaseException e){\r
106                 return value;\r
107         }\r
108         return value;\r
109     }\r
110 \r
111     public static void sleep(int ms) {\r
112         try {\r
113                         Thread.sleep(ms);\r
114                 } catch (InterruptedException e) {\r
115             LOGGER.warn("Sleep was interrupted.", e);\r
116                 }\r
117     }\r
118 \r
119     public static boolean hasSomethingToPaste(ReadGraph graph, Resource resource) throws DatabaseException {\r
120 \r
121         SimanticsClipboard clipboard = Simantics.getClipboard();\r
122         return !clipboard.getContents().isEmpty();\r
123 \r
124     }\r
125     \r
126     public static boolean canDelete(ReadGraph graph, Resource resource) throws DatabaseException {\r
127 \r
128         return RemoverUtil.canRemove(graph, resource);\r
129 \r
130     }\r
131 \r
132     public static boolean canRename(ReadGraph graph, Resource resource) throws DatabaseException {\r
133         return true;\r
134     }\r
135 \r
136     public static String currentDate(String format) {\r
137 \r
138         SimpleDateFormat sdf = new SimpleDateFormat(format);\r
139         return sdf.format(new Date(System.currentTimeMillis()));\r
140 \r
141     }\r
142 \r
143     public static File workspaceDirectory() {\r
144         return new File(Platform.getInstanceLocation().getURL().getFile());\r
145     }\r
146     \r
147     public static String queryPreference(ReadGraph graph, String pluginId, String preferenceKey) throws DatabaseException {\r
148         String result = graph.syncRequest(new EclipsePreferencePrimitiveRead(pluginId, preferenceKey));\r
149         if(result == null) return "";\r
150         return result;\r
151     }\r
152 \r
153     \r
154 }\r