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(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(); } }
@SuppressWarnings("unchecked") private static <T extends ContentHandler> List<DependencySpec> buildDependencyMap(List<ContentHandlerConfigMap<T>> visitors) { List<DependencySpec> dependancySpecs = new ArrayList<DependencySpec>(); for(ContentHandlerConfigMap<T> visitor : visitors) { dependancySpecs.add(new DependencySpec(visitor)); } for(DependencySpec outer : dependancySpecs) { if(outer.visitor.getContentHandler() instanceof Producer) { Set<?> outerProducts = ((Producer) outer.visitor.getContentHandler()).getProducts(); for(DependencySpec inner : dependancySpecs) { if(inner != outer && inner.visitor.getContentHandler() instanceof Consumer) { Consumer innerConsumer = (Consumer) inner.visitor.getContentHandler(); for(Object product : outerProducts) { if(innerConsumer.consumes(product)) { outer.dependants.add(inner); } } } } } } return dependancySpecs; }
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); } } }
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); }
protected static <T extends ContentHandler> List<DependencySpec> buildDependencyMap(List<ContentHandlerConfigMap<T>> visitors) { List<DependencySpec> dependancySpecs = new ArrayList<DependencySpec>(); for(ContentHandlerConfigMap<T> visitor : visitors) { dependancySpecs.add(new DependencySpec(visitor)); } for(DependencySpec outer : dependancySpecs) { if(outer.visitor.getContentHandler() instanceof Producer) { Set<? extends Object> outerProducts = ((Producer) outer.visitor.getContentHandler()).getProducts(); for(DependencySpec inner : dependancySpecs) { if(inner != outer && inner.visitor.getContentHandler() instanceof Consumer) { Consumer innerConsumer = (Consumer) inner.visitor.getContentHandler(); for(Object product : outerProducts) { if(innerConsumer.consumes(product)) { outer.dependants.add(inner); } } } } } } return dependancySpecs; }
@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(); } }
/** * 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); } } }
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 <T extends ContentHandler> List<DependencySpec> buildDependencyMap(List<ContentHandlerConfigMap<T>> visitors) { List<DependencySpec> dependancySpecs = new ArrayList<DependencySpec>(); for(ContentHandlerConfigMap<T> visitor : visitors) { dependancySpecs.add(new DependencySpec(visitor)); } for(DependencySpec outer : dependancySpecs) { if(outer.visitor.getContentHandler() instanceof Producer) { Set<?> outerProducts = ((Producer) outer.visitor.getContentHandler()).getProducts(); for(DependencySpec inner : dependancySpecs) { if(inner != outer && inner.visitor.getContentHandler() instanceof Consumer) { Consumer innerConsumer = (Consumer) inner.visitor.getContentHandler(); for(Object product : outerProducts) { if(innerConsumer.consumes(product)) { outer.dependants.add(inner); } } } } } } return dependancySpecs; }
@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(); } }
/** * 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); } } }
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); }
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(); } }
/** * 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); } } }