]> gerrit.simantics Code Review - simantics/district.git/commitdiff
Fix ChangeMappingTypeHandler to work only with selections of DN.Element 50/2550/2
authorjsimomaa <jani.simomaa@gmail.com>
Thu, 13 Dec 2018 11:39:09 +0000 (13:39 +0200)
committerJani Simomaa <jani.simomaa@semantum.fi>
Thu, 13 Dec 2018 11:39:25 +0000 (11:39 +0000)
gitlab #22

Change-Id: If3e2e54df5980aa37a628da71c6167478c0be7b2

org.simantics.district.network.ui/src/org/simantics/district/network/ui/contributions/ChangeMappingTypeHandler.java

index 1f94833507ad557226f249d02740347d995e6eab..1047dc13e8b6f953192e487684c90fc9ff02f0c4 100644 (file)
@@ -47,6 +47,7 @@ import org.simantics.db.exception.ServiceException;
 import org.simantics.db.exception.ValidationException;
 import org.simantics.db.layer0.SelectionHints;
 import org.simantics.db.procedure.Procedure;
+import org.simantics.db.request.Read;
 import org.simantics.district.network.ontology.DistrictNetworkResource;
 import org.simantics.district.network.ui.function.Functions;
 import org.simantics.district.network.ui.internal.Activator;
@@ -60,36 +61,29 @@ public class ChangeMappingTypeHandler {
 
     @CanExecute
     public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) ISelection selection) {
-//        List<Resource> elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);
-//        if (elements.size() < 1)
-//            return false;
-//        try {
-//            return Simantics.getSession().syncRequest(new Read<Boolean>() {
-//
-//                @Override
-//                public Boolean perform(ReadGraph graph) throws DatabaseException {
-//                    Layer0 L0 = Layer0.getInstance(graph);
-//                    Resource instanceOf = null;
-//                    for (Resource element : elements) {
-//                        if (instanceOf == null) {
-//                            instanceOf = graph.getSingleObject(element, L0.InstanceOf);
-//                        } else {
-//                            Resource currentInstanceOf = graph.getSingleObject(element, L0.InstanceOf);
-//                            if (!currentInstanceOf.equals(instanceOf)) {
-//                                return false;
-//                            }
-//                        }
-//                    }
-//                    return true;
-//                }
-//            });
-//        } catch (DatabaseException e) {
-//            e.printStackTrace();
-//            return false;
-//        }
-        return true;
+        List<Resource> elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);
+        if (elements.size() < 1)
+            return false;
+        try {
+            return Simantics.getSession().syncRequest(new Read<Boolean>() {
+
+                @Override
+                public Boolean perform(ReadGraph graph) throws DatabaseException {
+                    DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+                    for (Resource selection : elements) {
+                        if (!graph.isInstanceOf(selection, DN.Element)) {
+                            return false;
+                        }
+                    }
+                    return true;
+                }
+            });
+        } catch (DatabaseException e) {
+            LOGGER.error("Could not evaluate if mapping can be changed for selection {}", elements, e);
+            return false;
+        }
     }
-    
+
     @Execute
     public void execute(@Named(IServiceConstants.ACTIVE_SELECTION) Object selection) {
         final List<Resource> elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);