Now using RouterConfig internally inside the XML Router.
[xmlrouter] / impl / src / main / java / org / wamblee / xmlrouter / impl / ConfigImpl.java
index 789f75c5178db2da3579c10cd14f1fd96c193932..54c0c6d2357604103284b1d818c754a2e1fdc551 100644 (file)
@@ -15,7 +15,6 @@
  */
 package org.wamblee.xmlrouter.impl;
 
-import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -31,16 +30,18 @@ import org.wamblee.xmlrouter.config.Config;
  * 
  * @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>();
     }
 
@@ -50,14 +51,24 @@ public abstract class ConfigImpl<T> implements Config<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);
 
     /*
@@ -68,31 +79,15 @@ public abstract class ConfigImpl<T> implements Config<T> {
      * .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) {
@@ -106,4 +101,14 @@ public abstract class ConfigImpl<T> implements Config<T> {
             throw new NullPointerException("Id is null");
         }
     }
+
+    @Override
+    public boolean isDirty() {
+        return dirty;
+    }
+
+    @Override
+    public void resetDirty() {
+        dirty = false;
+    }
 }