package models.controlFlowModel;
import models.Edge;
import models.Node;
import java.util.ArrayList;
import java.util.List;
public class ObjectNode extends Node {
protected String name = "";
public ObjectNode(String name) {
inEdges = new ArrayList<>();
outEdges = new ArrayList<>();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public CallEdge getInEdge(int i) {
return (CallEdge) ((List<Edge>) inEdges).get(i);
}
public CallEdge getOutEdge(int i) {
return (CallEdge) ((List<Edge>) outEdges).get(i);
}
public CallEdge findEdgeInInEdges(final CallEdge edge) {
for (Edge e : inEdges) {
if (e instanceof CallEdge) return (CallEdge) e;
}
return null;
}
public void insertOutEdge(CallEdge edge, int n) {
((List<Edge>) outEdges).add(n, edge);
}
public int getChildrenNum() {
return outEdges.size();
}
public int getOutEdgeCallOrder(final CallEdge callEdge) {
for (int i = 0; i < outEdges.size(); i++) {
if (callEdge.equals(getOutEdge(i))) return i;
}
return -1;
}
public ObjectNode getChildren(int i) {
return (ObjectNode) ((List<Edge>) outEdges).get(i).getDestination();
}
/*************************************************************
* 指定したエッジ(出力側)の呼び出し順を変更する.
* @param curOrder 現在の呼び出し順
* @param newCallOrder 新しい呼び出し順
*/
public void sortOutEdgesByCallOrder(final int curOrder, final int newCallOrder) {
ArrayList<Edge> edges = ((ArrayList<Edge>) outEdges);
Edge selectedEdge = ((List<Edge>) outEdges).get(curOrder);
Edge tempEdge = ((List<Edge>) outEdges).get(newCallOrder - 1);
edges.set(newCallOrder - 1, selectedEdge);
edges.set(curOrder, tempEdge);
}
}