import static org.wamblee.xmlrouter.impl.MessageUtil.*;
-import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
import org.wamblee.xmlrouter.common.Id;
-import org.wamblee.xmlrouter.config.Config;
import org.wamblee.xmlrouter.config.Identifiable;
/**
public abstract class ConfigImpl<T extends Identifiable<T>> implements
ExtendedConfig<T> {
- private Id<Config> id;
- private List<T> registered;
+ private Class<T> type;
+ private String prefix;
+ private Map<Id<T>, T> registered;
/**
* Constructs the object.
*/
- public ConfigImpl(Id<Config> aId) {
- notNull("id", aId);
- id = aId;
- registered = new ArrayList<T>();
+ public ConfigImpl(Class<T> aType, String aPrefix) {
+ notNull("type", aType);
+ notNull("id", aPrefix);
+ type = aType;
+ prefix = aPrefix;
+ registered = new HashMap<Id<T>, T>();
}
@Override
- public Id<Config> getId() {
- return id;
+ public Class<T> getType() {
+ return type;
+ }
+
+ /**
+ * Copies the config object.
+ *
+ * @param aConfig
+ * Config to copy.
+ */
+ public ConfigImpl(ConfigImpl<T> aConfig) {
+ notNull("config", aConfig);
+ prefix = aConfig.prefix;
+ registered = new HashMap<Id<T>, T>();
+ for (Map.Entry<Id<T>, T> entry : aConfig.registered.entrySet()) {
+ registered.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ @Override
+ public String getPrefix() {
+ return prefix;
}
/*
@Override
public synchronized void add(T aT) {
notNull("aT", aT);
- registered.add(wrap(id.getId() + ".", aT));
+ if (registered.containsKey(aT.getId())) {
+ throw new ConfigException("Duplicate id '" + aT.getId() + "'");
+ }
+ registered.put(aT.getId(), wrap(aT));
}
/**
* Object to wrap.
* @return Wrapped object.
*/
- public abstract T wrap(String aPrefix, T aT);
+ public abstract T wrap(T aT);
/*
* (non-Javadoc)
@Override
public synchronized boolean remove(Id<T> aId) {
notNull("aId", aId);
- Iterator<T> i = registered.iterator();
- while (i.hasNext()) {
- T t = i.next();
- if (t.getId().equals(aId)) {
- i.remove();
- return true;
- }
+ T value = registered.get(aId);
+ if (value != null) {
+ registered.remove(aId);
+ return true;
}
return false;
}
@Override
- public List<T> values() {
- return Collections.unmodifiableList(registered);
+ public Collection<T> values() {
+ return Collections.unmodifiableCollection(registered.values());
+ }
+
+ @Override
+ public boolean equals(Object aObj) {
+ if (aObj == null) {
+ return false;
+ }
+ if (!(aObj instanceof ConfigImpl)) {
+ return false;
+ }
+ ConfigImpl obj = (ConfigImpl) aObj;
+ return registered.keySet().equals(obj.registered.keySet());
+ }
+
+ @Override
+ public int hashCode() {
+ return registered.keySet().hashCode();
}
}