--- /dev/null
+package org.simantics.db.testing.common;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.Platform;
+import org.simantics.DefaultChoiceUserAgent;
+import org.simantics.Simantics;
+import org.simantics.SimanticsPlatform;
+import org.simantics.SimanticsPlatform.OntologyRecoveryPolicy;
+import org.simantics.SimanticsPlatform.RecoveryPolicy;
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.Files;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.binding.error.BindingConstructionException;
+import org.simantics.db.Session;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.util.RuntimeEnvironmentRequest;
+import org.simantics.db.management.ISessionContextProvider;
+import org.simantics.db.management.ISessionContextProviderSource;
+import org.simantics.db.management.SessionContext;
+import org.simantics.db.management.SessionContextProvider;
+import org.simantics.db.management.SingleSessionContextProviderSource;
+import org.simantics.db.service.LifecycleSupport;
+import org.simantics.db.service.VirtualGraphSupport;
+import org.simantics.db.testing.impl.Configuration;
+import org.simantics.graph.db.TransferableGraphs;
+import org.simantics.graph.representation.TransferableGraph1;
+import org.simantics.scl.osgi.SCLOsgi;
+
+public class AcornTests {
+
+ private static AcornTestHandler testHandler;
+
+ public static DatabaseState freshWorkspace(String CORE_DIR, ArrayList<String> fileFilter) throws Exception {
+ SimanticsPlatform.INSTANCE.resetWorkspace(null, fileFilter);
+ return newSimanticsWorkspace(null, CORE_DIR);
+ }
+
+ public static void freshDatabase() throws Exception {
+ DatabaseState state = freshWorkspace(Configuration.get().coreDir, null);
+ AcornTests.shutdown(state);
+ }
+
+ public static DatabaseState existingDatabase() throws Exception {
+ return oldSimanticsWorkspace(null, Configuration.get().coreDir);
+ }
+
+ private static void initSimanticsStuff() {
+ // Set session context provider.
+ final ISessionContextProvider provider = new SessionContextProvider(null);
+ ISessionContextProviderSource source = new SingleSessionContextProviderSource(provider);
+ Simantics.setSessionContextProviderSource(source);
+ org.simantics.db.layer0.internal.SimanticsInternal.setSessionContextProviderSource(source);
+ }
+
+ public static DatabaseState newSimanticsWorkspace(TestSettings testSettings, String address) throws Exception {
+ AcornTestHandler testHandler = AcornTests.getTestHandler(testSettings, address);
+ testHandler.initNew();
+ initSimanticsStuff();
+ SessionContext sessionContext = SimanticsPlatform.INSTANCE.startUp("acorn", null, RecoveryPolicy.FixError,
+ OntologyRecoveryPolicy.Merge, true, new DefaultChoiceUserAgent());
+ return new DatabaseState(address, sessionContext);
+ }
+
+ public static DatabaseState oldSimanticsWorkspace(TestSettings testSettings, String address) throws Exception {
+ AcornTests.getTestHandler(testSettings, address);
+ initSimanticsStuff();
+ SessionContext sessionContext = SimanticsPlatform.INSTANCE.startUp(null, null, RecoveryPolicy.FixError,
+ OntologyRecoveryPolicy.Merge, false, null);
+ return new DatabaseState(address, sessionContext);
+ }
+
+ public static void shutdown(DatabaseState state) throws Exception {
+ SCLOsgi.MODULE_REPOSITORY.flush();
+ SCLOsgi.SOURCE_REPOSITORY = null;
+ SCLOsgi.MODULE_REPOSITORY = null;
+ SCLOsgi.TEST_REPOSITORY = null;
+
+// VirtualGraphSupport vsupport;
+// if (state != null) {
+// vsupport = state.getSession().getService(VirtualGraphSupport.class);
+// vsupport.discard();
+// }
+
+ if (Platform.isRunning()) {
+ SimanticsPlatform.INSTANCE.shutdown(null);
+ return;
+ } // Cleanup without platform code.
+ if (null == state)
+ return;
+ String address = state.getAddress();
+ try {
+ if (null != address)
+ getTestHandler(null, address).getManagement().shutdown();
+ } catch (Throwable t) {
+ System.out.println(t);
+ }
+ }
+
+ public static void initOntology(Session session, String relative) throws DatabaseException {
+ // Open transferable graph file for layer0.
+ Binding binding;
+ try {
+ binding = Bindings.getBinding(TransferableGraph1.class);
+ } catch (BindingConstructionException e) {
+ throw new DatabaseException(e);
+ }
+ File t = new File(TestSettings.getInstance().getWorkspace(), relative);
+ if (!t.exists())
+ throw new DatabaseException("File does not exist. File=" + t + ".");
+
+ TransferableGraph1 layer0;
+ try {
+ InputStream is = new FileInputStream(t);
+ layer0 = (TransferableGraph1) Files.readFile(is, binding);
+ is.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new DatabaseException(e);
+ }
+ try {
+ TransferableGraphs.importGraph(session, layer0);
+ } catch (Throwable e) {
+ e.printStackTrace();
+ throw new DatabaseException("Failed to init db.", e);
+ }
+ }
+
+ public static AcornTestHandler getTestHandler() throws DatabaseException {
+ return getTestHandler(null, null);
+ }
+
+ public static AcornTestHandler getTestHandler(TestSettings testSettings, String address)
+ throws DatabaseException {
+ if (null == testHandler)
+ testHandler = new AcornTestHandler(testSettings, address);
+ return testHandler;
+ }
+
+ public static void closeSession(Session session) throws DatabaseException {
+ try {
+ LifecycleSupport support = session.getService(LifecycleSupport.class);
+ support.close(-1, false);
+ session = null;
+ } catch (Exception e) {
+ session = null;
+ throw new DatabaseException("Sessuion did not close cleanly.");
+ }
+ }
+
+}