1 package org.naftulin.configmgr.content; 2 3 import java.util.Collections; 4 import java.util.LinkedList; 5 import java.util.List; 6 7 import org.naftulin.configmgr.ConfigurationManagerException; 8 import org.naftulin.configmgr.parsers.ConfigEntryParser; 9 import org.naftulin.configmgr.parsers.ExternalConfigurationParserImpl; 10 11 /*** 12 * Represents an external entry, with it's key, name-value pairs and parser class. 13 * Intended to mirror master configuration rules for external configuration. 14 * The external configuraton xml is: 15 * <pre> 16 * <external key="the key" configEntryAdatorClass="the fully qualified parser class"> 17 <param name="key1" value="value1" /> 18 ..... 19 <param name="keyn" value="valuen" /> 20 </external> 21 * </pre> 22 * where <code>configEntryParserClass</code> is a class implementing {@link org.naftulin.configmgr.parsers.ExternalRecordAdapter 23 * ExternalRecordAdapter} interface. 24 * @author Henry Henry 25 * @since 1.0 26 */ 27 public class ExternalRecordImpl extends AbstractRecordImpl { 28 private final List<NameValuePairImpl> nameValuePairs = new LinkedList<NameValuePairImpl>(); 29 private String configEntryAdaptorClass; 30 private final ExternalConfigurationParserImpl parser = new ExternalConfigurationParserImpl(); 31 32 /*** 33 * Adds a name-value pair as it is read from the master configuration. 34 * @param nameValuePair the name value pair. 35 */ 36 public void addNameValuePair(final NameValuePairImpl nameValuePair) { 37 nameValuePairs.add(nameValuePair); 38 } 39 40 /*** 41 * Sets the configuration entry adapter class. This class will handle 42 * adapting the loading and reloading of the configurations by calling 43 * load and reload methods on the original, exteral interface. 44 * @param adaptor the fully qualified name of the adaptor implementation class. 45 */ 46 public void setConfigEntryAdaptorClass(final String adaptor) { 47 configEntryAdaptorClass = adaptor; 48 } 49 50 /*** 51 * Returns an instance of {@link ExternalConfigurationParserImpl parser} that can parse the file to extract the configuration. 52 * @return the parser that can parse the file to extract the configuration. 53 * @throws ConfigurationManagerException if an error occured while instantiating the parser. 54 */ 55 public ConfigEntryParser getParser() throws ConfigurationManagerException { 56 parser.setNameValuePairs(Collections.unmodifiableList(nameValuePairs)); 57 parser.setExternalRecordAdapterClass(configEntryAdaptorClass); 58 return parser; 59 } 60 }