]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.update/src/org/simantics/interop/update/model/AddDeleteUpdateOp.java
Process changes in smaller chunks
[simantics/interop.git] / org.simantics.interop.update / src / org / simantics / interop / update / model / AddDeleteUpdateOp.java
index 3bd21b05a92208620dfec0e2f7b27e5e24fdaccd..0ddbcb76c1c36e46ad4b91883bda75b1cdcda9f6 100644 (file)
@@ -42,10 +42,10 @@ public abstract class AddDeleteUpdateOp extends UpdateOp {
        @Override
        public boolean requiresOp(UpdateOp op) {
            if (add) {
-               if (getParentOps().contains(op))
+               if (getParentOps().contains(op) && op.isAdd())
                    return true;
            } else {
-               if (getSubOps().contains(op))
+               if (getSubOps().contains(op) && op.isDelete())
                 return true;
            }
            return false;
@@ -67,7 +67,7 @@ public abstract class AddDeleteUpdateOp extends UpdateOp {
                                continue;
                        if (g.isInstanceOf(s.getObject(), l0.Literal)) {
                                Object value = g.getPossibleValue(s.getObject());
-                               System.out.println(NameUtils.getSafeName(g, s.getSubject()) + " " + NameUtils.getSafeName(g, s.getPredicate()) + " " + NameUtils.getSafeName(g, s.getObject()) + " " + value);
+                               //System.out.println(NameUtils.getSafeName(g, s.getSubject()) + " " + NameUtils.getSafeName(g, s.getPredicate()) + " " + NameUtils.getSafeName(g, s.getObject()) + " " + value);
                                if (value != null) {
                                        Statement valueStm = g.getPossibleStatement(destination, s.getPredicate());
                                        Resource valueResource = null;
@@ -87,7 +87,13 @@ public abstract class AddDeleteUpdateOp extends UpdateOp {
                                g.claim(destination, s.getPredicate(), valueResource);
                                copyProperties(g, s.getObject(), valueResource);
                        } else {
-                               throw new DatabaseException("Expected to copy property resource " + s.getObject());
+                               Resource type = g.getPossibleType(s.getObject(), l0.Value);
+                               if (type != null && g.hasStatement(type, l0.Enumeration, type)) {
+                                       g.deny(destination, s.getPredicate());
+                                       g.claim(destination, s.getPredicate(), s.getObject());
+                               } else {
+                                       throw new DatabaseException("Expected to copy property resource " + s.getObject());
+                               }
                        }
                }
        }