1 package org.simantics.db.testing.common;
4 import java.io.FileInputStream;
5 import java.io.InputStream;
6 import java.util.ArrayList;
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;
33 public class AcornTests {
35 private static AcornTestHandler testHandler;
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);
42 public static void freshDatabase() throws Exception {
43 DatabaseState state = freshWorkspace(Configuration.get().coreDir, null);
44 AcornTests.shutdown(state);
47 public static DatabaseState existingDatabase() throws Exception {
48 return oldSimanticsWorkspace(null, Configuration.get().coreDir);
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);
59 public static DatabaseState newSimanticsWorkspace(TestSettings testSettings, String address) throws Exception {
60 AcornTestHandler testHandler = AcornTests.getTestHandler(testSettings, address);
61 testHandler.initNew();
63 SessionContext sessionContext = SimanticsPlatform.INSTANCE.startUp("acorn", null, RecoveryPolicy.FixError,
64 OntologyRecoveryPolicy.Merge, true, new DefaultChoiceUserAgent());
65 return new DatabaseState(address, sessionContext);
68 public static DatabaseState oldSimanticsWorkspace(TestSettings testSettings, String address) throws Exception {
69 AcornTests.getTestHandler(testSettings, address);
71 SessionContext sessionContext = SimanticsPlatform.INSTANCE.startUp(null, null, RecoveryPolicy.FixError,
72 OntologyRecoveryPolicy.Merge, false, null);
73 return new DatabaseState(address, sessionContext);
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;
82 // VirtualGraphSupport vsupport;
83 // if (state != null) {
84 // vsupport = state.getSession().getService(VirtualGraphSupport.class);
85 // vsupport.discard();
88 if (Platform.isRunning()) {
89 SimanticsPlatform.INSTANCE.shutdown(null);
91 } // Cleanup without platform code.
94 String address = state.getAddress();
97 getTestHandler(null, address).getManagement().shutdown();
98 } catch (Throwable t) {
99 System.out.println(t);
103 public static void initOntology(Session session, String relative) throws DatabaseException {
104 // Open transferable graph file for layer0.
107 binding = Bindings.getBinding(TransferableGraph1.class);
108 } catch (BindingConstructionException e) {
109 throw new DatabaseException(e);
111 File t = new File(TestSettings.getInstance().getWorkspace(), relative);
113 throw new DatabaseException("File does not exist. File=" + t + ".");
115 TransferableGraph1 layer0;
117 InputStream is = new FileInputStream(t);
118 layer0 = (TransferableGraph1) Files.readFile(is, binding);
120 } catch (Exception e) {
122 throw new DatabaseException(e);
125 TransferableGraphs.importGraph(session, layer0);
126 } catch (Throwable e) {
128 throw new DatabaseException("Failed to init db.", e);
132 public static AcornTestHandler getTestHandler() throws DatabaseException {
133 return getTestHandler(null, null);
136 public static AcornTestHandler getTestHandler(TestSettings testSettings, String address)
137 throws DatabaseException {
138 if (null == testHandler)
139 testHandler = new AcornTestHandler(testSettings, address);
143 public static void closeSession(Session session) throws DatabaseException {
145 LifecycleSupport support = session.getService(LifecycleSupport.class);
146 support.close(-1, false);
148 } catch (Exception e) {
150 throw new DatabaseException("Sessuion did not close cleanly.");