public final Resource Diagram_nodeScaleGain_Inverse;
public final Resource Diagram_nodeScaleProperty;
public final Resource Diagram_nodeScaleProperty_Inverse;
+ public final Resource Diagram_splitToMultipleEnabled;
+ public final Resource Diagram_splitToMultipleEnabled_Inverse;
+ public final Resource Diagram_trackChangesEnabled;
+ public final Resource Diagram_trackChangesEnabled_Inverse;
public final Resource DistrictNodeGroup;
public final Resource DistrictNodeGroup_hasComponentTypeName;
public final Resource DistrictNodeGroup_hasComponentTypeName_Inverse;
public final Resource Mapping_VertexMapping_dpAttribute_Inverse;
public final Resource Mapping_VertexMapping_dtAttribute;
public final Resource Mapping_VertexMapping_dtAttribute_Inverse;
+ public final Resource ReturnConnectionType;
+ public final Resource ReturnInConnectionType;
+ public final Resource ReturnOutConnectionType;
public final Resource SCLMain;
public final Resource SpatialRefSystem;
+ public final Resource SupplyConnectionType;
+ public final Resource SupplyInConnectionType;
+ public final Resource SupplyOutConnectionType;
public final Resource Vertex;
public final Resource VertexDefaultMapping;
public final Resource VertexDefaultMapping_Inverse;
public static final String Diagram_nodeScaleGain_Inverse = "http://www.simantics.org/DistrictNetwork-1.0/Diagram/nodeScaleGain/Inverse";
public static final String Diagram_nodeScaleProperty = "http://www.simantics.org/DistrictNetwork-1.0/Diagram/nodeScaleProperty";
public static final String Diagram_nodeScaleProperty_Inverse = "http://www.simantics.org/DistrictNetwork-1.0/Diagram/nodeScaleProperty/Inverse";
+ public static final String Diagram_splitToMultipleEnabled = "http://www.simantics.org/DistrictNetwork-1.0/Diagram/splitToMultipleEnabled";
+ public static final String Diagram_splitToMultipleEnabled_Inverse = "http://www.simantics.org/DistrictNetwork-1.0/Diagram/splitToMultipleEnabled/Inverse";
+ public static final String Diagram_trackChangesEnabled = "http://www.simantics.org/DistrictNetwork-1.0/Diagram/trackChangesEnabled";
+ public static final String Diagram_trackChangesEnabled_Inverse = "http://www.simantics.org/DistrictNetwork-1.0/Diagram/trackChangesEnabled/Inverse";
public static final String DistrictNodeGroup = "http://www.simantics.org/DistrictNetwork-1.0/DistrictNodeGroup";
public static final String DistrictNodeGroup_hasComponentTypeName = "http://www.simantics.org/DistrictNetwork-1.0/DistrictNodeGroup/hasComponentTypeName";
public static final String DistrictNodeGroup_hasComponentTypeName_Inverse = "http://www.simantics.org/DistrictNetwork-1.0/DistrictNodeGroup/hasComponentTypeName/Inverse";
public static final String Mapping_VertexMapping_dpAttribute_Inverse = "http://www.simantics.org/DistrictNetwork-1.0/Mapping/VertexMapping/dpAttribute/Inverse";
public static final String Mapping_VertexMapping_dtAttribute = "http://www.simantics.org/DistrictNetwork-1.0/Mapping/VertexMapping/dtAttribute";
public static final String Mapping_VertexMapping_dtAttribute_Inverse = "http://www.simantics.org/DistrictNetwork-1.0/Mapping/VertexMapping/dtAttribute/Inverse";
+ public static final String ReturnConnectionType = "http://www.simantics.org/DistrictNetwork-1.0/ReturnConnectionType";
+ public static final String ReturnInConnectionType = "http://www.simantics.org/DistrictNetwork-1.0/ReturnInConnectionType";
+ public static final String ReturnOutConnectionType = "http://www.simantics.org/DistrictNetwork-1.0/ReturnOutConnectionType";
public static final String SCLMain = "http://www.simantics.org/DistrictNetwork-1.0/SCLMain";
public static final String SpatialRefSystem = "http://www.simantics.org/DistrictNetwork-1.0/SpatialRefSystem";
+ public static final String SupplyConnectionType = "http://www.simantics.org/DistrictNetwork-1.0/SupplyConnectionType";
+ public static final String SupplyInConnectionType = "http://www.simantics.org/DistrictNetwork-1.0/SupplyInConnectionType";
+ public static final String SupplyOutConnectionType = "http://www.simantics.org/DistrictNetwork-1.0/SupplyOutConnectionType";
public static final String Vertex = "http://www.simantics.org/DistrictNetwork-1.0/Vertex";
public static final String VertexDefaultMapping = "http://www.simantics.org/DistrictNetwork-1.0/VertexDefaultMapping";
public static final String VertexDefaultMapping_Inverse = "http://www.simantics.org/DistrictNetwork-1.0/VertexDefaultMapping/Inverse";
Diagram_nodeScaleGain_Inverse = getResourceOrNull(graph, URIs.Diagram_nodeScaleGain_Inverse);
Diagram_nodeScaleProperty = getResourceOrNull(graph, URIs.Diagram_nodeScaleProperty);
Diagram_nodeScaleProperty_Inverse = getResourceOrNull(graph, URIs.Diagram_nodeScaleProperty_Inverse);
+ Diagram_splitToMultipleEnabled = getResourceOrNull(graph, URIs.Diagram_splitToMultipleEnabled);
+ Diagram_splitToMultipleEnabled_Inverse = getResourceOrNull(graph, URIs.Diagram_splitToMultipleEnabled_Inverse);
+ Diagram_trackChangesEnabled = getResourceOrNull(graph, URIs.Diagram_trackChangesEnabled);
+ Diagram_trackChangesEnabled_Inverse = getResourceOrNull(graph, URIs.Diagram_trackChangesEnabled_Inverse);
DistrictNodeGroup = getResourceOrNull(graph, URIs.DistrictNodeGroup);
DistrictNodeGroup_hasComponentTypeName = getResourceOrNull(graph, URIs.DistrictNodeGroup_hasComponentTypeName);
DistrictNodeGroup_hasComponentTypeName_Inverse = getResourceOrNull(graph, URIs.DistrictNodeGroup_hasComponentTypeName_Inverse);
Mapping_VertexMapping_dpAttribute_Inverse = getResourceOrNull(graph, URIs.Mapping_VertexMapping_dpAttribute_Inverse);
Mapping_VertexMapping_dtAttribute = getResourceOrNull(graph, URIs.Mapping_VertexMapping_dtAttribute);
Mapping_VertexMapping_dtAttribute_Inverse = getResourceOrNull(graph, URIs.Mapping_VertexMapping_dtAttribute_Inverse);
+ ReturnConnectionType = getResourceOrNull(graph, URIs.ReturnConnectionType);
+ ReturnInConnectionType = getResourceOrNull(graph, URIs.ReturnInConnectionType);
+ ReturnOutConnectionType = getResourceOrNull(graph, URIs.ReturnOutConnectionType);
SCLMain = getResourceOrNull(graph, URIs.SCLMain);
SpatialRefSystem = getResourceOrNull(graph, URIs.SpatialRefSystem);
+ SupplyConnectionType = getResourceOrNull(graph, URIs.SupplyConnectionType);
+ SupplyInConnectionType = getResourceOrNull(graph, URIs.SupplyInConnectionType);
+ SupplyOutConnectionType = getResourceOrNull(graph, URIs.SupplyOutConnectionType);
Vertex = getResourceOrNull(graph, URIs.Vertex);
VertexDefaultMapping = getResourceOrNull(graph, URIs.VertexDefaultMapping);
VertexDefaultMapping_Inverse = getResourceOrNull(graph, URIs.VertexDefaultMapping_Inverse);
--- /dev/null
+package org.simantics.district.network.ui.contributions;
+
+import java.util.List;
+
+import javax.inject.Named;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.progress.UIJob;
+import org.simantics.DatabaseJob;
+import org.simantics.Simantics;
+import org.simantics.datatypes.literal.RGB;
+import org.simantics.db.Resource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.SelectionHints;
+import org.simantics.db.request.Write;
+import org.simantics.district.network.DistrictNetworkUtil;
+import org.simantics.district.network.ui.internal.Activator;
+import org.simantics.utils.ui.ISelectionUtils;
+import org.simantics.utils.ui.color.Color;
+import org.simantics.utils.ui.workbench.dialogs.ColorDialog;
+import org.slf4j.LoggerFactory;
+
+public class ChangeMapBackgroundColorHandler {
+
+ private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ChangeMapBackgroundColorHandler.class);
+
+ @CanExecute
+ public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) ISelection selection) {
+ final List<Resource> diagrams = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);
+ return diagrams.size() > 0;
+ }
+
+ @Execute
+ public void execute(@Named(IServiceConstants.ACTIVE_SELECTION) Object selection) {
+ final List<Resource> diagrams = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);
+ Job uijob = new UIJob("Change Map Background Color") {
+
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ ColorDialog dialog = new ColorDialog(getDisplay().getActiveShell());
+ if (dialog.open() == Dialog.OK) {
+ Color c = dialog.getColor();
+
+ LOGGER.info("Found color {}", c);
+ Job job = new DatabaseJob("Toggle draw map") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ Simantics.getSession().syncRequest((Write) graph -> DistrictNetworkUtil.changeMapBackgroundColor(graph, diagrams.get(0), new RGB.Integer(c.getR(), c.getG(), c.getB())));
+ } catch (DatabaseException e) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, getName() + " failed.", e);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ job.setUser(true);
+ job.schedule();
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ uijob.setUser(true);
+ uijob.schedule();
+ }
+}
package org.simantics.district.network.ui.contributions;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
import javax.inject.Named;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.SelectionStatusDialog;
+import org.eclipse.ui.progress.UIJob;
import org.simantics.DatabaseJob;
import org.simantics.Simantics;
import org.simantics.db.ReadGraph;
import org.simantics.db.Resource;
import org.simantics.db.WriteGraph;
+import org.simantics.db.common.NamedResource;
+import org.simantics.db.common.request.IndexRoot;
import org.simantics.db.common.request.ReadRequest;
+import org.simantics.db.common.request.UniqueRead;
import org.simantics.db.common.request.WriteRequest;
+import org.simantics.db.common.utils.NameUtils;
import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.ServiceException;
+import org.simantics.db.exception.ValidationException;
import org.simantics.db.layer0.SelectionHints;
-import org.simantics.db.request.Read;
+import org.simantics.db.procedure.Procedure;
import org.simantics.district.network.ontology.DistrictNetworkResource;
import org.simantics.district.network.ui.function.Functions;
import org.simantics.district.network.ui.internal.Activator;
-import org.simantics.layer0.Layer0;
import org.simantics.utils.ui.ISelectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class ChangeMappingTypeHandler {
-
+ private static final Logger LOGGER = LoggerFactory.getLogger(ChangeMappingTypeHandler.class);
+
@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;
- }
+// 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;
}
@Execute
public void execute(@Named(IServiceConstants.ACTIVE_SELECTION) Object selection) {
final List<Resource> elements = ISelectionUtils.getPossibleKeys(selection, SelectionHints.KEY_MAIN, Resource.class);
- if (elements.size() < 1)
- return;
-
- SelectMappingDialog dialog = new SelectMappingDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), elements);
- if (dialog.open() != Dialog.OK)
- return;
+// if (elements.size() < 1)
+// return;
- Resource mapping = dialog.getDefaultVertexMapping();
- Job job = new DatabaseJob("Join selected vertices") {
+ CompletableFuture<Map<NamedResource, Collection<NamedResource>>> result = new CompletableFuture<>();
+ Simantics.getSession().asyncRequest(new UniqueRead<Map<NamedResource, Collection<NamedResource>>>() {
@Override
- protected IStatus run(IProgressMonitor monitor) {
- try {
- Simantics.getSession().syncRequest(new WriteRequest() {
-
- @Override
- public void perform(WriteGraph graph) throws DatabaseException {
- DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
- for (Resource element : elements) {
- graph.deny(element, DN.HasMapping);
- graph.claim(element, DN.HasMapping, mapping);
- }
+ public Map<NamedResource, Collection<NamedResource>> perform(ReadGraph graph) throws DatabaseException {
+ DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+
+ Map<NamedResource, Collection<NamedResource>> currents = new HashMap<>();
+ for (Resource element : elements) {
+ Resource currentMapping = graph.getPossibleObject(element, DN.HasMapping);
+ NamedResource mapping = new NamedResource(NameUtils.getSafeName(graph, currentMapping), currentMapping);
+ currents.compute(mapping, (t, u) -> {
+ if (u == null)
+ u = new HashSet<>();
+ try {
+ u.add(new NamedResource(NameUtils.getSafeName(graph, element), element));
+ } catch (ValidationException | ServiceException e) {
+ LOGGER.error("Could not compute name for {}", element, e);
}
+ return u;
});
- } catch (DatabaseException e) {
- return new Status(IStatus.ERROR, Activator.PLUGIN_ID, getName() + " failed.", e);
}
+ return currents;
+ }
+ }, new Procedure<Map<NamedResource, Collection<NamedResource>>>() {
+
+ @Override
+ public void execute(Map<NamedResource, Collection<NamedResource>> results) {
+ result.complete(results);
+ }
+
+ @Override
+ public void exception(Throwable t) {
+ LOGGER.error("Could not compute mappings for selection {}", elements, t);
+ result.completeExceptionally(t);
+ }
+ });
+
+ UIJob uiJob = new UIJob("Change mappings..") {
+
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ SelectMappingDialog dialog = new SelectMappingDialog(getDisplay().getActiveShell(), result);
+ if (dialog.open() != Dialog.OK)
+ return Status.OK_STATUS;
+
+ Map<Resource, Collection<NamedResource>> results = dialog.getResults();
+ Job job = new DatabaseJob("Join selected vertices") {
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ Simantics.getSession().syncRequest(new WriteRequest() {
+
+ @Override
+ public void perform(WriteGraph graph) throws DatabaseException {
+ DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+
+ for (Map.Entry<Resource, Collection<NamedResource>> entry : results.entrySet()) {
+ Resource newMapping = entry.getKey();
+ Collection<NamedResource> elements = entry.getValue();
+ for (NamedResource element : elements) {
+ graph.deny(element.getResource(), DN.HasMapping);
+ graph.claim(element.getResource(), DN.HasMapping, newMapping);
+ }
+ }
+ }
+ });
+ } catch (DatabaseException e) {
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, getName() + " failed.", e);
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ job.setUser(true);
+ job.schedule();
return Status.OK_STATUS;
}
};
- job.setUser(true);
- job.schedule();
+ uiJob.setUser(true);
+ uiJob.schedule();
}
private static class SelectMappingDialog extends SelectionStatusDialog {
- private Combo vertexMappingCombo;
+ private Map<NamedResource, Combo> mappingCombos = new HashMap<>();
private Composite composite;
- private List<Resource> elements;
- private Map<String, Resource> vertexMappings = new HashMap<>();
+ private CompletableFuture<Map<NamedResource, Collection<NamedResource>>> elements;
+
+ private Map<NamedResource, Map<String, Resource>> possibleMappings = new HashMap<>();
private Resource defaultVertexMapping;
- protected SelectMappingDialog(Shell parentShell, List<Resource> elements) {
+ protected SelectMappingDialog(Shell parentShell, CompletableFuture<Map<NamedResource, Collection<NamedResource>>> elements) {
super(parentShell);
this.elements = elements;
- setTitle("Select mappings for new DN diagram");
+ setTitle("Change mappings");
}
public Resource getDefaultVertexMapping() {
@Override
public void run(ReadGraph graph) throws DatabaseException {
DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
- Resource element = elements.get(0);
- if (graph.isInstanceOf(element, DN.Vertex)) {
- vertexMappings = Functions.getVertexMappings(graph, element);
- } else if (graph.isInstanceOf(element, DN.Edge)) {
- vertexMappings = Functions.getEdgeMappings(graph, element);
+ try {
+ for (Map.Entry<NamedResource, Collection<NamedResource>> entry : elements.get().entrySet()) {
+ NamedResource currentMapping = entry.getKey();
+ Resource resource = entry.getValue().iterator().next().getResource();
+ Resource indexRoot = graph.sync(new IndexRoot(resource));
+ if (graph.isInstanceOf(currentMapping.getResource(), DN.Mapping_VertexMapping)) {
+ possibleMappings.put(currentMapping, Functions.getVertexMappings(graph, indexRoot));
+ } else if (graph.isInstanceOf(currentMapping.getResource(), DN.Mapping_EdgeMapping)) {
+ possibleMappings.put(currentMapping, Functions.getEdgeMappings(graph, indexRoot));
+ }
+ }
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
}
composite.getDisplay().asyncExec(() -> {
- vertexMappingCombo.setItems(vertexMappings.keySet().toArray(new String[vertexMappings.size()]));
- vertexMappingCombo.select(0);
- });
-
+ for (Map.Entry<NamedResource, Map<String, Resource>> entry : possibleMappings.entrySet()) {
+ NamedResource key = entry.getKey();
+ Map<String, Resource> value = entry.getValue();
+ Combo combo = mappingCombos.get(key);
+ combo.setItems(value.keySet().toArray(new String[value.size()]));
+ combo.select(0);
+ }
+ });
}
});
return composite;
}
+ private Map<Resource, Collection<NamedResource>> results = new HashMap<>();
+
@Override
protected void computeResult() {
- defaultVertexMapping = vertexMappings.get(vertexMappingCombo.getItem(vertexMappingCombo.getSelectionIndex()));
+ for (Map.Entry<NamedResource, Combo> combos : mappingCombos.entrySet()) {
+ NamedResource resource = combos.getKey();
+ Combo c = combos.getValue();
+ String item = c.getItem(c.getSelectionIndex());
+
+ Map<String, Resource> map = possibleMappings.get(resource);
+ Resource newMapping = map.get(item);
+ results.compute(newMapping, (t, u) -> {
+ if (u == null) {
+ u = new HashSet<>();
+ }
+ u.add(resource);
+ return u;
+ });
+ }
}
-
+
+ public Map<Resource, Collection<NamedResource>> getResults() {
+ return results;
+ }
+
private void createMappingsGroup(Composite parent) {
- Group group= new Group(parent, SWT.NONE);
- group.setFont(parent.getFont());
- group.setText("Default mappings");
- GridDataFactory.fillDefaults().grab(true, false).applyTo(group);
- group.setLayout(new GridLayout(1, false));
-
- Composite cmposite = new Composite(group, SWT.NONE);
- cmposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
- cmposite.setLayout(new GridLayout(2, false));
-
- Label vertexMappingLabel = new Label(cmposite, SWT.NONE);
- vertexMappingLabel.setText("Default vertex mapping");
+ try {
+ for (Map.Entry<NamedResource, Collection<NamedResource>> entry : elements.get().entrySet()) {
+
+ NamedResource currentMapping = entry.getKey();
+
+ Collection<NamedResource> mappedElements = entry.getValue();
+
+ Group group= new Group(parent, SWT.NONE);
+ group.setFont(parent.getFont());
+ group.setText(currentMapping.getName() + " currently mapped to " + mappedElements.size() + " elements");
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(group);
+ group.setLayout(new GridLayout(1, false));
+
+ Composite cmposite = new Composite(group, SWT.NONE);
+ cmposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ cmposite.setLayout(new GridLayout(2, false));
+
+ Label vertexMappingLabel = new Label(cmposite, SWT.NONE);
+ vertexMappingLabel.setText("New mapping type");
- vertexMappingCombo = new Combo(cmposite, SWT.READ_ONLY | SWT.BORDER);
- GridDataFactory.fillDefaults().grab(true, false).applyTo(vertexMappingCombo);
-
+ Combo c = new Combo(cmposite, SWT.READ_ONLY | SWT.BORDER);
+ GridDataFactory.fillDefaults().grab(true, false).applyTo(c);
+ mappingCombos.put(entry.getKey(), c);
+ }
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ }
}
}
}