*/
package org.wamblee.xmlrouter.impl;
-import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
*
* @param <T>
*/
-public abstract class ConfigImpl<T> implements Config<T> {
+public abstract class ConfigImpl<T> implements ExtendedConfig<T> {
+ private boolean dirty;
private AtomicLong next;
private Map<Id<T>, T> registered;
/**
* Constructs the object.
*/
- public ConfigImpl() {
- next = new AtomicLong(1);
+ public ConfigImpl(AtomicLong aNext) {
+ dirty = false;
+ next = aNext;
registered = new LinkedHashMap<Id<T>, T>();
}
* @see org.wamblee.xmlrouter.config.Config#add(T)
*/
@Override
- public Id<T> add(T aT) {
+ public synchronized Id<T> add(T aT) {
notNull(aT);
long seqno = next.incrementAndGet();
Id<T> id = new Id<T>(seqno);
registered.put(id, wrap(id, aT));
+ dirty = true;
return id;
}
+ /**
+ * This is called to wrap the given object by a safer version.
+ *
+ * @param aId
+ * Id.
+ * @param aT
+ * Object to wrap.
+ * @return Wrapped object.
+ */
public abstract T wrap(Id<T> aId, T aT);
/*
* .Id)
*/
@Override
- public boolean remove(Id<T> aId) {
+ public synchronized boolean remove(Id<T> aId) {
notNull(aId);
+ dirty = true;
return registered.remove(aId) != null;
}
- /*
- * (non-Javadoc)
- *
- * @see org.wamblee.xmlrouter.config.Config#ids()
- */
- @Override
- public Collection<Id<T>> ids() {
- return Collections.unmodifiableCollection(registered.keySet());
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.wamblee.xmlrouter.config.Config#get(org.wamblee.xmlrouter.common.Id)
- */
@Override
- public T get(Id<T> aId) {
- notNull(aId);
- return registered.get(aId);
+ public Map<Id<T>, T> map() {
+ return Collections.unmodifiableMap(registered);
}
private void notNull(T aT) {
throw new NullPointerException("Id is null");
}
}
+
+ @Override
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ @Override
+ public void resetDirty() {
+ dirty = false;
+ }
}