private void sortByPriority(Vector<Rule> rules) { RulePriority priority = new RulePriority(rules); Integer startPriority = priority.getStartPriority(); Hashtable<Integer, HashSet<Rule>> invertedRulePriority = priority.invertPriority(); OrderedSet<Integer> rulePrioritySet = new OrderedSet<Integer>(new IntComparator<Integer>()); for (Enumeration<Integer> en = invertedRulePriority.keys(); en.hasMoreElements(); ) { rulePrioritySet.add(en.nextElement()); } int i = 0; Integer maxPriorityInt = null; HashSet<Rule> priority0Set = null; Integer currentPriority = startPriority; boolean nextPriorityExists = true; while (nextPriorityExists && (currentPriority != null)) { HashSet<Rule> rulesForPriority = invertedRulePriority.get(currentPriority); Pair<Integer, HashSet<Rule>> p = new Pair<Integer, HashSet<Rule>>(currentPriority, rulesForPriority); if (currentPriority.intValue() > 0) this.sortedRules.add(p); else { priority0Set = rulesForPriority; } maxPriorityInt = currentPriority; // set next Layer i++; if (i < rulePrioritySet.size()) { currentPriority = rulePrioritySet.get(i); } else { nextPriorityExists = false; } } if (priority0Set != null && maxPriorityInt != null) { int maxPriority = maxPriorityInt.intValue() + 1; Pair<Integer, HashSet<Rule>> p0 = new Pair<Integer, HashSet<Rule>>(new Integer(maxPriority), priority0Set); this.sortedRules.add(p0); } }