package de.ovgu.cide.mining.relationmanager.model;
import java.util.ArrayList;
import org.eclipse.core.runtime.IAdaptable;
import de.ovgu.cide.mining.database.ApplicationController;
import de.ovgu.cide.mining.database.model.AElement;
public class RelationTreeNode implements IAdaptable {
public static enum NODE_KIND {
ROOT, FOLDER, ELEMENT
};
private NODE_KIND kind;
private Object data;
private ArrayList<RelationTreeNode> children;
private RelationTreeNode parent;
private int viewCount;
private int startRange, endRange;
public RelationTreeNode(NODE_KIND kind, Object data) {
this.kind = kind;
this.data = data;
children = new ArrayList<RelationTreeNode>();
viewCount = 0;
if (kind == NODE_KIND.ELEMENT) {
AElement el = (AElement) data;
// UnifiedASTNode uniNode = el.getUnifiedASTNode();
startRange = el.getStartPosition();
endRange = startRange + el.getLength();
} else {
startRange = endRange = 0;
}
}
public void setParent(RelationTreeNode parent) {
this.parent = parent;
}
public RelationTreeNode getParent() {
return parent;
}
// inherited...
public Object getAdapter(Class key) {
return null;
}
public NODE_KIND getKind() {
return kind;
}
public Object getDataObject() {
return data;
}
public void addChild(RelationTreeNode child) {
children.add(child);
child.setParent(this);
}
public void removeChild(RelationTreeNode child) {
children.remove(child);
child.setParent(null);
}
public RelationTreeNode[] getChildren() {
return (RelationTreeNode[]) children
.toArray(new RelationTreeNode[children.size()]);
}
public int getChildrenCount() {
return children.size();
}
public boolean hasChildren() {
return children.size() > 0;
}
public String getDisplayName() {
switch (kind) {
case FOLDER:
return (String) data;
case ELEMENT:
return ((AElement) data).getShortName();
}
return "";
}
public String getRange() {
switch (kind) {
case FOLDER:
return "";
case ELEMENT:
return getRangeString();
}
return "";
}
public String getViewCountString() {
switch (kind) {
case FOLDER:
return String.valueOf(viewCount);
case ELEMENT:
return String.valueOf(ApplicationController.getInstance()
.getViewCountForElement(((AElement) data)));
}
return "";
}
public int getViewCount() {
switch (kind) {
case FOLDER:
return viewCount;
case ELEMENT:
return ApplicationController.getInstance().getViewCountForElement(
((AElement) data));
}
return 0;
}
public void setViewCount(int viewCount) {
this.viewCount = viewCount;
}
private String getRangeString() {
return startRange + "-" + endRange;
}
public int getStartRange() {
return startRange;
}
public int getEndRange() {
return endRange;
}
}