1 17 18 package org.apache.geronimo.system.configuration; 19 20 import org.apache.geronimo.system.configuration.condition.ConditionParser; 21 import org.apache.geronimo.system.configuration.condition.JexlConditionParser; 22 23 import org.apache.geronimo.gbean.AbstractName; 24 import org.apache.geronimo.kernel.InvalidGBeanException; 25 import org.apache.geronimo.kernel.repository.Artifact; 26 27 import org.w3c.dom.Element ; 28 import org.w3c.dom.NodeList ; 29 import org.w3c.dom.Document ; 30 31 import java.util.Iterator ; 32 import java.util.LinkedHashMap ; 33 import java.util.Map ; 34 35 38 class ConfigurationOverride { 39 private final Artifact name; 40 private boolean load; 41 private String condition; 42 private final Map gbeans = new LinkedHashMap (); 43 44 48 private static ConditionParser parser; 49 50 public ConfigurationOverride(Artifact name, boolean load) { 51 this.name = name; 52 this.load = load; 53 } 54 55 public ConfigurationOverride(ConfigurationOverride base, Artifact name) { 56 this.name = name; 57 this.load = base.load; 58 this.condition = base.condition; 59 this.gbeans.putAll(base.gbeans); 60 } 61 62 public ConfigurationOverride(Element element) throws InvalidGBeanException { 63 name = Artifact.create(element.getAttribute("name")); 64 65 condition = element.getAttribute("condition"); 66 67 String loadConfigString = element.getAttribute("load"); 68 load = !"false".equals(loadConfigString); 69 70 NodeList gbeans = element.getElementsByTagName("gbean"); 71 for (int g = 0; g < gbeans.getLength(); g++) { 72 Element gbeanElement = (Element ) gbeans.item(g); 73 GBeanOverride gbean = new GBeanOverride(gbeanElement); 74 addGBean(gbean); 75 } 76 } 77 78 public Artifact getName() { 79 return name; 80 } 81 82 public String getCondition() { 83 return condition; 84 } 85 86 public void setCondition(final String condition) { 87 this.condition = condition; 88 } 89 90 private boolean parseCondition() { 91 if (condition == null) { 92 return true; 94 } 95 96 if (parser == null) { 98 parser = new JexlConditionParser(); 99 } 100 101 return parser.evaluate(condition); 102 } 103 104 public boolean isLoad() { 105 return load && parseCondition(); 106 } 107 108 public void setLoad(boolean load) { 109 this.load = load; 110 } 111 112 public GBeanOverride getGBean(String gbeanName) { 113 return (GBeanOverride) gbeans.get(gbeanName); 114 } 115 116 public void addGBean(GBeanOverride gbean) { 117 gbeans.put(gbean.getName(), gbean); 118 } 119 120 public void addGBean(String gbeanName, GBeanOverride gbean) { 121 gbeans.put(gbeanName, gbean); 122 } 123 124 public Map getGBeans() { 125 return gbeans; 126 } 127 128 public GBeanOverride getGBean(AbstractName gbeanName) { 129 return (GBeanOverride) gbeans.get(gbeanName); 130 } 131 132 public void addGBean(AbstractName gbeanName, GBeanOverride gbean) { 133 gbeans.put(gbeanName, gbean); 134 } 135 136 public Element writeXml(Document doc, Element root) { 137 Element module = doc.createElement("module"); 138 root.appendChild(module); 139 module.setAttribute("name", name.toString()); 140 if (!load) { 141 module.setAttribute("load", "false"); 142 } 143 if (condition != null && condition.trim().length() != 0) { 144 module.setAttribute("condition", condition); 145 } 146 147 for (Iterator gb = gbeans.entrySet().iterator(); gb.hasNext();) { 149 Map.Entry gbean = (Map.Entry ) gb.next(); 150 GBeanOverride gbeanOverride = (GBeanOverride) gbean.getValue(); 151 gbeanOverride.writeXml(doc, module); 152 } 153 return module; 154 } 155 } 156 | Popular Tags |