1 16 package org.apache.cocoon.components.modules.input; 17 18 import java.util.HashMap ; 19 import java.util.Iterator ; 20 import java.util.Map ; 21 22 import org.apache.avalon.framework.component.Component; 23 import org.apache.avalon.framework.configuration.Configurable; 24 import org.apache.avalon.framework.configuration.Configuration; 25 import org.apache.avalon.framework.configuration.ConfigurationException; 26 import org.apache.avalon.framework.logger.AbstractLogEnabled; 27 import org.apache.avalon.framework.thread.ThreadSafe; 28 import org.apache.cocoon.components.ChainedConfiguration; 29 import org.apache.cocoon.components.SitemapConfigurable; 30 import org.apache.cocoon.components.SitemapConfigurationHolder; 31 32 39 public final class SitemapVariableHolder 40 extends AbstractLogEnabled 41 implements Component, Configurable, SitemapConfigurable, ThreadSafe 42 { 43 44 public static final String ROLE = SitemapVariableHolder.class.getName(); 45 46 50 private Map globalValues; 51 52 53 private SitemapConfigurationHolder holder; 54 55 65 public void configure(Configuration conf) 66 throws ConfigurationException { 67 final Configuration[] parameters = conf.getChildren(); 68 this.globalValues = new HashMap (parameters.length); 69 for (int i = 0; i < parameters.length; i++) { 70 final String key = parameters[i].getName(); 71 final String value = parameters[i].getValue(); 72 this.globalValues.put(key, value); 73 } 74 } 75 76 79 public void configure(SitemapConfigurationHolder holder) { 80 this.holder = holder; 81 } 82 83 86 public Object get(String key) { 87 return this.getValues().get(key); 88 } 89 90 93 public Iterator getKeys() { 94 return this.getValues().keySet().iterator(); 95 } 96 97 protected Map getValues() { 98 Map values = (Map )this.holder.getPreparedConfiguration(); 99 if ( null == values ) { 100 values = new HashMap (this.globalValues); 101 ChainedConfiguration conf = this.holder.getConfiguration(); 102 if ( conf != null ) { 103 this.prepare(conf, values); 104 this.holder.setPreparedConfiguration(conf, values); 105 } 106 } 107 return values; 108 } 109 110 protected void prepare(ChainedConfiguration conf, Map values) { 111 ChainedConfiguration parent = conf.getParent(); 112 if ( null != parent) { 113 this.prepare(parent, values); 114 } 115 final Configuration[] parameters = conf.getChildren(); 116 final int len = parameters.length; 117 for ( int i = 0; i < len; i++) { 118 final String key = parameters[i].getName(); 119 final String value = parameters[i].getValue(""); 120 if ( key != null && value != null) { 121 values.put(key, value); 122 } 123 } 124 } 125 } 126 | Popular Tags |