X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics%2Fsrc%2Forg%2Fsimantics%2FSimanticsPlatform.java;h=8b1ac1bced1659d414c17dbf6930b11500bbed2b;hp=ad3b86d9c989814c64fbb1783c5a8982fe60940c;hb=48bb50bb6640506d1f150ca8e4fa5a6e878464be;hpb=b6e702e0d16d951a25380f08de6dd2e7d4a0b127 diff --git a/bundles/org.simantics/src/org/simantics/SimanticsPlatform.java b/bundles/org.simantics/src/org/simantics/SimanticsPlatform.java index ad3b86d9c..8b1ac1bce 100644 --- a/bundles/org.simantics/src/org/simantics/SimanticsPlatform.java +++ b/bundles/org.simantics/src/org/simantics/SimanticsPlatform.java @@ -60,16 +60,15 @@ import org.simantics.db.UndoContext; import org.simantics.db.VirtualGraph; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.ObjectsWithType; -import org.simantics.db.common.request.Queries; import org.simantics.db.common.request.WriteResultRequest; import org.simantics.db.common.utils.Transaction; import org.simantics.db.exception.ClusterSetExistException; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.exception.ResourceNotFoundException; import org.simantics.db.indexing.DatabaseIndexing; import org.simantics.db.layer0.genericrelation.DependenciesRelation; import org.simantics.db.layer0.genericrelation.IndexException; import org.simantics.db.layer0.genericrelation.IndexedRelations; +import org.simantics.db.layer0.request.PossibleResource; import org.simantics.db.layer0.util.SimanticsClipboardImpl; import org.simantics.db.layer0.util.SimanticsKeys; import org.simantics.db.layer0.util.TGTransferableGraphSource; @@ -187,7 +186,6 @@ public class SimanticsPlatform implements LifecycleListener { /** Session specific bindings */ public SimanticsBindings simanticsBindings; - public SimanticsBindings simanticsBindings2; public Thread mainThread; @@ -538,30 +536,31 @@ public class SimanticsPlatform implements LifecycleListener { monitor.setTaskName("Asserting project resource exists in the database"); try { - projectResource = session.syncRequest( Queries.resource( projectURI ) ); - } catch (ResourceNotFoundException nfe) { - // Project was not found - if (workspacePolicy == RecoveryPolicy.ThrowError) - throw new PlatformException("Project Resource "+projectURI+" is not found in the database."); - // Create empty project with no features - try { - Transaction.startTransaction(session, true); + projectResource = session.syncRequest(new PossibleResource(projectURI)); + if (projectResource == null) { + // Project was not found + if (workspacePolicy == RecoveryPolicy.ThrowError) + throw new PlatformException("Project Resource "+projectURI+" is not found in the database."); + // Create empty project with no features try { - // The project needs to be created mutable. - session.getService(XSupport.class).setServiceMode(true, false); + Transaction.startTransaction(session, true); + try { + // The project needs to be created mutable. + session.getService(XSupport.class).setServiceMode(true, false); - ArrayList empty = new ArrayList(); - projectResource = mgmt.createProject(projectName, empty); - installProject |= true; + ArrayList empty = new ArrayList(); + projectResource = mgmt.createProject(projectName, empty); + installProject |= true; - session.getService(XSupport.class).setServiceMode(false, false); - Transaction.commit(); - } finally { - Transaction.endTransaction(); + session.getService(XSupport.class).setServiceMode(false, false); + Transaction.commit(); + } finally { + Transaction.endTransaction(); + } + //session.getService( LifecycleSupport.class ).save(); + } catch (DatabaseException e) { + throw new PlatformException("Failed to create "+projectURI, e); } - //session.getService( LifecycleSupport.class ).save(); - } catch (DatabaseException e) { - throw new PlatformException("Failed to create "+projectURI, e); } } catch (DatabaseException e) { throw new PlatformException("Failed to create "+projectURI, e); @@ -864,17 +863,11 @@ public class SimanticsPlatform implements LifecycleListener { Simantics.setSessionContext(sessionContext); // 1. Put ResourceBinding that throws an exception to General Bindings - simanticsBindings = new SimanticsBindings( null ); + simanticsBindings = new SimanticsBindings(); Bindings.classBindingFactory.addFactory( simanticsBindings ); - - // 2. Create session-specific second Binding context (Databoard) and - // put that to Session as a service Session session = sessionContext.getSession(); - Databoard sessionDataboard = new Databoard(); - session.registerService(Databoard.class, sessionDataboard); - simanticsBindings2 = new SimanticsBindings( session ); - sessionDataboard.classBindingFactory.addFactory( simanticsBindings2 ); + session.registerService(Databoard.class, Bindings.databoard); // Register datatype bindings Bindings.defaultBindingFactory.getRepository().put(RGB.Integer.BINDING.type(), RGB.Integer.BINDING); @@ -982,12 +975,9 @@ public class SimanticsPlatform implements LifecycleListener { running = false; progress.subTask("Close Database Session"); - Databoard databoard = null; if (sessionContext != null) { Session s = sessionContext.peekSession(); if (s != null) { - databoard = s.peekService(Databoard.class); - progress.subTask("Flushing Index Caches"); try { Simantics.flushIndexCaches(progress.newChild(20), s); @@ -1005,13 +995,6 @@ public class SimanticsPlatform implements LifecycleListener { Bindings.classBindingFactory.removeFactory( simanticsBindings ); simanticsBindings = null; } - if (databoard != null) { - if (simanticsBindings2 != null) { - databoard.classBindingFactory.removeFactory( simanticsBindings2 ); - simanticsBindings2 = null; - } - databoard.clear(); - } // Make sure Simantics clipboard doesn't store unwanted session data references. Simantics.setClipboard(new SimanticsClipboardImpl());