Use PossibleResource query to check if the project resource is present 12/2312/1
authorJussi Koskela <jussi.koskela@semantum.fi>
Tue, 16 Oct 2018 07:19:18 +0000 (10:19 +0300)
committerJussi Koskela <jussi.koskela@semantum.fi>
Tue, 16 Oct 2018 07:19:18 +0000 (10:19 +0300)
Earlier implementation logged unnecessary ResourceNotFoundException when
creating the project resource for the first time in Platform startup.

gitlab #148

Change-Id: Ic75180dfdd88770f9a91a2468f639e59afea99e0

bundles/org.simantics/src/org/simantics/SimanticsPlatform.java

index ad3b86d9c989814c64fbb1783c5a8982fe60940c..cc5a0e27022e018c78882cc5071413d44e81953a 100644 (file)
@@ -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;
@@ -538,30 +537,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<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);