[PATCH] Use diagram configuration and there processors to define compatible facets in loaded data
Wald Commits
scm-commit at wald.intevation.org
Wed Oct 2 19:25:12 CEST 2013
# HG changeset patch
# User Sascha L. Teichmann <teichmann at intevation.de>
# 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<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
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<String, Pair<Class<OutGenerator>, Object>> generators;
public GeneratorLookup() {
@@ -34,5 +39,30 @@
public Pair<Class<OutGenerator>, Object> getGenerator(String outName) {
return generators.get(outName);
}
+
+ @Override
+ public boolean accept(String outName, String facetName) {
+
+ Pair<Class<OutGenerator>, Object> pair = generators.get(outName);
+ if (pair == null) {
+ return true;
+ }
+
+ try {
+ Class<OutGenerator> 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 :
More information about the Dive4elements-commits
mailing list