Config no longer implements Identifiable because this was in violation of the contrac...
[xmlrouter] / impl / src / main / java / org / wamblee / xmlrouter / impl / RobustIdentifiable.java
index f3da5f401e98f0dd7ae252c8c04458c781a51ad9..f371975fac804c378162084bc0e1a74536fbe2d9 100644 (file)
@@ -15,6 +15,8 @@
  */
 package org.wamblee.xmlrouter.impl;
 
+import static org.wamblee.xmlrouter.impl.MessageUtil.*;
+
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -22,7 +24,8 @@ import org.wamblee.xmlrouter.common.Id;
 import org.wamblee.xmlrouter.config.Identifiable;
 
 /**
- * Robust identifiable provides robustness for identifiable objects.
+ * Robust identifiable provides robustness for identifiable objects. It adds
+ * equality based on the id.
  * 
  * @author Erik Brakkee
  * 
@@ -34,33 +37,29 @@ public class RobustIdentifiable<T> implements Identifiable<T> {
 
     private Id<T> id;
 
-    // TODO test this class.
-    // TODO test that id is constant even though delegated changes its id.
-
     public RobustIdentifiable(Identifiable<T> aIdentifiable) {
-        // TODO test id is null
-        // TODO getId() throws exception
+        notNull("identifiable", aIdentifiable);
         try {
             id = aIdentifiable.getId();
             if (id == null) {
-                id = new Id<T>(Constants.UNKNOWN_ID.toString());
-                throw new RuntimeException(
-                    "Temporary to catch nulls during refactoring");
+                throwConfigException("identifiable.getId() returned null", null);
             }
         } catch (Exception e) {
-            LOGGER
-                .log(Level.WARNING, "Identifiable getId() threw exception", e);
+            throwConfigException("identifiable.getId() threw exception", e);
         }
 
     }
 
+    private void throwConfigException(String aMsg, Exception aException) {
+        LOGGER.log(Level.WARNING, aMsg, aException);
+        throw new ConfigException(aMsg);
+    }
+
     @Override
     public Id<T> getId() {
         return id;
     }
 
-    // TODO test equals, hashcode.
-
     @Override
     public int hashCode() {
         return id.hashCode();