more typesafety in the interface
authorErik Brakkee <erik@brakkee.org>
Mon, 25 Jul 2011 19:49:51 +0000 (21:49 +0200)
committerErik Brakkee <erik@brakkee.org>
Mon, 25 Jul 2011 19:49:51 +0000 (21:49 +0200)
config/src/main/java/org/wamblee/xmlrouter/config/RouterConfig.java [moved from config/src/main/java/org/wamblee/xmlrouter/config/Config.java with 73% similarity]
impl/src/main/java/org/wamblee/xmlrouter/impl/Transformations.java
impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouter.java

similarity index 73%
rename from config/src/main/java/org/wamblee/xmlrouter/config/Config.java
rename to config/src/main/java/org/wamblee/xmlrouter/config/RouterConfig.java
index 9ecdcfed5c4f2e7701ae6e2caf146166d29bc54a..db69d743feedd1d96f70a7a03bdb2eb5da65bba4 100644 (file)
@@ -12,7 +12,7 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- */ 
+ */
 package org.wamblee.xmlrouter.config;
 
 import java.util.Collection;
@@ -24,24 +24,35 @@ import org.wamblee.xmlrouter.common.Id;
  * 
  * @author Erik Brakkee
  */
-public interface Config {
+public interface RouterConfig {
+
+    // Documents
 
     Id<DocumentType> addDocumentType(DocumentType aType);
 
     void removeDocumentType(Id<DocumentType> aId);
 
-    Collection<DocumentType> getDocumentTypes();
+    Collection<Id<DocumentType>> getDocumentTypes();
+
+    DocumentType getDocumentType(Id<DocumentType> aId);
+
+    // Transformations
 
     Id<Transformation> addTransformation(Transformation aTransformation);
 
     void removeTransformation(Id<Transformation> aId);
 
-    Collection<Transformation> getTransformations();
+    Collection<Id<Transformation>> getTransformations();
+
+    Transformation getTransformation(Id<Transformation> aId);
+
+    // Filters
 
     Id<Filter> addFilter(Filter aFilter);
 
     void removeFilter(Id<Filter> aId);
 
-    Collection<Filter> getFilters();
+    Collection<Id<Filter>> getFilters();
 
+    Filter getFilter(Id<Filter> aId);
 }
index 20455e8a5e2b8633d4d783a5e1e26fed46e2c602..7fd3e10e7041efd6173dcc35832b94e67d0cbc46 100644 (file)
@@ -31,7 +31,7 @@ import org.wamblee.xmlrouter.config.Transformation;
 public class Transformations {
 
     private AtomicLong sequenceNumber;
-    private Map<Long, Transformation> transformations;
+    private Map<Id<Transformation>, Transformation> transformations;
     private List<String> vertices;
     private TransformationPath[][] matrix;
 
@@ -39,7 +39,7 @@ public class Transformations {
 
     public Transformations() {
         sequenceNumber = new AtomicLong(1);
-        transformations = new LinkedHashMap<Long, Transformation>();
+        transformations = new LinkedHashMap<Id<Transformation>, Transformation>();
         vertices = new ArrayList<String>();
         matrix = new TransformationPath[0][0];
     }
@@ -47,8 +47,7 @@ public class Transformations {
     public Id<Transformation> addTransformation(Transformation aTransformation) {
         long seqno = sequenceNumber.getAndIncrement();
         Id<Transformation> id = new Id<Transformation>(seqno);
-        transformations.put(seqno,
-            new RobustTransformation(id, aTransformation));
+        transformations.put(id, new RobustTransformation(id, aTransformation));
         computeTransformationSequences();
         return id;
     }
@@ -145,12 +144,16 @@ public class Transformations {
     }
 
     public void removeTransformation(Id<Transformation> aId) {
-        transformations.remove(aId.getId());
+        transformations.remove(aId);
         computeTransformationSequences();
     }
 
-    public Collection<Transformation> getTransformations() {
-        return Collections.unmodifiableCollection(transformations.values());
+    public Collection<Id<Transformation>> getTransformations() {
+        return Collections.unmodifiableCollection(transformations.keySet());
+    }
+
+    public Transformation getTransformation(Id<Transformation> aId) {
+        return transformations.get(aId);
     }
 
     @Override
index 6b460d1dea203495d7ef258afec33c75e86c71ab..e86593d274642c3a18500a899e4a9d4b78255103 100644 (file)
@@ -32,9 +32,9 @@ import javax.xml.transform.dom.DOMSource;
 import org.wamblee.general.Clock;
 import org.wamblee.xml.XMLDocument;
 import org.wamblee.xmlrouter.common.Id;
-import org.wamblee.xmlrouter.config.Config;
 import org.wamblee.xmlrouter.config.DocumentType;
 import org.wamblee.xmlrouter.config.Filter;
+import org.wamblee.xmlrouter.config.RouterConfig;
 import org.wamblee.xmlrouter.config.Transformation;
 import org.wamblee.xmlrouter.listener.EventInfo;
 import org.wamblee.xmlrouter.listener.EventListener;
@@ -44,7 +44,7 @@ import org.wamblee.xmlrouter.subscribe.DestinationRegistry;
 
 // TODO concurrency.
 
-public class XMLRouter implements Config, Gateway, DestinationRegistry {
+public class XMLRouter implements RouterConfig, Gateway, DestinationRegistry {
 
     private static final Logger LOGGER = Logger.getLogger(XMLRouter.class
         .getName());
@@ -53,26 +53,26 @@ public class XMLRouter implements Config, Gateway, DestinationRegistry {
     private Clock clock;
     private AtomicLong nextEventId;
     private AtomicLong sequenceNumbers;
-    private Map<Long, DocumentType> documentTypes;
+    private Map<Id<DocumentType>, DocumentType> documentTypes;
     private Transformations transformations;
-    private Map<Long, Filter> filters;
-    private Map<Long, Destination> destinations;
+    private Map<Id<Filter>, Filter> filters;
+    private Map<Id<Destination>, Destination> destinations;
 
     public XMLRouter(Clock aClock, EventListener aListener) {
         listener = aListener;
         clock = aClock;
         nextEventId = new AtomicLong(clock.currentTimeMillis());
         sequenceNumbers = new AtomicLong(1);
-        documentTypes = new LinkedHashMap<Long, DocumentType>();
+        documentTypes = new LinkedHashMap<Id<DocumentType>, DocumentType>();
         transformations = new Transformations();
-        filters = new LinkedHashMap<Long, Filter>();
-        destinations = new LinkedHashMap<Long, Destination>();
+        filters = new LinkedHashMap<Id<Filter>, Filter>();
+        destinations = new LinkedHashMap<Id<Destination>, Destination>();
     }
 
     @Override
     public Id<DocumentType> addDocumentType(DocumentType aType) {
         long seqno = sequenceNumbers.getAndIncrement();
-        documentTypes.put(seqno, aType);
+        documentTypes.put(new Id<DocumentType>(seqno), aType);
         return new Id<DocumentType>(seqno);
     }
 
@@ -82,8 +82,13 @@ public class XMLRouter implements Config, Gateway, DestinationRegistry {
     }
 
     @Override
-    public Collection<DocumentType> getDocumentTypes() {
-        return Collections.unmodifiableCollection(documentTypes.values());
+    public Collection<Id<DocumentType>> getDocumentTypes() {
+        return Collections.unmodifiableCollection(documentTypes.keySet());
+    }
+
+    @Override
+    public DocumentType getDocumentType(Id<DocumentType> aId) {
+        return documentTypes.get(aId);
     }
 
     @Override
@@ -97,14 +102,19 @@ public class XMLRouter implements Config, Gateway, DestinationRegistry {
     }
 
     @Override
-    public Collection<Transformation> getTransformations() {
+    public Collection<Id<Transformation>> getTransformations() {
         return transformations.getTransformations();
     }
 
+    @Override
+    public Transformation getTransformation(Id<Transformation> aId) {
+        return transformations.getTransformation(aId);
+    }
+
     @Override
     public Id<Filter> addFilter(Filter aFilter) {
         long seqno = sequenceNumbers.getAndIncrement();
-        filters.put(seqno, aFilter);
+        filters.put(new Id<Filter>(seqno), aFilter);
         return new Id<Filter>(seqno);
     }
 
@@ -114,8 +124,13 @@ public class XMLRouter implements Config, Gateway, DestinationRegistry {
     }
 
     @Override
-    public Collection<Filter> getFilters() {
-        return Collections.unmodifiableCollection(filters.values());
+    public Collection<Id<Filter>> getFilters() {
+        return Collections.unmodifiableCollection(filters.keySet());
+    }
+
+    @Override
+    public Filter getFilter(Id<Filter> aId) {
+        return filters.get(aId);
     }
 
     @Override
@@ -168,8 +183,9 @@ public class XMLRouter implements Config, Gateway, DestinationRegistry {
             .getPossibleTargetTypes(aInputType));
 
         // ask each destination what target types, if any they want to have.
-        for (Map.Entry<Long, Destination> entry : destinations.entrySet()) {
-            long destinationId = entry.getKey();
+        for (Map.Entry<Id<Destination>, Destination> entry : destinations
+            .entrySet()) {
+            Id<Destination> destinationId = entry.getKey();
             Destination destination = entry.getValue();
             Collection<String> requested = destination
                 .chooseFromTargetTypes(possibleTargetTypes);
@@ -200,7 +216,7 @@ public class XMLRouter implements Config, Gateway, DestinationRegistry {
                         // all transformations done and all filters still
                         // allow the event.
                         boolean result = destination.receive(transformed);
-                        listener.delivered(aInfo, ts, destinationId,
+                        listener.delivered(aInfo, ts, destinationId.getId(),
                             destination.getName(), result);
                         delivered = delivered || result;
 
@@ -280,13 +296,13 @@ public class XMLRouter implements Config, Gateway, DestinationRegistry {
         notNull("destination", aDestination);
         long seqno = sequenceNumbers.getAndIncrement();
         Id<Destination> id = new Id<Destination>(seqno);
-        destinations.put(seqno, new RobustDestination(id, aDestination));
+        destinations.put(id, new RobustDestination(id, aDestination));
         return id;
     }
 
     @Override
     public void unregisterDestination(Id<Destination> aId) {
-        destinations.remove(aId.getId());
+        destinations.remove(aId);
     }
 
     private void notNull(String aName, Object aValue) {