]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop/src/org/simantics/interop/test/NameComparator.java
Improved handling of unidentified objects.
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / test / NameComparator.java
index 5bdb3f041f55f954f271059ee93864185b7bfa00..125d05912b6d443a7687f8635b9d2023b7759bf0 100644 (file)
@@ -8,7 +8,9 @@ import org.simantics.db.exception.ServiceException;
 import org.simantics.layer0.Layer0;\r
 \r
 /**\r
- * * Object comparator that uses type and name of objects to check if objects are comparable. \r
+ * Object comparator that uses type and name of objects to check if objects are comparable.\r
+ * If objects have no name, compare returns unreliable as result.\r
+ *  \r
  * \r
  * Difference value is amount of properties that have different values.\r
  * \r
@@ -23,10 +25,13 @@ public class NameComparator extends TypeComparator {
                if (!compareType(g,o1, o2)) {\r
                        return Integer.MAX_VALUE;\r
                }\r
-               if(!compareName(g, o1, o2))\r
-                       return Integer.MAX_VALUE;\r
+               if (hasName(g, o1, o2)) {\r
+                       if(!compareName(g, o1, o2))\r
+                               return Integer.MAX_VALUE;\r
+                       return propsDiffCount(g,o1, o2);\r
+               }\r
+               return 0;\r
                \r
-               return propsDiffCount(g,o1, o2);\r
        }\r
        \r
        protected boolean compareName(ReadGraph g, Resource o1, Resource o2) throws ManyObjectsForFunctionalRelationException, ServiceException {\r
@@ -40,5 +45,15 @@ public class NameComparator extends TypeComparator {
                return false;\r
                        \r
        }\r
+       \r
+       protected boolean hasName(ReadGraph g, Resource o1, Resource o2) throws ManyObjectsForFunctionalRelationException, ServiceException {\r
+               Layer0 l0 = Layer0.getInstance(g);\r
+               String n1 = g.getPossibleRelatedValue(o1, l0.HasName);\r
+               String n2 = g.getPossibleRelatedValue(o2, l0.HasName);\r
+               if (n1 != null && n2 != null)\r
+                       return true;\r
+               return false;\r
+                       \r
+       }\r
 \r
 }\r