]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/children/ChildContribution.java
Added transient caching for BrowseContext construction
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / children / ChildContribution.java
index ca9f59da0cd89e7f5bd34474b28d07288527bcab..09a15fefcb6bd5a4235fd2a4433130057c54b170 100644 (file)
@@ -22,6 +22,8 @@ import org.simantics.browsing.ui.model.nodetypes.NodeType;
 import org.simantics.databoard.Bindings;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
+import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;
+import org.simantics.db.common.request.ResourceRead;
 import org.simantics.db.common.utils.NameUtils;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.exception.PendingVariableException;
@@ -52,6 +54,26 @@ public class ChildContribution {
         this.priority = priority;
     }
 
+    public static ChildContribution createCached(ReadGraph g, Resource childContributionResource) throws DatabaseException, InvalidContribution {
+        try {
+            return g.syncRequest(new ResourceRead<ChildContribution>(childContributionResource) {
+                @Override
+                public ChildContribution perform(ReadGraph graph) throws DatabaseException {
+                    try {
+                        return create(g, resource);
+                    } catch (InvalidContribution e) {
+                        throw new DatabaseException(e);
+                    }
+                }
+            }, TransientCacheAsyncListener.instance());
+        } catch (DatabaseException e) {
+            Throwable c = e.getCause();
+            if (c instanceof InvalidContribution)
+                throw (InvalidContribution) c;
+            throw e;
+        }
+    }
+
     public static ChildContribution create(ReadGraph g, Resource childContributionResource) throws DatabaseException, InvalidContribution {
         ViewpointResource vr = ViewpointResource.getInstance(g);