package splar.core.heuristics; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import splar.core.fm.FeatureModel; import splar.core.fm.FeatureTreeNode; public class FTPreOrderOptTraversalHeuristic extends FTPreOrderTraversalHeuristic { public FTPreOrderOptTraversalHeuristic(String name, FeatureModel featureModel) { super(name, featureModel); } protected FeatureTreeNode[] orderChildNodes(FeatureTreeNode node) { featureModel.resetNodesAttachedData(); // sort nodes in non-descending order Comparator<FeatureTreeNode> c = new Comparator<FeatureTreeNode>() { public int compare(FeatureTreeNode node1, FeatureTreeNode node2) { Integer countNodes1 = (Integer)node1.getAttachedData(); Integer countNodes2 = (Integer)node2.getAttachedData(); if ( countNodes1 == null ) { countNodes1 = new Integer(featureModel.countNodes(node1)); node1.attachData(countNodes1); } if ( countNodes2 == null ) { countNodes2 = new Integer(featureModel.countNodes(node2)); node2.attachData(countNodes2); } if ( countNodes1 > countNodes2 ) { return 1; } if ( countNodes1 < countNodes2 ) { return -1; } return 0; } }; int count = node.getChildCount(); FeatureTreeNode nodes[] = new FeatureTreeNode[count]; for( int i = 0 ; i < count ; i++ ) { nodes[i] = ((FeatureTreeNode)node.getChildAt(i)); } java.util.Arrays.sort(nodes, c); return nodes; } }