]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/OpenDiagramFromSymbolAdapter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagramEditor / OpenDiagramFromSymbolAdapter.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.modeling.ui.diagramEditor;\r
13 \r
14 import java.util.Collection;\r
15 \r
16 import org.eclipse.ui.PartInitException;\r
17 import org.eclipse.ui.PlatformUI;\r
18 import org.simantics.db.ReadGraph;\r
19 import org.simantics.db.Resource;\r
20 import org.simantics.db.common.request.PossibleIndexRoot;\r
21 import org.simantics.db.common.request.ReadRequest;\r
22 import org.simantics.db.exception.DatabaseException;\r
23 import org.simantics.db.layer0.variable.RVI;\r
24 import org.simantics.diagram.stubs.DiagramResource;\r
25 import org.simantics.modeling.ModelingResources;\r
26 import org.simantics.modeling.ui.Activator;\r
27 import org.simantics.structural.stubs.StructuralResource2;\r
28 import org.simantics.ui.SimanticsUI;\r
29 import org.simantics.ui.workbench.ResourceEditorInput2;\r
30 import org.simantics.ui.workbench.editor.AbstractResourceEditorAdapter;\r
31 import org.simantics.utils.ui.ErrorLogger;\r
32 import org.simantics.utils.ui.workbench.WorkbenchUtils;\r
33 \r
34 /**\r
35  * @author Tuukka Lehtonen\r
36  */\r
37 public class OpenDiagramFromSymbolAdapter extends AbstractResourceEditorAdapter {\r
38 \r
39     private static final String EDITOR_ID = "org.simantics.modeling.ui.symbolEditor";\r
40 \r
41     public OpenDiagramFromSymbolAdapter() {\r
42         super("Symbol Editor", Activator.SYMBOL_ICON);\r
43     }\r
44 \r
45     protected String getEditorId() {\r
46         return EDITOR_ID;\r
47     }\r
48 \r
49     @Override\r
50     public boolean canHandle(ReadGraph g, Resource r) throws DatabaseException {\r
51         if(!g.isInheritedFrom(r, DiagramResource.getInstance(g).DefinedElement))\r
52             return false;\r
53         Resource componentType = g.getPossibleObject(r, ModelingResources.getInstance(g).SymbolToComponentType);\r
54         if(componentType == null)\r
55             return false;\r
56         return !OpenDiagramFromConfigurationAdapter.isLocked(g, componentType);\r
57     }\r
58 \r
59     @Override\r
60     public void openEditor(final Resource r) throws Exception {\r
61         SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
62             @Override\r
63             public void run(ReadGraph g) throws DatabaseException {\r
64                 StructuralResource2 sr = StructuralResource2.getInstance(g);\r
65                 final Collection<Resource> dias = g.getObjects(r, sr.IsDefinedBy);\r
66                 if (dias.isEmpty())\r
67                     return;\r
68 \r
69                 final Resource model = g.sync(new PossibleIndexRoot(r));\r
70                 if(model == null) return;\r
71 \r
72                 PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {\r
73                     @Override\r
74                     public void run() {\r
75                         for(Resource dia : dias)\r
76                             try {\r
77                                 String editorId = getEditorId();\r
78                                 WorkbenchUtils.openEditor(editorId, new ResourceEditorInput2(editorId, dia, model, (RVI)null));\r
79                             } catch (PartInitException e) {\r
80                                 ErrorLogger.defaultLogError(e);\r
81                             }\r
82                     }\r
83                 });\r
84             }\r
85         });\r
86     }\r
87 \r
88 }\r