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

http://dive4elements.wald.intevation.org