package org.simantics.district.selection.ui.parts;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.simantics.db.exception.RuntimeDatabaseException;
import org.simantics.db.layer0.QueryIndexUtils;
import org.simantics.db.layer0.request.ActiveModels;
+import org.simantics.db.layer0.util.Layer0Utils;
import org.simantics.db.request.Read;
import org.simantics.db.request.WriteResult;
+import org.simantics.diagram.stubs.DiagramResource;
import org.simantics.district.region.ontology.DiagramRegionsResource;
import org.simantics.district.route.ontology.RouteResource;
import org.simantics.district.selection.ElementSelectionResource;
private static Logger LOGGER = LoggerFactory.getLogger(EditSelectorDialog.class);
private ElementSelector elementSelector;
+
+ // Currently selected elements
+ Collection<Resource> currentSelection;
// Data for comboboxes
Map<Resource, String> diagrams;
private Composite content;
@Inject
- public EditSelectorDialog(Shell shell, ElementSelector elementSelector) {
+ public EditSelectorDialog(Shell shell, ElementSelector elementSelector, Collection<Resource> currentSelection) {
super(shell);
this.elementSelector = elementSelector;
}
}
+ this.currentSelection = currentSelection;
+
final Map<Resource, String> regions = new HashMap<>();
final Map<Resource, String> routes = new HashMap<>();
public void perform(WriteGraph graph) throws DatabaseException {
Layer0 L0 = Layer0.getInstance(graph);
ElementSelectionResource ES = ElementSelectionResource.getInstance(graph);
+ ModelingResources MOD = ModelingResources.getInstance(graph);
+ DiagramResource DIA = DiagramResource.getInstance(graph);
graph.markUndoPoint();
+ Layer0Utils.addCommentMetadata(graph, "Created new element selection");
Resource lib = ElementSelectionUtils.ensureSelectionLibrary(graph);
break;
case 1:
generatorType = ES.Generator_Diagram;
- Resource composite = graph.getPossibleObject(diagram, ModelingResources.getInstance(graph).DiagramToComposite);
+ Resource composite = graph.getPossibleObject(diagram, MOD.DiagramToComposite);
graph.claim(generator, ES.Generator_HasDiagram, composite != null ? composite : diagram);
break;
case 2:
generatorType = ES.Generator_Explicit;
- // TODO: Claim relations to current selection elements
+ for (Resource r : currentSelection) {
+ // No connections
+ if (graph.isInstanceOf(r, DIA.Connection))
+ continue;
+ if (!graph.isInstanceOf(r, DIA.Element)) {
+ if (!graph.hasStatement(r, MOD.ComponentToElement))
+ continue;
+
+ r = graph.getPossibleObject(r, MOD.ComponentToElement);
+ if (r == null)
+ continue;
+ }
+
+ graph.claim(generator, ES.Generator_HasSelectedElement, r);
+ }
break;
default: throw new IllegalStateException("Invalid source index " + generatorIndex);
}