/** * Sort the provided list of {@link RuleProvider}s and return the result. */ public static List<RuleProvider> sort(List<RuleProvider> providers) { RuleProviderSorter sorter = new RuleProviderSorter(providers); return sorter.getProviders(); }
private RuleProviderSorter(List<RuleProvider> providers) { this.providers = new ArrayList<>(providers); initializeLookupCaches(); sort(); }
linkRulePhases(); RuleProvider phaseProvider = getByClass(provider.getMetadata().getPhase()); addExecuteAfterRelationship(graph, provider, errors, clz); addExecuteAfterRelationship(graph, provider, errors, provider.getMetadata().getPhase()); addExecuteAfterRelationship(graph, provider, errors, clz); addExecuteBeforeRelationship(graph, provider, errors, clz); addExecuteBeforeRelationship(graph, provider, errors, clz); RuleProvider otherProvider = getByID(depID); if (otherProvider == null) RuleProvider otherProvider = getByID(depID); if (otherProvider == null)
/** * Perform the entire sort operation */ private void sort() { DefaultDirectedWeightedGraph<RuleProvider, DefaultEdge> graph = new DefaultDirectedWeightedGraph<>( DefaultEdge.class); for (RuleProvider provider : providers) { graph.addVertex(provider); } addProviderRelationships(graph); checkForCycles(graph); List<RuleProvider> result = new ArrayList<>(this.providers.size()); TopologicalOrderIterator<RuleProvider, DefaultEdge> iterator = new TopologicalOrderIterator<>(graph); while (iterator.hasNext()) { RuleProvider provider = iterator.next(); result.add(provider); } this.providers = Collections.unmodifiableList(result); int index = 0; for (RuleProvider provider : this.providers) { if (provider instanceof AbstractRuleProvider) ((AbstractRuleProvider) provider).setExecutionIndex(index++); } }
private void addExecuteAfterRelationship(DefaultDirectedWeightedGraph<RuleProvider, DefaultEdge> graph, RuleProvider provider, List<String> errors, Class<? extends RuleProvider> clz) { RuleProvider otherProvider = getByClass(clz); if (otherProvider == null) { errors.add("RuleProvider " + provider.getMetadata().getID() + " is specified to execute after class: " + clz.getName() + " but this class could not be found."); } else graph.addEdge(otherProvider, provider); }
linkRulePhases(); RuleProvider phaseProvider = getByClass(provider.getMetadata().getPhase()); addExecuteAfterRelationship(graph, provider, errors, clz); addExecuteAfterRelationship(graph, provider, errors, provider.getMetadata().getPhase()); addExecuteAfterRelationship(graph, provider, errors, clz); addExecuteBeforeRelationship(graph, provider, errors, clz); addExecuteBeforeRelationship(graph, provider, errors, clz); RuleProvider otherProvider = getByID(depID); if (otherProvider == null) RuleProvider otherProvider = getByID(depID); if (otherProvider == null)
/** * Perform the entire sort operation */ private void sort() { DefaultDirectedWeightedGraph<RuleProvider, DefaultEdge> graph = new DefaultDirectedWeightedGraph<>( DefaultEdge.class); for (RuleProvider provider : providers) { graph.addVertex(provider); } addProviderRelationships(graph); checkForCycles(graph); List<RuleProvider> result = new ArrayList<>(this.providers.size()); TopologicalOrderIterator<RuleProvider, DefaultEdge> iterator = new TopologicalOrderIterator<>(graph); while (iterator.hasNext()) { RuleProvider provider = iterator.next(); result.add(provider); } this.providers = Collections.unmodifiableList(result); int index = 0; for (RuleProvider provider : this.providers) { if (provider instanceof AbstractRuleProvider) ((AbstractRuleProvider) provider).setExecutionIndex(index++); } }
private void addExecuteBeforeRelationship(DefaultDirectedWeightedGraph<RuleProvider, DefaultEdge> graph, RuleProvider provider, List<String> errors, Class<? extends RuleProvider> clz) { RuleProvider otherProvider = getByClass(clz); if (otherProvider == null) { errors.add("RuleProvider " + provider.getMetadata().getID() + " is specified to execute before: " + clz.getName() + " but this class could not be found."); } else graph.addEdge(provider, otherProvider); }
private RuleProviderSorter(List<RuleProvider> providers) { this.providers = new ArrayList<>(providers); initializeLookupCaches(); sort(); }
/** * Sort the provided list of {@link RuleProvider}s and return the result. */ public static List<RuleProvider> sort(List<RuleProvider> providers) { RuleProviderSorter sorter = new RuleProviderSorter(providers); return sorter.getProviders(); }
private void addExecuteBeforeRelationship(DefaultDirectedWeightedGraph<RuleProvider, DefaultEdge> graph, RuleProvider provider, List<String> errors, Class<? extends RuleProvider> clz) { RuleProvider otherProvider = getByClass(clz); if (otherProvider == null) { errors.add("RuleProvider " + provider.getMetadata().getID() + " is specified to execute before: " + clz.getName() + " but this class could not be found."); } else graph.addEdge(provider, otherProvider); }
private void addExecuteAfterRelationship(DefaultDirectedWeightedGraph<RuleProvider, DefaultEdge> graph, RuleProvider provider, List<String> errors, Class<? extends RuleProvider> clz) { RuleProvider otherProvider = getByClass(clz); if (otherProvider == null) { errors.add("RuleProvider " + provider.getMetadata().getID() + " is specified to execute after class: " + clz.getName() + " but this class could not be found."); } else graph.addEdge(otherProvider, provider); }