001 /*
002 @license.text@
003 */
004 package biz.hammurapi.config;
005
006
007 import org.w3c.dom.Element;
008 import org.w3c.dom.Node;
009 import org.w3c.dom.NodeList;
010
011 /**
012 * Simple container
013 * @author Pavel Vlasov
014 * @revision $Revision$
015 */
016 public abstract class DomConfigurableContainer extends GenericContainer implements DomConfigurable {
017 public DomConfigurableContainer() {
018 // Default constructor
019 }
020
021 protected abstract String getComponentName(Node node);
022
023 public void configure(Node configNode, final Context context) throws ConfigurationException {
024 DomConfigFactory factory=new DomConfigFactory(new Context() {
025
026 public Object get(String name) {
027 Object ret=DomConfigurableContainer.this.get(name);
028 if (ret!=null) {
029 return ret;
030 }
031 return context==null ? null : context.get(name);
032 }
033
034 });
035
036 NodeList children=configNode.getChildNodes();
037 for (int i=0, length=children.getLength(); i<length; i++) {
038 Node child=children.item(i);
039 if (child instanceof Element) {
040 addComponent(getComponentName(child), factory.create(child));
041 }
042 }
043 }
044 }