import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
import org.eclipse.ui.PlatformUI;
import org.simantics.Simantics;
import org.simantics.g2d.diagram.DiagramHints;
import org.simantics.layer0.Layer0;
import org.simantics.modeling.ComponentUtils;
+import org.simantics.modeling.ModelingResources;
import org.simantics.modeling.actions.NavigateToTarget;
import org.simantics.modeling.ui.Activator;
import org.simantics.structural.stubs.StructuralResource2;
*/
public class OpenDiagramFromConfigurationAdapter extends AbstractResourceEditorAdapter {
- private static final String EDITOR_ID = "org.simantics.modeling.ui.diagramEditor";
+ private static final String EDITOR_ID = "org.simantics.modeling.ui.diagramEditor"; //$NON-NLS-1$
public OpenDiagramFromConfigurationAdapter() {
- super("Diagram Editor", Activator.COMPOSITE_ICON);
+ super(Messages.OpenDiagramFromConfigurationAdapter_DiagramEditor, Activator.COMPOSITE_ICON);
}
- protected String getEditorId() {
- return EDITOR_ID;
+ protected String getEditorId(ReadGraph g, Resource composite) throws DatabaseException {
+ ModelingResources MOD = ModelingResources.getInstance(g);
+ String preferredEditorId = g.getPossibleRelatedValue(composite, MOD.PreferredDiagramEditorID);
+ if(preferredEditorId != null)
+ return preferredEditorId;
+ else
+ return EDITOR_ID;
}
@Override
Simantics.getSession().asyncRequest(new ReadRequest() {
@Override
public void run(ReadGraph g) throws DatabaseException {
- openEditor(g, r, getEditorId());
+ openEditor(g, r, getEditorId(g, r));
}
});
}
Resource diagram = ComponentUtils.getPossibleCompositeDiagram(graph, r);
if(diagram != null) return diagram;
- if(selectedObjects.size() == 1) {
- Object o = selectedObjects.iterator().next();
- if(o instanceof Resource) {
- Resource res = (Resource)o;
- if(graph.isInstanceOf(res, DIA.Element)) {
- return graph.getPossibleObject(res, L0.PartOf);
- }
- }
+ // TODO: what if the selected objects are from different diagrams?
+ if (selectedObjects.size() > 0) {
+ Set<Resource> diagrams = new HashSet<>();
+ for (Object o : selectedObjects) {
+ if (o instanceof Resource) {
+ Resource res = (Resource)o;
+ if (graph.isInstanceOf(res, DIA.Element)) {
+ diagrams.add(graph.getPossibleObject(res, L0.PartOf));
+ }
+ }
+ }
+ if (diagrams.size() == 1) {
+ return diagrams.iterator().next();
+ }
}
-
return null;
}