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 }