]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.testing/src/org/simantics/db/testing/common/AcornTests.java
e72ea3280d35d1bf3ea2a24e5121ebca8e85d2ad
[simantics/platform.git] / bundles / org.simantics.db.testing / src / org / simantics / db / testing / common / AcornTests.java
1 package org.simantics.db.testing.common;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.InputStream;
6 import java.util.ArrayList;
7
8 import org.eclipse.core.runtime.Platform;
9 import org.simantics.DefaultChoiceUserAgent;
10 import org.simantics.Simantics;
11 import org.simantics.SimanticsPlatform;
12 import org.simantics.SimanticsPlatform.OntologyRecoveryPolicy;
13 import org.simantics.SimanticsPlatform.RecoveryPolicy;
14 import org.simantics.databoard.Bindings;
15 import org.simantics.databoard.Files;
16 import org.simantics.databoard.binding.Binding;
17 import org.simantics.databoard.binding.error.BindingConstructionException;
18 import org.simantics.db.Session;
19 import org.simantics.db.exception.DatabaseException;
20 import org.simantics.db.layer0.util.RuntimeEnvironmentRequest;
21 import org.simantics.db.management.ISessionContextProvider;
22 import org.simantics.db.management.ISessionContextProviderSource;
23 import org.simantics.db.management.SessionContext;
24 import org.simantics.db.management.SessionContextProvider;
25 import org.simantics.db.management.SingleSessionContextProviderSource;
26 import org.simantics.db.service.LifecycleSupport;
27 import org.simantics.db.service.VirtualGraphSupport;
28 import org.simantics.db.testing.impl.Configuration;
29 import org.simantics.graph.db.TransferableGraphs;
30 import org.simantics.graph.representation.TransferableGraph1;
31 import org.simantics.scl.osgi.SCLOsgi;
32
33 public class AcornTests {
34
35     private static AcornTestHandler testHandler;
36
37     public static DatabaseState freshWorkspace(String CORE_DIR, ArrayList<String> fileFilter) throws Exception {
38         SimanticsPlatform.INSTANCE.resetWorkspace(null, fileFilter);
39         return newSimanticsWorkspace(null, CORE_DIR);
40     }
41
42     public static void freshDatabase() throws Exception {
43         DatabaseState state = freshWorkspace(Configuration.get().coreDir, null);
44         AcornTests.shutdown(state);
45     }
46
47     public static DatabaseState existingDatabase() throws Exception {
48         return oldSimanticsWorkspace(null, Configuration.get().coreDir);
49     }
50
51     private static void initSimanticsStuff() {
52         // Set session context provider.
53         final ISessionContextProvider provider = new SessionContextProvider(null);
54         ISessionContextProviderSource source = new SingleSessionContextProviderSource(provider);
55         Simantics.setSessionContextProviderSource(source);
56         org.simantics.db.layer0.internal.SimanticsInternal.setSessionContextProviderSource(source);
57     }
58
59     public static DatabaseState newSimanticsWorkspace(TestSettings testSettings, String address) throws Exception {
60         AcornTestHandler testHandler = AcornTests.getTestHandler(testSettings, address);
61         testHandler.initNew();
62         initSimanticsStuff();
63         SessionContext sessionContext = SimanticsPlatform.INSTANCE.startUp("acorn", null, RecoveryPolicy.FixError,
64                 OntologyRecoveryPolicy.Merge, true, new DefaultChoiceUserAgent());
65         return new DatabaseState(address, sessionContext);
66     }
67
68     public static DatabaseState oldSimanticsWorkspace(TestSettings testSettings, String address) throws Exception {
69         AcornTests.getTestHandler(testSettings, address);
70         initSimanticsStuff();
71         SessionContext sessionContext = SimanticsPlatform.INSTANCE.startUp(null, null, RecoveryPolicy.FixError,
72                 OntologyRecoveryPolicy.Merge, false, null);
73         return new DatabaseState(address, sessionContext);
74     }
75
76     public static void shutdown(DatabaseState state) throws Exception {
77         SCLOsgi.MODULE_REPOSITORY.flush();
78         SCLOsgi.SOURCE_REPOSITORY = null;
79         SCLOsgi.MODULE_REPOSITORY = null;
80         SCLOsgi.TEST_REPOSITORY = null;
81         
82 //        VirtualGraphSupport vsupport;
83 //        if (state != null) {
84 //            vsupport = state.getSession().getService(VirtualGraphSupport.class);
85 //            vsupport.discard();
86 //        }
87
88         if (Platform.isRunning()) {
89             SimanticsPlatform.INSTANCE.shutdown(null);
90             return;
91         } // Cleanup without platform code.
92         if (null == state)
93             return;
94         String address = state.getAddress();
95         try {
96             if (null != address)
97                 getTestHandler(null, address).getManagement().shutdown();
98         } catch (Throwable t) {
99             System.out.println(t);
100         }
101     }
102
103     public static void initOntology(Session session, String relative) throws DatabaseException {
104         // Open transferable graph file for layer0.
105         Binding binding;
106         try {
107             binding = Bindings.getBinding(TransferableGraph1.class);
108         } catch (BindingConstructionException e) {
109             throw new DatabaseException(e);
110         }
111         File t = new File(TestSettings.getInstance().getWorkspace(), relative);
112         if (!t.exists())
113             throw new DatabaseException("File does not exist. File=" + t + ".");
114
115         TransferableGraph1 layer0;
116         try {
117             InputStream is = new FileInputStream(t);
118             layer0 = (TransferableGraph1) Files.readFile(is, binding);
119             is.close();
120         } catch (Exception e) {
121             e.printStackTrace();
122             throw new DatabaseException(e);
123         }
124         try {
125             TransferableGraphs.importGraph(session, layer0);
126         } catch (Throwable e) {
127             e.printStackTrace();
128             throw new DatabaseException("Failed to init db.", e);
129         }
130     }
131
132     public static AcornTestHandler getTestHandler() throws DatabaseException {
133         return getTestHandler(null, null);
134     }
135
136     public static AcornTestHandler getTestHandler(TestSettings testSettings, String address)
137             throws DatabaseException {
138         if (null == testHandler)
139             testHandler = new AcornTestHandler(testSettings, address);
140         return testHandler;
141     }
142
143     public static void closeSession(Session session) throws DatabaseException {
144         try {
145             LifecycleSupport support = session.getService(LifecycleSupport.class);
146             support.close(-1, false);
147             session = null;
148         } catch (Exception e) {
149             session = null;
150             throw new DatabaseException("Sessuion did not close cleanly.");
151         }
152     }
153
154 }