public abstract class AddDeleteUpdateOp extends UpdateOp {
- boolean add;
+ protected boolean add;
+
public AddDeleteUpdateOp(GraphChanges changes) {
super(changes);
}
+ public AddDeleteUpdateOp(boolean add, GraphChanges changes) {
+ super(changes);
+ this.add = add;
+ }
+
@Override
public boolean isAdd() {
return add;
}
@Override
- public boolean requiresParentOps() {
- return add;
+ public boolean requiresOp(UpdateOp op) {
+ if (add) {
+ if (getParentOps().contains(op) && op.isAdd())
+ return true;
+ } else {
+ if (getSubOps().contains(op) && op.isDelete())
+ return true;
+ }
+ return false;
}
-
+
@Override
- public boolean requiresSubOps() {
- return !add;
+ public boolean selectOp(UpdateOp op, boolean select) {
+ if (select) {
+ return requiresOp(op);
+ } else {
+ return op.requiresOp(this);
+ }
}
- protected static void copyProperties(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
+ public static void copyProperties(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
Layer0 l0 = Layer0.getInstance(g);
for (Statement s : g.getStatements(source, l0.HasProperty)) {
if (s.isAsserted(source))
continue;
- 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);
- if (value != null) {
- Statement valueStm = g.getPossibleStatement(destination, s.getPredicate());
- Resource valueResource = null;
- if (valueStm != null && !valueStm.isAsserted(destination))
- valueResource = valueStm.getObject();
- if (valueResource == null) {
- valueResource = g.newResource();
- g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf));
- g.claim(destination, s.getPredicate(), valueResource);
+ 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);
+ if (value != null) {
+ Statement valueStm = g.getPossibleStatement(destination, s.getPredicate());
+ Resource valueResource = null;
+ if (valueStm != null && !valueStm.isAsserted(destination))
+ valueResource = valueStm.getObject();
+ if (valueResource == null) {
+ valueResource = g.newResource();
+ g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf));
+ g.claim(destination, s.getPredicate(), valueResource);
+ }
+ g.claimValue(valueResource, value);
+ //g.claimLiteral(destination, s.getPredicate(), value);
}
- g.claimValue(valueResource, value);
- //g.claimLiteral(destination, s.getPredicate(), value);
+ } else if (g.isInstanceOf(s.getObject(), l0.SCLValue)) {
+ Resource valueResource = g.newResource();
+ g.claim(valueResource, l0.InstanceOf, g.getSingleObject(s.getObject(), l0.InstanceOf));
+ g.claim(destination, s.getPredicate(), valueResource);
+ copyProperties(g, s.getObject(), valueResource);
+ } else {
+ throw new DatabaseException("Expected to copy property resource " + s.getObject());
}
}
}
+ public static void copyTags(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(g);
+ for (Statement s : g.getStatements(source, L0.IsWeaklyRelatedTo)) {
+ if (s.getObject().equals(source)) {
+ g.claim(destination, s.getPredicate(), destination);
+ }
+ }
+ }
+
+ public static void copyTypes(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
+ Layer0 L0 = Layer0.getInstance(g);
+ for (Resource r : g.getObjects(source, L0.InstanceOf))
+ g.claim(destination, L0.InstanceOf, r);
+ for (Resource r : g.getObjects(source, L0.Inherits))
+ g.claim(destination, L0.Inherits, r);
+ for (Resource r : g.getObjects(source, L0.SubrelationOf))
+ g.claim(destination, L0.SubrelationOf, r);
+ }
+
protected void copyIssues(WriteGraph g, Resource source, Resource destination) throws DatabaseException {
Layer0 l0 = Layer0.getInstance(g);
IssueResource ir = IssueResource.getInstance(g);