/** * <p>Compare the properties of this config with that of the given and * copy those that are not present. This method is used by subclasses * that support configuration inheritance.</p> * * @param baseConfig The config object to copy properties from. */ protected void inheritProperties(BaseConfig baseConfig) { throwIfConfigured(); // Inherit forward properties Properties baseProperties = baseConfig.getProperties(); Enumeration keys = baseProperties.propertyNames(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); // Check if we have this property before copying it String value = this.getProperty(key); if (value == null) { value = baseProperties.getProperty(key); setProperty(key, value); } } }
public void begin(Attributes attributes) throws Exception { if (attributes.getIndex("key") == -1) { super.begin(attributes); return; } if (attributes.getIndex("property") != -1) { throw new IllegalArgumentException( "<set-property> accepts only one of 'key' or 'property' attributes."); } Object topOfStack = digester.peek(); if (topOfStack instanceof BaseConfig) { BaseConfig config = (BaseConfig) topOfStack; config.setProperty(attributes.getValue("key"), attributes.getValue("value")); } else { throw new IllegalArgumentException( "'key' attribute of <set-property> only applicable to subclasses of BaseConfig; " + "object on top of stack is " + topOfStack + " [key: " + attributes.getValue("key") + ", value: " + attributes.getValue("value") + "]"); } } }