package org.simantics.interop.update.model;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
protected abstract Pair<GraphComparator,String> getChanges(Resource r1, Resource r2) throws DatabaseException;
protected abstract UpdateTree getUpdateTree(GraphChanges changes) throws DatabaseException;
protected UpdateList getUpdateList(GraphChanges changes) throws DatabaseException {
- return new UpdateList(changes.getModifications());
+ return new UpdateList(changes, changes.getModifications());
}
protected void addFilters(List<ChangeFilter> filters) {
public void applyAll(WriteGraph graph) throws DatabaseException {
Layer0Utils.addCommentMetadata(graph, "Apply all model updates");
graph.markUndoPoint();
- for (Pair<Statement, Statement> mod : updateList.getChanges()) {
- applyLiteralChange(graph, mod);
+ for (PropertyChange mod : updateList.getChanges()) {
+ mod.apply(graph);
}
- updateList.clear();
updateTree.getUpdateOps().applyAll(graph);
}
public void applySelected(WriteGraph graph) throws DatabaseException {
Layer0Utils.addCommentMetadata(graph, "Apply selected model updates");
graph.markUndoPoint();
- HashSet<Pair<Statement, Statement>> changes = new HashSet<>(updateList.getSelected());
- for (Pair<Statement, Statement> mod : changes) {
- updateList.removeChange(mod);
- applyLiteralChange(graph, mod);
+ for (PropertyChange mod : updateList.getChanges()) {
+ if (mod.selected())
+ mod.apply(graph);
}
updateTree.getUpdateOps().applySelected(graph);
}
- protected void applyLiteralChange(WriteGraph graph, Pair<Statement, Statement> mod) throws DatabaseException {
- if (mod.second == null) {
- graph.deny(mod.first);
- return;
- }
- Resource s = changes.getComparable().getLeft(mod.second.getSubject());
- Resource pred = mod.second.getPredicate();
- if (graph.hasValue(mod.second.getObject())) {
- Object value = graph.getValue(mod.second.getObject());
- graph.claimLiteral(s, pred, value);
- } else {
- graph.deny(s,pred);
- }
- }
+
protected Session getSession() {
}
- for (Pair<Statement, Statement> pair : updateList.getChanges()) {
- updateList.addSelected(pair);
+ for (PropertyChange pair : updateList.getChanges()) {
+ pair.select(true);
}
// preserve user-made changes (by removing selections)
}
}
- for (Pair<Statement, Statement> pair : updateList.getChanges()) {
- if (pair.first != null) {
+ for (PropertyChange pair : updateList.getChanges()) {
+ if (pair.getFirst() != null) {
boolean found = false;
- for (Pair<Statement, Statement> pair2 : updateList2.getChanges()) {
- if (pair.first.equals(pair2.second)) {
+ for (PropertyChange pair2 : updateList2.getChanges()) {
+ if (pair.getFirst().equals(pair2.getSecond())) {
found = true;
break;
}
}
if (found) {
- updateList.removeSelected(pair);
+ pair.select(false);
}
}
}