]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/TypeGroup.java
No point computing ordered set if resource does not have any statements
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / adapter / TypeGroup.java
index e025fb2ddf16927783a2fc353817b87c9c068155..7e4cb0e37bc7d448eb3a79fea764a4bcc6d908bf 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * Copyright (c) 2007, 2018 Association for Decentralized Information Management
  * in Industry THTH ry.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -29,17 +29,21 @@ import org.simantics.db.procedure.SetListener;
 import org.simantics.diagram.stubs.DiagramResource;
 import org.simantics.layer0.Layer0;
 import org.simantics.scenegraph.profile.Group;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author Tuukka Lehtonen
  */
 public class TypeGroup implements Group {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(TypeGroup.class);
+
     private final Collection<Resource> types;
     private final String               name;
 
     public TypeGroup(String name, Resource type) {
-        this(name);
+        this(name, new Resource[] { type });
     }
 
     public TypeGroup(String name, Resource... types) {
@@ -47,6 +51,26 @@ public class TypeGroup implements Group {
         this.name = name;
     }
 
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + types.hashCode();
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        TypeGroup other = (TypeGroup) obj;
+        return types.equals(other.types);
+    }
+
     /**
      * Initialize TypeGroup from a DIAGRAM.Group instance.
      * 
@@ -83,14 +107,17 @@ public class TypeGroup implements Group {
 //                for (Resource t : types)
 //                    System.out.println("\t" + NameUtils.getSafeName(graph, t, true));
 
-                Collection<Resource> elements = graph.syncRequest(new OrderedSet(realDiagram));
-                for (Resource element : elements) {
-//                    System.out.println("checking element " + NameUtils.getSafeName(graph, element, true));
-                    Collection<Resource> elementTypes = graph.getTypes(element);
-                    if (!Collections.disjoint(types, elementTypes))
-                        result.add(element);
+                if (graph.hasStatement(realDiagram)) {
+                    Collection<Resource> elements = graph.syncRequest(new OrderedSet(realDiagram));
+                    for (Resource element : elements) {
+    //                    System.out.println("checking element " + NameUtils.getSafeName(graph, element, true));
+                        Collection<Resource> elementTypes = graph.getTypes(element);
+                        if (!Collections.disjoint(types, elementTypes))
+                            result.add(element);
+                    }
+                } else {
+                    LOGGER.warn("Most likely after deleting a diagram or something therefore no ordered set can be found for {}", realDiagram);
                 }
-
                 return result;
             }