public abstract class UpdateOperations {
private List<UpdateOp> operations = new ArrayList<UpdateOp>();
- private Map<Resource, UpdateOp> opMap = new HashMap<Resource, UpdateOp>();
+ private Map<Resource, UpdateOp> resourceMap = new HashMap<Resource, UpdateOp>();
+ private Map<Statement, UpdateOp> statementMap = new HashMap<Statement, UpdateOp>();
private GraphChanges changes;
public UpdateOperations(GraphChanges changes) {
- this.changes = changes;
-
+ this.changes = changes;
}
public UpdateOp getUpdateOp(Resource r) {
- return opMap.get(r);
+ return resourceMap.get(r);
+ }
+
+ public UpdateOp getUpdateOp(Statement s) {
+ return statementMap.get(s);
}
public void applyAll(WriteGraph g) throws DatabaseException {
public List<UpdateOp> getOperations() {
return operations;
}
+
+ public GraphChanges getChanges() {
+ return changes;
+ }
+
+ public Map<Resource, UpdateOp> getResourceMap() {
+ return resourceMap;
+ }
+
+ public Map<Statement, UpdateOp> getStatementMap() {
+ return statementMap;
+ }
private void apply(WriteGraph g, UpdateOp op) throws DatabaseException {
Stack<UpdateOp> stack = new Stack<UpdateOp>();
private void _apply(WriteGraph g, Stack<UpdateOp> stack, UpdateOp op) throws DatabaseException {
if (op.applied())
return;
- if (stack.contains(op))
+ if (stack.contains(op)) {
+ op.apply(g);
return;
+ }
stack.push(op);
if (op.requiresParentOps()) {
for (UpdateOp pop : op.getParentOps())
}
protected void addOp(Resource r, UpdateOp op) {
- opMap.put(r, op);
+ resourceMap.put(r, op);
operations.add(op);
}
- protected UpdateOp getOP(Resource r) {
- return opMap.get(r);
+ protected void addOp(Statement s, UpdateOp op) {
+ statementMap.put(s, op);
+ operations.add(op);
}
-
- public abstract void populate(ReadGraph g) throws DatabaseException;
- protected static Statement getInverse(ReadGraph g, Statement otherComponentInv) throws DatabaseException{
- Statement otherComponent = null;
- for (Statement s : g.getStatements(otherComponentInv.getObject(), g.getInverse(otherComponentInv.getPredicate()))) {
- if (s.getObject().equals(otherComponentInv.getSubject()))
- otherComponent = s;
+ protected void replaceOp(Resource r, UpdateOp op) {
+ UpdateOp oldOp = resourceMap.remove(r);
+ if (oldOp != null) {
+ operations.remove(oldOp);
}
- return otherComponent;
+ resourceMap.put(r, op);
+ operations.add(op);
+ }
+
+ protected UpdateOp getOP(Resource r) {
+ return resourceMap.get(r);
+ }
+
+ protected UpdateOp getOP(Statement r) {
+ return statementMap.get(r);
}
+
+ public abstract void populate(ReadGraph g) throws DatabaseException;
protected boolean compares(Resource r1, Resource r2) {
if (r1.equals(r2))