Now using RouterConfig internally inside the XML Router.
[xmlrouter] / impl / src / main / java / org / wamblee / xmlrouter / impl / Transformations.java
index 07d086b65a8dcbd03e3b5d47bdd1b623792ba854..29e995916e78515fad607eb797ccc7923fd514f1 100644 (file)
@@ -1,43 +1,68 @@
+/*
+ * Copyright 2005-2011 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.impl;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
 
 import org.wamblee.xmlrouter.common.Id;
 import org.wamblee.xmlrouter.config.Transformation;
 
+/**
+ * This class manages transformations and computes the shortest transformations
+ * paths based on the provided transformations.
+ * 
+ * @author Erik Brakkee
+ * 
+ */
 public class Transformations {
 
-    private AtomicInteger sequenceNumber;
-    private Map<Integer, Transformation> transformations;
+    private Map<Id<Transformation>, Transformation> transformations;
     private List<String> vertices;
     private TransformationPath[][] matrix;
 
     private Map<String, List<TransformationPath>> sequences;
 
+    /**
+     * Construct the transformations.
+     */
     public Transformations() {
-        sequenceNumber = new AtomicInteger(1);
-        transformations = new LinkedHashMap<Integer, Transformation>();
+        transformations = new LinkedHashMap<Id<Transformation>, Transformation>();
         vertices = new ArrayList<String>();
         matrix = new TransformationPath[0][0];
     }
 
-    public Id<Transformation> addTransformation(Transformation aTransformation) {
-        int seqno = sequenceNumber.getAndIncrement();
-        Id<Transformation> id = new Id<Transformation>(seqno);
-        transformations.put(seqno,
-            new RobustTransformation(id, aTransformation));
+    public void replaceTransformations(
+        Map<Id<Transformation>, Transformation> aTransformations) {
+        transformations = aTransformations;
         computeTransformationSequences();
-        return id;
     }
 
+    /**
+     * Gets the possible target types based on an input type.
+     * 
+     * @param aType
+     *            Input type.
+     * @return Possible target types.
+     */
     public Collection<String> getPossibleTargetTypes(String aType) {
         int index = vertices.indexOf(aType);
         Set<String> res = new HashSet<String>();
@@ -65,7 +90,7 @@ public class Transformations {
      */
     public TransformationPath getPath(String aFrom, String aTo) {
         int i = vertices.indexOf(aFrom);
-        if (i == -1) {
+        if (i < 0) {
             if (aFrom.equals(aTo)) {
                 return new TransformationPath();
             }
@@ -73,9 +98,15 @@ public class Transformations {
         }
 
         int j = vertices.indexOf(aTo);
+        if (j < 0) {
+            return null;
+        }
         return matrix[i][j];
     }
 
+    /**
+     * Computest the transformation sequences using Floyd's algorithm.
+     */
     private void computeTransformationSequences() {
         vertices = new ArrayList<String>();
 
@@ -126,15 +157,6 @@ public class Transformations {
             .size();
     }
 
-    public void removeTransformation(Id<Transformation> aId) {
-        transformations.remove(aId.getId());
-        computeTransformationSequences();
-    }
-
-    public Collection<Transformation> getTransformations() {
-        return Collections.unmodifiableCollection(transformations.values());
-    }
-
     @Override
     public String toString() {
         StringBuffer buf = new StringBuffer();
@@ -156,4 +178,4 @@ public class Transformations {
         buf.append(")");
         return buf.toString();
     }
-}
\ No newline at end of file
+}