Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/D4EArtifact.java @ 7227:744df5a03337
Use diagram configuration and there processors to define compatible facets in loaded data.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Wed, 02 Oct 2013 19:24:43 +0200 |
parents | 12248d9eb326 |
children | 737dd43e32d6 |
line wrap: on
line diff
--- 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<Output> gen = generateOutputs(list, fs); + List<Output> 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<Facet> filterFacets(List<Facet> facets) { + if (boundToOut == null || boundToOut.isEmpty()) { + return facets; + } + + FacetFilter facetFilter = + (FacetFilter)RiverContextFactory.getGlobalContext() + .get(RiverContext.FACETFILTER_KEY); + if (facetFilter == null) { + return facets; + } + + List<Facet> result = new ArrayList<Facet>(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