X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fxmlrouter%2Fimpl%2FCompositeConfig.java;h=3b45a3ef25b5d35d395e8703bafec1db0f1946cd;hb=3b2c669b25bfcb5a3c3f06ff9180d85143bebb2a;hp=22052108f5dd780c5eaffc3eb23f0e90bddafca0;hpb=03a6b404471945aed9d48fc1e5b8447b4a9d9413;p=xmlrouter diff --git a/impl/src/main/java/org/wamblee/xmlrouter/impl/CompositeConfig.java b/impl/src/main/java/org/wamblee/xmlrouter/impl/CompositeConfig.java index 2205210..3b45a3e 100644 --- a/impl/src/main/java/org/wamblee/xmlrouter/impl/CompositeConfig.java +++ b/impl/src/main/java/org/wamblee/xmlrouter/impl/CompositeConfig.java @@ -23,8 +23,6 @@ import java.util.List; import java.util.Set; import org.wamblee.xmlrouter.common.Id; -import org.wamblee.xmlrouter.config.Config; -import org.wamblee.xmlrouter.config.DuplicateException; import org.wamblee.xmlrouter.config.Identifiable; /** @@ -37,38 +35,53 @@ import org.wamblee.xmlrouter.config.Identifiable; public class CompositeConfig> implements ExtendedConfig { + private static final String PREFIX = "compositeconfig"; private static final String READ_ONLY_INSTANCE = "read only instance"; - private Set> ids; - private Id id; + + private Class type; + private Set prefixes; private List> valueIds; private List values; - public CompositeConfig(Id aId) { - ids = new HashSet>(); - id = aId; + public CompositeConfig(Class aType) { + type = aType; + prefixes = new HashSet(); valueIds = new ArrayList>(); values = new ArrayList(); } @Override - public Id getId() { - return id; + public Class getType() { + return type; + } + + @Override + public String getPrefix() { + return PREFIX; } public void addConfig(Config aConfig) { - if (ids.contains(aConfig.getId())) { - throw new DuplicateException(aConfig.getId().toString()); + notNull("aConfig", aConfig); + if (prefixes.contains(aConfig.getPrefix())) { + throw new ConfigException("duplicate prefix '" + + aConfig.getPrefix() + "'"); } + String prefix = aConfig.getPrefix() + "."; for (T item : aConfig.values()) { - if (valueIds.contains(item.getId())) { - throw new DuplicateException(item.getId().toString()); + Id newId = new Id(prefix + item.getId()); + if (valueIds.contains(newId)) { + throw new ConfigException("duplicate id '" + + item.getId().toString() + "'"); } } - ids.add(aConfig.getId()); + prefixes.add(aConfig.getPrefix()); + for (T item : aConfig.values()) { - valueIds.add(item.getId()); - values.add(item); + Id newId = new Id(prefix + item.getId()); + valueIds.add(newId); + values.add(IdentifiablePrefixProxyFactory.getProxy(prefix, item, + Identifiable.class, aConfig.getType())); } }