# HG changeset patch # User Sascha L. Teichmann # Date 1410175069 -7200 # Node ID 9667900536b680e4778d3db3bc1a71bc33432cca # Parent ed8c1a0b4cfbb14771500594e1dcff51419b2188 Added context injector to generators. diff -r ed8c1a0b4cfb -r 9667900536b6 artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContext.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContext.java Mon Sep 08 12:28:16 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContext.java Mon Sep 08 13:17:49 2014 +0200 @@ -16,7 +16,6 @@ import org.dive4elements.artifacts.CallContext; import org.dive4elements.river.exports.GeneratorLookup; import org.dive4elements.river.exports.OutGenerator; -import org.dive4elements.river.utils.Pair; /** @@ -109,17 +108,17 @@ return null; } - Pair, Object> pair = generators.getGenerator(name); + GeneratorLookup.Item item = generators.getGenerator(name); - if (pair == null) { + if (item == null) { log.warn("No generator class found for " + name); return null; } try { - Class clazz = pair.getA(); + Class clazz = item.getGenerator(); OutGenerator generator = clazz.newInstance(); - generator.setup(pair.getB()); + generator.setup(item.getContext()); return generator; } catch (InstantiationException ie) { diff -r ed8c1a0b4cfb -r 9667900536b6 artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java Mon Sep 08 12:28:16 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/context/RiverContextFactory.java Mon Sep 08 13:17:49 2014 +0200 @@ -28,6 +28,8 @@ import org.dive4elements.artifacts.ArtifactContextFactory; import org.dive4elements.artifacts.GlobalContext; +import org.dive4elements.artifacts.ContextInjector; + import org.dive4elements.artifacts.common.utils.Config; import org.dive4elements.artifacts.common.utils.ElementConverter; import org.dive4elements.artifacts.common.utils.XMLUtils; @@ -350,9 +352,10 @@ for (int i = 0; i < num; i++) { Element item = (Element)outGenerators.item(i); - String names = item.getAttribute("names").trim(); - String clazz = item.getAttribute("class").trim(); + String names = item.getAttribute("names").trim(); + String clazz = item.getAttribute("class").trim(); String converter = item.getAttribute("converter").trim(); + String injector = item.getAttribute("injector").trim(); if (names.isEmpty() || clazz.isEmpty()) { continue; @@ -388,9 +391,28 @@ } } + ContextInjector ci = null; + + if (!injector.isEmpty()) { + try { + ci = (ContextInjector)Class.forName(injector) + .newInstance(); + ci.setup(item); + } + catch (ClassNotFoundException cnfe) { + log.error(cnfe, cnfe); + } + catch (InstantiationException ie) { + log.error(ie); + } + catch (IllegalAccessException iae) { + log.error(iae); + } + } + for (String key: names.split("[\\s,]")) { if (!(key = key.trim()).isEmpty()) { - generators.putGenerator(key, generatorClass, cfg); + generators.putGenerator(key, generatorClass, cfg, ci); idx++; } } diff -r ed8c1a0b4cfb -r 9667900536b6 artifacts/src/main/java/org/dive4elements/river/exports/GeneratorLookup.java --- a/artifacts/src/main/java/org/dive4elements/river/exports/GeneratorLookup.java Mon Sep 08 12:28:16 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/GeneratorLookup.java Mon Sep 08 13:17:49 2014 +0200 @@ -11,43 +11,68 @@ import java.util.HashMap; import java.util.Map; -import org.dive4elements.river.utils.Pair; +import org.dive4elements.artifacts.ContextInjector; + import org.dive4elements.river.artifacts.D4EArtifact.FacetFilter; public class GeneratorLookup implements FacetFilter { - private Map, Object>> generators; + public static final class Item { + private Class generator; + private Object ctx; + private ContextInjector ci; + + public Item(Class generator, Object ctx, ContextInjector ci) { + this.generator = generator; + this.ctx = ctx; + this.ci = ci; + } + + public Class getGenerator() { + return generator; + } + + public Object getContext() { + return ctx; + } + + public ContextInjector getContextInjector() { + return ci; + } + } // class Item + + private Map generators; public GeneratorLookup() { - generators = new HashMap, Object>>(); + generators = new HashMap(); } public void putGenerator( String outName, Class generatorClass, - Object ctx + Object ctx, + ContextInjector ci ) { - Pair, Object> pair = - new Pair, Object>(generatorClass, ctx); - generators.put(outName, pair); + Item item = new Item(generatorClass, ctx, ci); + generators.put(outName, item); } - public Pair, Object> getGenerator(String outName) { + public Item getGenerator(String outName) { return generators.get(outName); } @Override public boolean accept(String outName, String facetName) { - Pair, Object> pair = generators.get(outName); - if (pair == null) { + Item item = generators.get(outName); + if (item == null) { return true; } - Object ff = pair.getB(); - return ff instanceof FacetFilter - ? ((FacetFilter)ff).accept(outName, facetName) + Object ctx = item.getContext(); + return ctx instanceof FacetFilter + ? ((FacetFilter)ctx).accept(outName, facetName) : true; } }