package de.ovgu.cide.mining.featuremanager.model;
import java.util.ArrayList;
import org.eclipse.core.runtime.IAdaptable;
import de.ovgu.cide.features.IFeature;
import de.ovgu.cide.mining.database.ApplicationController;
import de.ovgu.cide.mining.database.model.AElement;
import de.ovgu.cide.mining.database.model.AICategories;
public class FeatureTreeNode implements IAdaptable {
public static enum NODE_KIND {
ROOT, FEATURE, COMPILATION_UNIT, ASTDUMMY, ELEMENT
};
private NODE_KIND kind;
private Object data;
private ArrayList<FeatureTreeNode> children;
private FeatureTreeNode parent;
private int startRange, endRange;
private int viewCount;
private int recommendCount;
private int addCount;
public FeatureTreeNode(NODE_KIND kind, Object data, int addCount) {
this.kind = kind;
this.data = data;
children = new ArrayList<FeatureTreeNode>();
viewCount = 0;
recommendCount = 0;
this.addCount = addCount;
switch (kind) {
case ASTDUMMY:
ASTDummy dummy = (ASTDummy) data;
startRange = dummy.getStart();
endRange = startRange + dummy.getLength();
break;
case ELEMENT:
AElement el = (AElement) data;
// UnifiedASTNode uniNode = el.getUnifiedASTNode();
startRange = el.getStartPosition();
endRange = startRange + el.getLength();
break;
default:
startRange = endRange = 0;
}
}
public void setParent(FeatureTreeNode parent) {
this.parent = parent;
}
public FeatureTreeNode getNodeParent() {
return parent;
}
// inherited...
public Object getAdapter(Class key) {
return null;
}
public NODE_KIND getKind() {
return kind;
}
public Object getDataObject() {
return data;
}
public void addChild(FeatureTreeNode child) {
children.add(child);
child.setParent(this);
}
public void removeChild(FeatureTreeNode child) {
children.remove(child);
child.setParent(null);
}
public FeatureTreeNode[] getChildren() {
return (FeatureTreeNode[]) children
.toArray(new FeatureTreeNode[children.size()]);
}
public int getChildrenCount() {
return children.size();
}
public boolean hasChildren() {
return children.size() > 0;
}
public int getAddCount() {
return addCount;
}
public String getAddCountString() {
return String.valueOf(getAddCount());
}
public String getID() {
switch (kind) {
case FEATURE:
return ((IFeature) data).getName();
case COMPILATION_UNIT:
return String.valueOf(((CUDummy) data).getHashCode());
case ASTDUMMY:
return ((ASTDummy) data).getId();
case ELEMENT:
return ((AElement) data).getId();
}
return "";
}
public String getDisplayName() {
switch (kind) {
case FEATURE:
return ((IFeature) data).getName();
case COMPILATION_UNIT:
return ((CUDummy) data).getName();
case ASTDUMMY:
return ((ASTDummy) data).getName();
case ELEMENT:
return ((AElement) data).getShortName();
}
return "";
}
public String getType() {
switch (kind) {
case FEATURE:
return "";
case COMPILATION_UNIT:
return "";
case ASTDUMMY:
return "";
case ELEMENT:
String type = ((AElement) data).getCategory().toString();
for (AICategories cat : ((AElement) data).getSubCategories()) {
type += ", " + cat.toString();
}
return type;
}
return "";
}
public String getRange() {
switch (kind) {
case FEATURE:
return "";
case COMPILATION_UNIT:
return "";
case ASTDUMMY:
return getRangeString();
case ELEMENT:
return getRangeString();
}
return "";
}
public String getViewCountString() {
return String.valueOf(getViewCount());
}
public void setViewCount(int viewCount) {
this.viewCount = viewCount;
}
public void setRecommendationCount(int rCount) {
this.recommendCount = rCount;
}
public int getViewCount() {
switch (kind) {
case FEATURE:
return viewCount;
case COMPILATION_UNIT:
return viewCount;
case ASTDUMMY:
return viewCount;
case ELEMENT:
return ApplicationController.getInstance().getViewCountForElement(
((AElement) data));
}
return 0;
}
public int getRecommendationCount() {
switch (kind) {
case FEATURE:
return ApplicationController.getInstance().getRecommendationsCount(
getColor(this), -1, -1, -1);
case COMPILATION_UNIT:
return ApplicationController.getInstance().getRecommendationsCount(
getColor(this), -1, -1, ((CUDummy) data).getHashCode());
case ASTDUMMY:
return ApplicationController.getInstance().getRecommendationsCount(
getColor(this), startRange, endRange,
((ASTDummy) data).getHashCode());
case ELEMENT:
return ApplicationController.getInstance().getRecommendationsCount(
getColor(this), ((AElement) data));
}
return 0;
}
public String getRecommendationCountString() {
return String.valueOf(getRecommendationCount());
}
private String getRangeString() {
return startRange + "-" + endRange;
}
public int getStartRange() {
return startRange;
}
public int getEndRange() {
return endRange;
}
public static IFeature getColor(FeatureTreeNode node) {
while (!node.getKind().equals(NODE_KIND.FEATURE)) {
node = node.getNodeParent();
}
return (IFeature) node.getDataObject();
}
}