]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop/src/org/simantics/interop/test/TypeComparator.java
Support for enumerated properties.
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / test / TypeComparator.java
index 61e8a0fbc193fa50cbc08e9a44f66207b241230d..2ea03d38f8d12ce0e4519b8b5a2328e906d084e1 100644 (file)
@@ -7,10 +7,6 @@ import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.Statement;
 import org.simantics.db.exception.DatabaseException;
-import org.simantics.db.exception.DoesNotContainValueException;
-import org.simantics.db.exception.ManyObjectsForFunctionalRelationException;
-import org.simantics.db.exception.ServiceException;
-import org.simantics.db.exception.ValidationException;
 import org.simantics.layer0.Layer0;
 
 /**
@@ -30,16 +26,16 @@ public class TypeComparator extends ResourceComparator {
        
        @Override
        public int compare(ReadGraph g, Resource o1, Resource o2, boolean local) throws DatabaseException {
-               if (local)
-                       return new TypeComparator().compare(g, o1, o2);
-               else
-                       return compare(g, o1, o2);
+               if (o1.equals(o2)) {
+                       return EXACT_MATCH;
+               }
+               return compare(g, o1, o2);
        }
        
        @Override
        public int compare(ReadGraph g, Resource o1, Resource o2) throws DatabaseException{
                if (!compareType(g,o1, o2)) {
-                       return (Integer.MAX_VALUE);
+                       return NO_MATCH;
                }
                return propsDiffCount(g,o1, o2);
        }
@@ -64,6 +60,16 @@ public class TypeComparator extends ResourceComparator {
                                return false;
                        }
                }
+               if (rs1.size() == 1) {
+                       // Check for enumeration type. Without this enumeration instances could be mixed together.
+                       if (g.hasStatement(rs1.get(0), l0.Enumeration, rs1.get(0))) {
+                               if (!r1.equals(r2)) {
+                                       rs1.clear();
+                                       rs2.clear();
+                                       return false;
+                               }
+                       }
+               }
                
                rs1.clear();
                rs2.clear();