]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.annotation.ui/src/org/simantics/annotation/ui/diagram/handlers/NewAnnotation.java
3fbde77ba85d0332aad2f5d5971379ad31ea43b5
[simantics/platform.git] / bundles / org.simantics.annotation.ui / src / org / simantics / annotation / ui / diagram / handlers / NewAnnotation.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012 Association for Decentralized Information Management in\r
3  * 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.annotation.ui.diagram.handlers;\r
13 \r
14 import java.util.Collection;\r
15 \r
16 import org.eclipse.core.commands.AbstractHandler;\r
17 import org.eclipse.core.commands.ExecutionEvent;\r
18 import org.eclipse.core.commands.ExecutionException;\r
19 import org.eclipse.jface.viewers.ISelection;\r
20 import org.eclipse.ui.handlers.HandlerUtil;\r
21 import org.simantics.Simantics;\r
22 import org.simantics.annotation.ui.AnnotationUtils;\r
23 import org.simantics.db.ReadGraph;\r
24 import org.simantics.db.Resource;\r
25 import org.simantics.db.common.request.ReadRequest;\r
26 import org.simantics.db.exception.DatabaseException;\r
27 import org.simantics.db.layer0.variable.Variable;\r
28 import org.simantics.db.layer0.variable.Variables;\r
29 import org.simantics.diagram.content.ConnectionUtil;\r
30 import org.simantics.diagram.function.PredefinedVariables;\r
31 import org.simantics.modeling.ModelingResources;\r
32 import org.simantics.ui.utils.ResourceAdaptionUtils;\r
33 import org.simantics.utils.ui.ErrorLogger;\r
34 \r
35 public class NewAnnotation extends AbstractHandler {\r
36         Resource anno = null;\r
37         Resource strConnection = null;\r
38         Resource model = null;\r
39         \r
40         @Override\r
41     public Object execute(ExecutionEvent event) throws ExecutionException {\r
42                 \r
43                 ISelection selection = HandlerUtil.getCurrentSelection(event);\r
44         final Resource parent = ResourceAdaptionUtils.toSingleResource(selection);\r
45         if(parent == null) return null;\r
46         \r
47         try {\r
48                 \r
49                         Simantics.getSession().syncRequest(new ReadRequest() {\r
50 \r
51                                 @Override\r
52                                 public void run(ReadGraph graph) throws DatabaseException {\r
53                                         \r
54                                         Variable parentV = Variables.getVariable(graph, parent);\r
55                                         \r
56                                         model = Variables.getModel(graph, parentV);\r
57 \r
58                                         ConnectionUtil cu = new ConnectionUtil(graph);\r
59                                 Collection<Resource> connectors = cu.getTerminalConnectors(parent, null);\r
60                                 Resource connection = null;\r
61                                 for (Resource connector : connectors) {\r
62                                     connection = ConnectionUtil.tryGetConnection(graph, connector);\r
63                                     if (connection != null)\r
64                                         break;\r
65                                 }\r
66                                 if (connection == null)\r
67                                         return;\r
68                                 \r
69                                 ModelingResources MOD = ModelingResources.getInstance(graph);\r
70                                 strConnection = graph.getPossibleObject(connection, MOD.DiagramConnectionToConnection);\r
71                                 if (strConnection == null)\r
72                                         return;\r
73                                 \r
74                                 anno = PredefinedVariables.getAnnotation(graph, parent);\r
75                                 }\r
76                         });\r
77 \r
78                 if (strConnection == null)\r
79                         return null;\r
80                 if (anno == null)\r
81                     AnnotationUtils.newAnnotation(parent, model);\r
82 \r
83                 } catch (DatabaseException e) {\r
84                         ErrorLogger.defaultLogError(e);\r
85                 }\r
86 \r
87         return null;\r
88     }\r
89 \r
90 }\r