package org.simantics.interop.update.model;
import java.util.ArrayList;
-import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
import org.eclipse.jface.resource.ImageDescriptor;
import org.simantics.db.ReadGraph;
public class UpdateNode {
+ private UpdateNode parent;
private UpdateStatus status;
private UpdateOp op;
private Resource r;
private String label;
+ private boolean visible = true;
- private Collection<UpdateNode> children = new ArrayList<UpdateNode>();
+ private List<UpdateNode> children;
/**
*
* @param resource old Resource if status is DELETED or EXISTS.
this.status = status;
this.op = op;
this.r = op.getResource();
- this.label = getLabel(g, r);
+ init(g);
}
public UpdateNode(ReadGraph g, UpdateStatus status, Resource r) throws DatabaseException {
this.status = status;
this.op = null;
this.r = r;
+ init(g);
+ }
+
+ protected void init(ReadGraph g) throws DatabaseException {
this.label = getLabel(g, r);
}
}
public Resource getParentResource(ReadGraph g) throws DatabaseException {
+ if (op != null) {
+ Resource parent = op.getParentResource(g);
+ if (parent != null)
+ return parent;
+ }
Layer0 l0 = Layer0.getInstance(g);
return g.getPossibleObject(r, l0.PartOf);
}
return status;
}
- public Collection<UpdateNode> getChildren() {
+ @SuppressWarnings("unchecked")
+ public List<UpdateNode> getChildren() {
+ if (children == null)
+ return Collections.EMPTY_LIST;
return children;
}
public void addChild(UpdateNode node) {
+ if (children == null)
+ children = new ArrayList<UpdateNode>(2);
children.add(node);
+ node.parent = this;
if (op != null && node.op != null) {
if (!op.getSubOps().contains(node.op)) {
op.addSubOp(node.op);
}
}
}
+
+ public void sort() {
+ if (children == null)
+ return;
+ Comparator<UpdateNode> comparator = new Comparator<UpdateNode>() {
+ @Override
+ public int compare(UpdateNode o1, UpdateNode o2) {
+ return o1.getLabel().compareTo(o2.getLabel());
+ }
+ };
+ Collections.sort(this.children, comparator );
+ for (UpdateNode n : this.children) {
+ n.sort(comparator);
+ }
+ }
+
+ public void sort(Comparator<UpdateNode> comparator ) {
+ if (children == null)
+ return;
+ Collections.sort(this.children, comparator );
+ for (UpdateNode n : this.children) {
+ n.sort(comparator);
+ }
+ }
public ImageDescriptor getImage(ReadGraph graph) throws DatabaseException {
return null;
public UpdateOp getOp() {
return op;
}
+
+ public boolean isVisible() {
+ return visible;
+ }
+
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ if (op != null)
+ op.visible = visible;
+ if (visible) {
+ if (parent != null && !parent.visible)
+ parent.setVisible(true);
+ } else {
+ if (children != null)
+ for (UpdateNode n : children)
+ n.setVisible(false);
+ }
+ }
+
+ public void setAllVisible(boolean visible) {
+ this.visible = visible;
+ if (op != null)
+ op.visible = visible;
+ if (children != null)
+ for (UpdateNode n : children)
+ n.setAllVisible(visible);
+ }
}