View Javadoc

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   * 	&lt;external key="the key" configEntryAdatorClass="the fully qualified parser class"&gt;
17  		&lt;param name="key1" value="value1" /&gt;
18  		.....
19  		&lt;param name="keyn" value="valuen" /&gt;
20  	&lt;/external&gt;
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  }