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;
/** Session specific bindings */
public SimanticsBindings simanticsBindings;
- public SimanticsBindings simanticsBindings2;
public Thread mainThread;
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<String> empty = new ArrayList<String>();
- projectResource = mgmt.createProject(projectName, empty);
- installProject |= true;
+ ArrayList<String> empty = new ArrayList<String>();
+ 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);
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);
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);
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());