git://wamblee.org
/
xmlrouter
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
equality based on the ids of the contents of SingleRouterConfig.
[xmlrouter]
/
impl
/
src
/
main
/
java
/
org
/
wamblee
/
xmlrouter
/
impl
/
CompositeConfig.java
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 56e3e8b3f7cb799f77e23d68c42a43b2b1a69864..c9e250e49824fa44272aa3f1addd919f74871c09 100644
(file)
--- a/
impl/src/main/java/org/wamblee/xmlrouter/impl/CompositeConfig.java
+++ b/
impl/src/main/java/org/wamblee/xmlrouter/impl/CompositeConfig.java
@@
-15,11
+15,17
@@
*/
package org.wamblee.xmlrouter.impl;
*/
package org.wamblee.xmlrouter.impl;
+import static org.wamblee.xmlrouter.impl.MessageUtil.*;
+
import java.util.ArrayList;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.List;
+import java.util.Set;
import org.wamblee.xmlrouter.common.Id;
import org.wamblee.xmlrouter.config.Config;
import org.wamblee.xmlrouter.common.Id;
import org.wamblee.xmlrouter.config.Config;
+import org.wamblee.xmlrouter.config.ConfigException;
+import org.wamblee.xmlrouter.config.Identifiable;
/**
* Composite config. The composite config
/**
* Composite config. The composite config
@@
-28,46
+34,59
@@
import org.wamblee.xmlrouter.config.Config;
*
* @param <T>
*/
*
* @param <T>
*/
-public class CompositeConfig<T> implements ExtendedConfig<T> {
+public class CompositeConfig<T extends Identifiable<T>> implements
+ ExtendedConfig<T> {
- private Id<Config> id;
- private List<T> configs;
+ private static final Id<Config> ID = new Id<Config>("compositeconfig");
+ private static final String READ_ONLY_INSTANCE = "read only instance";
+ private Set<Id<Config>> ids;
+ private List<Id<T>> valueIds;
+ private List<T> values;
- public CompositeConfig(Id<Config> aId) {
- id = aId;
- configs = new ArrayList<T>();
+ public CompositeConfig() {
+ ids = new HashSet<Id<Config>>();
+ valueIds = new ArrayList<Id<T>>();
+ values = new ArrayList<T>();
}
@Override
public Id<Config> getId() {
}
@Override
public Id<Config> getId() {
- // TODO test id.
- return id;
+ return ID;
}
}
- public void add(Config<T> aConfig) {
- // TODO check duplicate config.
+ public void addConfig(Config<T> aConfig) {
+ notNull("aConfig", aConfig);
+ if (ids.contains(aConfig.getId())) {
+ throw new ConfigException("duplicate id '" +
+ aConfig.getId().toString() + "'");
+ }
for (T item : aConfig.values()) {
for (T item : aConfig.values()) {
- configs.add(item);
+ if (valueIds.contains(item.getId())) {
+ throw new ConfigException("duplicate id '" +
+ item.getId().toString() + "'");
+ }
+ }
+
+ ids.add(aConfig.getId());
+ for (T item : aConfig.values()) {
+ valueIds.add(item.getId());
+ values.add(item);
}
}
@Override
public List<T> values() {
}
}
@Override
public List<T> values() {
- return
config
s;
+ return
value
s;
}
@Override
public boolean remove(Id<T> aId) {
}
@Override
public boolean remove(Id<T> aId) {
- notSupported();
+ notSupported(
READ_ONLY_INSTANCE
);
return false;
}
@Override
public void add(T aT) {
return false;
}
@Override
public void add(T aT) {
- notSupported();
- }
-
- private void notSupported() {
- throw new RuntimeException("readonly instance");
+ notSupported(READ_ONLY_INSTANCE);
}
}
}
}