haul 2002/08/11 13:12:00 Modified: src/java/org/apache/cocoon/sitemap Tag: cocoon_2_0_3_branch AbstractSitemap.java Log: <action dev="CH" type="add"> Backport usage of InputModules to compiled sitemap. </action> Revision Changes Path No revision No revision 1.10.2.3 +53 -12 xml-cocoon2/src/java/org/apache/cocoon/sitemap/Attic/AbstractSitemap.java Index: AbstractSitemap.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/Attic/AbstractSitemap.java,v retrieving revision 1.10.2.2 retrieving revision 1.10.2.3 diff -u -r1.10.2.2 -r1.10.2.3 --- AbstractSitemap.java 27 Jun 2002 18:52:01 -0000 1.10.2.2 +++ AbstractSitemap.java 11 Aug 2002 20:12:00 -0000 1.10.2.3 @@ -77,6 +77,9 @@ import org.apache.cocoon.transformation.Transformer; import org.apache.cocoon.util.ClassUtils; +import org.apache.avalon.framework.component.ComponentSelector; +import org.apache.cocoon.components.modules.input.InputModule; + import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; @@ -99,6 +102,9 @@ private static LogKitManager logKitManager; private static Configuration defaultConfig; + /** Selector for InputModules.*/ + private ComponentSelector inputModuleSelector = null; + /** The component manager instance */ protected CocoonComponentManager manager; @@ -193,6 +199,10 @@ this.manager.addComponentInstance(Action.ROLE + "Selector", this.actions); this.manager.addComponentInstance(Matcher.ROLE + "Selector", this.matchers); this.manager.addComponentInstance(Selector.ROLE + "Selector", this.selectors); + + // obtain selector for InputModules + this.inputModuleSelector = (ComponentSelector) this.manager.lookup(InputModule.ROLE +"Selector"); + } catch (Exception e) { getLogger().error("cannot obtain the Component", e); throw new ComponentException("cannot obtain the URLFactory", e); @@ -315,7 +325,9 @@ * Replaces occurences of xpath like expressions in an argument String * with content from a List of Maps */ - protected String substitute(List list, String expr) throws PatternException, NumberFormatException { + protected String substitute(List list, String expr, Environment environment) + throws PatternException, NumberFormatException { + if (expr == null) { return null; } @@ -327,6 +339,7 @@ int m = 0; int ii = 0; int i = -1; + int n = -1; try { while (ii <= expr.length() && (i = expr.indexOf('{', ii)) != -1) { result.append(expr.substring(ii, i)); @@ -335,18 +348,41 @@ throw new PatternException("invalid expression in \"" + expr + "\""); } ii = j + 1; - k = list.size() - 1; s = expr.substring(i + 1, j); - l = -3; - m = -1; - while ((l = s.indexOf("../", l + 3)) != -1) { - k--; - m = l; - } - if (m != -1) { - s = s.substring(m + 3); + n = s.indexOf(':'); + Object value = null; + if (n == -1) { // normal expression + k = list.size() - 1; + l = -3; + m = -1; + while ((l = s.indexOf("../", l + 3)) != -1) { + k--; + m = l; + } + if (m != -1) { + s = s.substring(m + 3); + } + value = ((Map)list.get(k)).get(s); + } else { // InputModule expression + String inputName = s.substring(0,n); + String inputAttribute = s.substring(n + 1); + InputModule input = null; + if (getLogger().isDebugEnabled()) + getLogger().debug("Using "+inputName+" to obtain "+inputAttribute); + try { + input = (InputModule) this.inputModuleSelector.select(inputName); + if (getLogger().isDebugEnabled()) + getLogger().debug((input!=null?"Got ":"No ")+inputName); + value = input.getAttribute(inputAttribute, null, environment.getObjectModel()); + } catch (Exception e) { + if (getLogger().isWarnEnabled()) + getLogger().warn("Problem obtaining attribute " + inputAttribute + + " from " + inputName + " : " + e.getMessage()); + } finally { + if (input != null) + this.inputModuleSelector.release(input); + } } - Object value = ((Map)list.get(k)).get(s); if (value != null){ result.append(value.toString()); if (getLogger().isDebugEnabled()) { @@ -449,6 +485,11 @@ * dispose */ public void dispose() { + if (this.inputModuleSelector != null) { + this.manager.release(inputModuleSelector); + } + this.inputModuleSelector = null; + manager.release(this.urlFactory); this.urlFactory = null;
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]