From: jsimomaa Date: Thu, 13 Dec 2018 11:39:09 +0000 (+0200) Subject: Fix ChangeMappingTypeHandler to work only with selections of DN.Element X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=b0d936571eda083d6ef2b76af21a5231b25dce09;p=simantics%2Fdistrict.git Fix ChangeMappingTypeHandler to work only with selections of DN.Element gitlab #22 Change-Id: If3e2e54df5980aa37a628da71c6167478c0be7b2 --- diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/contributions/ChangeMappingTypeHandler.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/contributions/ChangeMappingTypeHandler.java index 1f948335..1047dc13 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/contributions/ChangeMappingTypeHandler.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/contributions/ChangeMappingTypeHandler.java @@ -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 elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class); -// if (elements.size() < 1) -// return false; -// try { -// return Simantics.getSession().syncRequest(new Read() { -// -// @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 elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class); + if (elements.size() < 1) + return false; + try { + return Simantics.getSession().syncRequest(new Read() { + + @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 elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);