X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fcontributions%2FChangeMappingTypeHandler.java;h=a2c02532c4b3f84c23065e27ca7f068a414e6534;hb=1c4f571d010b7439e006e411f3661a50ee6a4400;hp=2b3d1888a41b2a0218221444ac8fbf5536f02ce2;hpb=3803b2cf3450ba6e2ef59bc3c150057315f1e539;p=simantics%2Fdistrict.git 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 2b3d1888..a2c02532 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); @@ -189,18 +183,12 @@ public class ChangeMappingTypeHandler { private Map> possibleMappings = new HashMap<>(); - private Resource defaultVertexMapping; - protected SelectMappingDialog(Shell parentShell, CompletableFuture>> elements) { super(parentShell); this.elements = elements; setTitle("Change mappings"); } - public Resource getDefaultVertexMapping() { - return defaultVertexMapping; - } - @Override protected Control createDialogArea(Composite parent) { composite = (Composite) super.createDialogArea(parent); @@ -245,18 +233,25 @@ public class ChangeMappingTypeHandler { @Override protected void computeResult() { + Map> currentElements = null; + try { + currentElements = elements.get(); + } catch (InterruptedException | ExecutionException e) { + LOGGER.error("Could not get currentElements", e); + throw new RuntimeException("Could not get currentElements", e); + } for (Map.Entry combos : mappingCombos.entrySet()) { NamedResource resource = combos.getKey(); Combo c = combos.getValue(); String item = c.getItem(c.getSelectionIndex()); - + Collection collection = currentElements.get(resource); Map map = possibleMappings.get(resource); Resource newMapping = map.get(item); results.compute(newMapping, (t, u) -> { if (u == null) { u = new HashSet<>(); } - u.add(resource); + u.addAll(collection); return u; }); }