skeletonGraph.setMapHNodeToDescSet(getMapHNodeToDescSet());
skeletonGraph.setMapHNodetoMergeSet(getMapHNodetoMergeSet());
skeletonGraph.setMapHNodeToCurrentHNode(getMapHNodeToCurrentHNode());
+ skeletonGraph.setMapHNodeNameToCurrentHNode(getMapHNodeNameToCurrentHNode());
return skeletonGraph;
}
private void addMapHNodeToCurrentHNode(HNode curNode, HNode newNode) {
+
if (curNode.isMergeNode()) {
Set<HNode> mergingSet = getMergingSet(curNode);
mergingSet.add(curNode);
mapHNodeToCurrentHNode.put(curNode, newNode);
mapHNodeNameToCurrentHNode.put(curNode.getName(), newNode);
}
+
}
public HNode getCurrentHNode(HNode node) {
Set<HNode> combineSet = (Set<HNode>) iterator.next();
// System.out.println("--combineSet=" + combineSet);
HNode combinationNode = getCombinationNode(combineSet);
- // System.out.println("--combinationNode=" + combinationNode);
+ System.out.println("--combinationNode=" + combinationNode + " combineSet=" + combineSet);
+
+ System.out.println("--hierarchynodes="
+ + simpleHierarchyGraph.getCombinationNodeSetByCombineNodeSet(combineSet));
// add an edge from a skeleton node to a combination node
for (Iterator iterator2 = combineSet.iterator(); iterator2.hasNext();) {
HNode inSkeletonNode = (HNode) iterator2.next();
Set<HNode> reachToSet = new HashSet<HNode>();
Set<HNode> visited = new HashSet<HNode>();
+ // visited.add(node);
recurSkeletonReachTo(node, reachToSet, visited);
// obsolete!
HNode inNode = (HNode) iterator.next();
if (inNode.isSkeleton()) {
+ visited.add(inNode);
reachToSet.add(inNode);
} else if (!visited.contains(inNode)) {
visited.add(inNode);
HNode node = (HNode) iterator.next();
if (!node.isSkeleton()) {
Set<HNode> reachToSet = getSkeleteNodeSetReachTo(node);
- System.out.println("$node=" + node + " reachToNodeSet=" + reachToSet);
+ // Set<HNode> tempSet = removeTransitivelyReachToSet(reachToSet);
+ // reachToSet = removeTransitivelyReachToSet(reachToSet);
+ Set<HNode> tempSet = reachToSet;
+ System.out.println("$node=" + node + " reachToNodeSet=" + reachToSet + " tempSet="
+ + tempSet);
if (reachToSet.size() > 1) {
// if (countSkeletonNodes(reachToSet) > 1) {
System.out.println("-node=" + node + " reachToSet=" + reachToSet);
}
+ private Set<HNode> removeTransitivelyReachToSet(Set<HNode> reachToSet) {
+
+ Set<HNode> toberemoved = new HashSet<HNode>();
+ Set<HNode> visited = new HashSet<HNode>();
+ for (Iterator iterator = reachToSet.iterator(); iterator.hasNext();) {
+ HNode node = (HNode) iterator.next();
+ visited.add(node);
+ recurIsReachingTo(node, reachToSet, toberemoved, visited);
+ }
+
+ Set<HNode> rSet = new HashSet<HNode>();
+ rSet.addAll(reachToSet);
+ rSet.removeAll(toberemoved);
+ return rSet;
+ }
+
+ private void recurIsReachingTo(HNode curNode, Set<HNode> reachToSet, Set<HNode> toberemoved,
+ Set<HNode> visited) {
+ Set<HNode> inNodeSet = getIncomingNodeSet(curNode);
+
+ for (Iterator iterator = inNodeSet.iterator(); iterator.hasNext();) {
+ HNode inNode = (HNode) iterator.next();
+ if (reachToSet.contains(inNode)) {
+ toberemoved.add(inNode);
+ } else if (!visited.contains(inNode)) {
+ visited.add(inNode);
+ recurIsReachingTo(inNode, reachToSet, toberemoved, visited);
+ }
+ }
+
+ }
+
public Map<HNode, Set<HNode>> getMapCombinationNodeToCombineNodeSet() {
return mapCombinationNodeToCombineNodeSet;
}
}
public void writeGraph() {
+ writeGraph(false);
+ }
+
+ public void writeGraph(boolean isSimple) {
String graphName = "hierarchy" + name;
graphName = graphName.replaceAll("[\\W]", "");
+ if (isSimple) {
+ graphName += "_PAPER";
+ }
+
+ // System.out.println("***graphName=" + graphName + " node siz=" + nodeSet.size());
+
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(graphName + ".dot"));
if (outSet.size() == 0) {
if (!addedNodeSet.contains(u)) {
- drawNode(bw, u);
+ if (!isSimple) {
+ drawNode(bw, u);
+ } else {
+ drawNodeName(bw, u);
+ }
addedNodeSet.add(u);
}
} else {
for (Iterator iterator = outSet.iterator(); iterator.hasNext();) {
HNode v = (HNode) iterator.next();
if (!addedNodeSet.contains(u)) {
- drawNode(bw, u);
+ if (!isSimple) {
+ drawNode(bw, u);
+ } else {
+ drawNodeName(bw, u);
+ }
addedNodeSet.add(u);
}
if (!addedNodeSet.contains(v)) {
- drawNode(bw, v);
+ if (!isSimple) {
+ drawNode(bw, v);
+ } else {
+ drawNodeName(bw, v);
+ }
addedNodeSet.add(v);
}
bw.write("" + u.getName() + " -> " + v.getName() + ";\n");
return str;
}
+ private void drawNodeName(BufferedWriter bw, HNode node) throws IOException {
+ String nodeName = node.getNamePropertyString();
+ bw.write(node.getName() + " [label=\"" + nodeName + "\"]" + ";\n");
+ }
+
private void drawNode(BufferedWriter bw, HNode node) throws IOException {
String nodeName;
if (node.isMergeNode()) {