]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateNode.java
Base classes for model updates
[simantics/interop.git] / org.simantics.interop.update / src / org / simantics / interop / update / model / UpdateNode.java
diff --git a/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateNode.java b/org.simantics.interop.update/src/org/simantics/interop/update/model/UpdateNode.java
new file mode 100644 (file)
index 0000000..e1312bf
--- /dev/null
@@ -0,0 +1,91 @@
+package org.simantics.interop.update.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.NoSingleResultException;
+import org.simantics.db.exception.ServiceException;
+import org.simantics.db.exception.ValidationException;
+import org.simantics.layer0.Layer0;
+
+public abstract class UpdateNode {
+
+       public enum Status {EXIST,DELETED,NEW,CONTAINS};
+       
+
+       private Status status;
+       private UpdateOp op;
+       private Resource r;
+       
+       
+       private Collection<UpdateNode> children = new ArrayList<UpdateNode>();
+       /**
+        * 
+        * @param resource old Resource if status is DELETED or EXISTS.
+        * @param status
+        * @param changes
+        */
+       public UpdateNode(Status status, UpdateOp op) {
+
+               this.status = status;
+               this.op = op;
+               this.r = op.getResource();
+       }
+       
+       public UpdateNode(Status status, Resource r) {
+
+               this.status = status;
+               this.op = null;
+               this.r = r;
+       }
+       
+       public Resource getResource() {
+               return r;
+       }
+       
+       public Resource getParentResource(ReadGraph g) throws DatabaseException {
+               Layer0 l0 = Layer0.getInstance(g);
+               return g.getPossibleObject(r, l0.PartOf);
+       }
+       
+       public void setStatus(Status status) {
+               this.status = status;
+       }
+       
+       public Status getStatus() {
+               return status;
+       }
+       
+       public Collection<UpdateNode> getChildren() {
+               return children;
+       }
+       
+       public void addChild(UpdateNode node) {
+               children.add(node);
+       }
+
+       public abstract ImageDescriptor getImage(ReadGraph graph) throws DatabaseException;
+
+       public String getLabel(ReadGraph graph) throws DatabaseException {
+               return getLabel(graph,r);
+       }
+       
+       protected String getLabel(ReadGraph graph, Resource r) throws ValidationException, ServiceException, NoSingleResultException {
+               String label = NameUtils.getSafeLabel(graph, r);
+               if (label.length() == 0)
+                       label = NameUtils.getSafeName(graph, r);
+               
+               return label;
+       }
+
+
+       public UpdateOp getOp() {
+               return op;
+       }
+
+}