]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.testing/src/org/simantics/db/testing/common/AcornTests.java
Added missing org.simantics.db.{tests,testing} plug-ins.
[simantics/platform.git] / bundles / org.simantics.db.testing / src / org / simantics / db / testing / common / AcornTests.java
diff --git a/bundles/org.simantics.db.testing/src/org/simantics/db/testing/common/AcornTests.java b/bundles/org.simantics.db.testing/src/org/simantics/db/testing/common/AcornTests.java
new file mode 100644 (file)
index 0000000..e72ea32
--- /dev/null
@@ -0,0 +1,154 @@
+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.");
+        }
+    }
+
+}