# HG changeset patch # User Sascha L. Teichmann # Date 1380734683 -7200 # Node ID 744df5a03337a27bb335fc485e37c8bdc9ffc049 # Parent 8ab618dda8502b7ff519c3b96ace98159d577d41 Use diagram configuration and there processors to define compatible facets in loaded data. diff -r 8ab618dda850 -r 744df5a03337 artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Wed Oct 02 18:41:12 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java Wed Oct 02 19:24:43 2013 +0200 @@ -52,6 +52,7 @@ import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; import org.dive4elements.river.artifacts.cache.CacheFactory; import org.dive4elements.river.artifacts.context.RiverContext; +import org.dive4elements.river.artifacts.context.RiverContextFactory; import org.dive4elements.river.artifacts.model.CalculationMessage; import org.dive4elements.river.artifacts.states.DefaultState; import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; @@ -119,6 +120,13 @@ private String boundToOut; + /** + * Interface to a global facet filter. + */ + public interface FacetFilter { + boolean accept(String outName, String facetName); + } // interface FacetFilter + /** * The default constructor that creates an empty D4EArtifact. @@ -1279,7 +1287,7 @@ log.debug("State '" + stateId + "' has facets " + fs); } - List gen = generateOutputs(list, fs); + List gen = generateOutputs(list, filterFacets(fs)); if (debug) { log.debug("State '" + stateId + "' has " + gen.size() + " outs"); @@ -1288,6 +1296,29 @@ return gen; } + /** If a global facet filter and a bounded out are defined + * use them to eliminate unwished facets. + */ + protected List filterFacets(List facets) { + if (boundToOut == null || boundToOut.isEmpty()) { + return facets; + } + + FacetFilter facetFilter = + (FacetFilter)RiverContextFactory.getGlobalContext() + .get(RiverContext.FACETFILTER_KEY); + if (facetFilter == null) { + return facets; + } + + List result = new ArrayList(facets.size()); + for (Facet facet: facets) { + if (facetFilter.accept(boundToOut, facet.getName())) { + result.add(facet); + } + } + return result; + } /** * Generate a list of outputs with facets from fs if type is found in list diff -r 8ab618dda850 -r 744df5a03337 artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContext.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContext.java Wed Oct 02 18:41:12 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContext.java Wed Oct 02 19:24:43 2013 +0200 @@ -46,6 +46,9 @@ public static final String OUTGENERATORS_KEY = "flys.export.outgenerators"; + public static final String FACETFILTER_KEY = + "flys.export.facetfilter"; + /** The key that is used to store the map of themes in the context. */ public static final String THEMES = "flys.themes.map"; diff -r 8ab618dda850 -r 744df5a03337 artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java Wed Oct 02 18:41:12 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java Wed Oct 02 19:24:43 2013 +0200 @@ -389,6 +389,7 @@ logger.info("Successfully loaded " + idx + " output generators."); context.put(RiverContext.OUTGENERATORS_KEY, generators); + context.put(RiverContext.FACETFILTER_KEY, generators); } diff -r 8ab618dda850 -r 744df5a03337 artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java Wed Oct 02 18:41:12 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/DiagramAttributes.java Wed Oct 02 19:24:43 2013 +0200 @@ -26,7 +26,7 @@ import org.dive4elements.artifacts.common.utils.ElementConverter; public class DiagramAttributes -implements ElementConverter +implements ElementConverter, D4EArtifact.FacetFilter { private static Logger log = Logger.getLogger(DiagramAttributes.class); @@ -528,5 +528,16 @@ ? "" // null? : axesAttrs.get(index).getName(); } + + @Override + public boolean accept(String outName, String facetName) { + Instance instance = new Instance(); + for (Processor pr: instance.getProcessors()) { + if (pr.canHandle(facetName)) { + return true; + } + } + return false; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 8ab618dda850 -r 744df5a03337 artifacts/src/main/java/org/dive4elements/river/exports/GeneratorLookup.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/GeneratorLookup.java Wed Oct 02 18:41:12 2013 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/GeneratorLookup.java Wed Oct 02 19:24:43 2013 +0200 @@ -11,10 +11,15 @@ import java.util.HashMap; import java.util.Map; +import org.apache.log4j.Logger; import org.dive4elements.river.utils.Pair; +import org.dive4elements.river.artifacts.D4EArtifact.FacetFilter; public class GeneratorLookup +implements FacetFilter { + private static Logger log = Logger.getLogger(GeneratorLookup.class); + private Map, Object>> generators; public GeneratorLookup() { @@ -34,5 +39,30 @@ public Pair, Object> getGenerator(String outName) { return generators.get(outName); } + + @Override + public boolean accept(String outName, String facetName) { + + Pair, Object> pair = generators.get(outName); + if (pair == null) { + return true; + } + + try { + Class clazz = pair.getA(); + OutGenerator generator = clazz.newInstance(); + + return generator instanceof FacetFilter + ? ((FacetFilter)generator).accept(outName, facetName) + : true; + } + catch (InstantiationException ie) { + log.error(ie, ie); + } + catch (IllegalAccessException iae) { + log.error(iae, iae); + } + return true; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :