public static <T extends ContentHandler> void sort(List<ContentHandlerConfigMap<T>> visitors, SortOrder sortOrder) throws SmooksConfigurationException { List<DependencySpec> dependancySpecs; dependancySpecs = buildDependencyMap(visitors); assertNo2WayDependencies(dependancySpecs); sortDependancyMap(dependancySpecs, sortOrder); remapList(dependancySpecs, visitors); }
/** * Sort the Table in the specified sort order. * @param sortOrder The sort order. */ public void sort(Sorter.SortOrder sortOrder) { Set<Map.Entry<String,List<ContentHandlerConfigMap<T>>>> tableEntries = table.entrySet(); for(Map.Entry<String, List<ContentHandlerConfigMap<T>>> tableEntry : tableEntries) { Sorter.sort(tableEntry.getValue(), sortOrder); } } }
private static void assertNo2WayDependencies(DependencySpec spec, List<DependencySpec> dependancySpecs, Stack<DependencySpec> dependencyStack) { for(DependencySpec dependancy : dependancySpecs) { dependencyStack.push(dependancy); if(dependancy.isDependant(spec)) { dependencyStack.push(spec); throw new SmooksConfigurationException("Invalid 2-Way/Circular Visitor Producer/Consumer dependency detected in configuration.\n" + getDependencyStackTrace(dependencyStack)); } // Recurse down ... assertNo2WayDependencies(spec, dependancy.dependants, dependencyStack); dependencyStack.pop(); } }
@SuppressWarnings("unchecked") private static void assertNo2WayDependencies(List<DependencySpec> dependancySpecs) throws SmooksConfigurationException { Stack<DependencySpec> dependencyStack = new Stack<DependencySpec>(); for(DependencySpec spec : dependancySpecs) { dependencyStack.push(spec); assertNo2WayDependencies(spec, spec.dependants, dependencyStack); dependencyStack.pop(); } }
private static String getDependencyStackTrace(Stack<DependencySpec> dependencyStack) { StringBuilder builder = new StringBuilder(); int numTabs = 0; appendTabs(++numTabs, builder); builder.append(dependencyStack.pop().visitor.getResourceConfig()); builder.append("\n"); while(!dependencyStack.isEmpty()) { appendTabs(++numTabs, builder); builder.append("depends-on: "); builder.append(dependencyStack.pop().visitor.getResourceConfig()); builder.append("\n"); } return builder.toString(); }
iterate = applySort(dependancySpecs);
@SuppressWarnings("unchecked") private static void assertNo2WayDependencies(DependencySpec spec, List<DependencySpec> dependancySpecs, Stack<DependencySpec> dependencyStack) { for(DependencySpec dependancy : dependancySpecs) { dependencyStack.push(dependancy); if(dependancy.isDependant(spec)) { dependencyStack.push(spec); throw new SmooksConfigurationException("Invalid 2-Way/Circular Visitor Producer/Consumer dependency detected in configuration.\n" + getDependencyStackTrace(dependencyStack)); } // Recurse down ... assertNo2WayDependencies(spec, dependancy.dependants, dependencyStack); dependencyStack.pop(); } }
@SuppressWarnings("unchecked") private static void assertNo2WayDependencies(List<DependencySpec> dependancySpecs) throws SmooksConfigurationException { Stack<DependencySpec> dependencyStack = new Stack<DependencySpec>(); for(DependencySpec spec : dependancySpecs) { dependencyStack.push(spec); assertNo2WayDependencies(spec, spec.dependants, dependencyStack); dependencyStack.pop(); } }
private static String getDependencyStackTrace(Stack<DependencySpec> dependencyStack) { StringBuilder builder = new StringBuilder(); int numTabs = 0; appendTabs(++numTabs, builder); builder.append(dependencyStack.pop().visitor.getResourceConfig()); builder.append("\n"); while(!dependencyStack.isEmpty()) { appendTabs(++numTabs, builder); builder.append("depends-on: "); builder.append(dependencyStack.pop().visitor.getResourceConfig()); builder.append("\n"); } return builder.toString(); }
iterate = applySort(dependancySpecs);
public static <T extends ContentHandler> void sort(List<ContentHandlerConfigMap<T>> visitors, SortOrder sortOrder) throws SmooksConfigurationException { List<DependencySpec> dependancySpecs; dependancySpecs = buildDependencyMap(visitors); assertNo2WayDependencies(dependancySpecs); sortDependancyMap(dependancySpecs, sortOrder); remapList(dependancySpecs, visitors); }
@SuppressWarnings("unchecked") private static void assertNo2WayDependencies(DependencySpec spec, List<DependencySpec> dependancySpecs, Stack<DependencySpec> dependencyStack) { for(DependencySpec dependancy : dependancySpecs) { dependencyStack.push(dependancy); if(dependancy.isDependant(spec)) { dependencyStack.push(spec); throw new SmooksConfigurationException("Invalid 2-Way/Circular Visitor Producer/Consumer dependency detected in configuration.\n" + getDependencyStackTrace(dependencyStack)); } // Recurse down ... assertNo2WayDependencies(spec, dependancy.dependants, dependencyStack); dependencyStack.pop(); } }
/** * Sort the Table in the specified sort order. * @param sortOrder The sort order. */ public void sort(Sorter.SortOrder sortOrder) { Set<Map.Entry<String,List<ContentHandlerConfigMap<T>>>> tableEntries = table.entrySet(); for(Map.Entry<String, List<ContentHandlerConfigMap<T>>> tableEntry : tableEntries) { Sorter.sort(tableEntry.getValue(), sortOrder); } } }
@SuppressWarnings("unchecked") private static void assertNo2WayDependencies(List<DependencySpec> dependancySpecs) throws SmooksConfigurationException { Stack<DependencySpec> dependencyStack = new Stack<DependencySpec>(); for(DependencySpec spec : dependancySpecs) { dependencyStack.push(spec); assertNo2WayDependencies(spec, spec.dependants, dependencyStack); dependencyStack.pop(); } }
private static String getDependencyStackTrace(Stack<DependencySpec> dependencyStack) { StringBuilder builder = new StringBuilder(); int numTabs = 0; appendTabs(++numTabs, builder); builder.append(dependencyStack.pop().visitor.getResourceConfig()); builder.append("\n"); while(!dependencyStack.isEmpty()) { appendTabs(++numTabs, builder); builder.append("depends-on: "); builder.append(dependencyStack.pop().visitor.getResourceConfig()); builder.append("\n"); } return builder.toString(); }
iterate = applySort(dependancySpecs);
public static <T extends ContentHandler> void sort(List<ContentHandlerConfigMap<T>> visitors, SortOrder sortOrder) throws SmooksConfigurationException { List<DependencySpec> dependancySpecs; dependancySpecs = buildDependencyMap(visitors); assertNo2WayDependencies(dependancySpecs); sortDependancyMap(dependancySpecs, sortOrder); remapList(dependancySpecs, visitors); }
@SuppressWarnings("unchecked") private static void assertNo2WayDependencies(DependencySpec spec, List<DependencySpec> dependancySpecs, Stack<DependencySpec> dependencyStack) { for(DependencySpec dependancy : dependancySpecs) { dependencyStack.push(dependancy); if(dependancy.isDependant(spec)) { dependencyStack.push(spec); throw new SmooksConfigurationException("Invalid 2-Way/Circular Visitor Producer/Consumer dependency detected in configuration.\n" + getDependencyStackTrace(dependencyStack)); } // Recurse down ... assertNo2WayDependencies(spec, dependancy.dependants, dependencyStack); dependencyStack.pop(); } }
/** * Sort the Table in the specified sort order. * @param sortOrder The sort order. */ public void sort(Sorter.SortOrder sortOrder) { Set<Map.Entry<String,List<ContentHandlerConfigMap<T>>>> tableEntries = table.entrySet(); for(Map.Entry<String, List<ContentHandlerConfigMap<T>>> tableEntry : tableEntries) { Sorter.sort(tableEntry.getValue(), sortOrder); } } }
private static void assertNo2WayDependencies(List<DependencySpec> dependancySpecs) throws SmooksConfigurationException { Stack<DependencySpec> dependencyStack = new Stack<DependencySpec>(); for(DependencySpec spec : dependancySpecs) { dependencyStack.push(spec); assertNo2WayDependencies(spec, spec.dependants, dependencyStack); dependencyStack.pop(); } }