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.management.ISessionContextProvider;
21 import org.simantics.db.management.ISessionContextProviderSource;
22 import org.simantics.db.management.SessionContext;
23 import org.simantics.db.management.SessionContextProvider;
24 import org.simantics.db.management.SingleSessionContextProviderSource;
25 import org.simantics.db.service.LifecycleSupport;
26 import org.simantics.db.testing.impl.Configuration;
27 import org.simantics.graph.db.TransferableGraphs;
28 import org.simantics.graph.representation.TransferableGraph1;
29 import org.simantics.scl.osgi.SCLOsgi;
31 public class AcornTests {
33 private static AcornTestHandler testHandler;
35 public static DatabaseState freshWorkspace(String CORE_DIR, ArrayList<String> fileFilter) throws Exception {
36 SimanticsPlatform.INSTANCE.resetWorkspace(null, fileFilter);
37 return newSimanticsWorkspace(null, CORE_DIR);
40 public static void freshDatabase() throws Exception {
41 DatabaseState state = freshWorkspace(Configuration.get().coreDir, null);
45 public static DatabaseState existingDatabase() throws Exception {
46 return oldSimanticsWorkspace(null, Configuration.get().coreDir);
49 private static void initSimanticsStuff() {
50 // Set session context provider.
51 final ISessionContextProvider provider = new SessionContextProvider(null);
52 ISessionContextProviderSource source = new SingleSessionContextProviderSource(provider);
53 Simantics.setSessionContextProviderSource(source);
54 org.simantics.db.layer0.internal.SimanticsInternal.setSessionContextProviderSource(source);
57 public static DatabaseState newSimanticsWorkspace(TestSettings testSettings, String address) throws Exception {
58 AcornTestHandler testHandler = AcornTests.getTestHandler(testSettings, address);
59 testHandler.initNew();
61 SessionContext sessionContext = SimanticsPlatform.INSTANCE.startUp("acorn", null, RecoveryPolicy.FixError, OntologyRecoveryPolicy.Merge, true, new DefaultChoiceUserAgent());
62 return new DatabaseState(address, sessionContext);
65 public static DatabaseState oldSimanticsWorkspace(TestSettings testSettings, String address) throws Exception {
66 AcornTests.getTestHandler(testSettings, address);
68 SessionContext sessionContext = SimanticsPlatform.INSTANCE.startUp(null, null, RecoveryPolicy.FixError,
69 OntologyRecoveryPolicy.Merge, false, null);
70 return new DatabaseState(address, sessionContext);
73 public static void shutdown(DatabaseState state) throws Exception {
74 SCLOsgi.MODULE_REPOSITORY.flush();
75 SCLOsgi.SOURCE_REPOSITORY = null;
76 SCLOsgi.MODULE_REPOSITORY = null;
77 SCLOsgi.TEST_REPOSITORY = null;
79 if (Platform.isRunning()) {
80 SimanticsPlatform.INSTANCE.shutdown(null);
82 } // Cleanup without platform code.
85 String address = state.getAddress();
88 getTestHandler(null, address).getManagement().shutdown();
89 } catch (Throwable t) {
90 System.out.println(t);
94 public static void initOntology(Session session, String relative) throws DatabaseException {
95 // Open transferable graph file for layer0.
98 binding = Bindings.getBinding(TransferableGraph1.class);
99 } catch (BindingConstructionException e) {
100 throw new DatabaseException(e);
102 File t = new File(TestSettings.getInstance().getWorkspace(), relative);
104 throw new DatabaseException("File does not exist. File=" + t + ".");
106 TransferableGraph1 layer0;
108 InputStream is = new FileInputStream(t);
109 layer0 = (TransferableGraph1) Files.readFile(is, binding);
111 } catch (Exception e) {
113 throw new DatabaseException(e);
116 TransferableGraphs.importGraph(session, layer0);
117 } catch (Throwable e) {
119 throw new DatabaseException("Failed to init db.", e);
123 public static AcornTestHandler getTestHandler() throws DatabaseException {
124 return getTestHandler(null, null);
127 public static AcornTestHandler getTestHandler(TestSettings testSettings, String address)
128 throws DatabaseException {
129 if (null == testHandler)
130 testHandler = new AcornTestHandler(testSettings, address);
134 public static void closeSession(Session session) throws DatabaseException {
136 LifecycleSupport support = session.getService(LifecycleSupport.class);
137 support.close(-1, false);
139 } catch (Exception e) {
141 throw new DatabaseException("Session did not close cleanly.");