]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/FlagWriter.java
Logger fixes after merge commit:fdbe8762
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / adapter / FlagWriter.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.diagram.adapter;\r
13 \r
14 import org.simantics.databoard.Bindings;\r
15 import org.simantics.db.Resource;\r
16 import org.simantics.db.WriteGraph;\r
17 import org.simantics.db.common.utils.OrderedSetUtils;\r
18 import org.simantics.db.exception.DatabaseException;\r
19 import org.simantics.diagram.flag.DiagramFlagPreferences;\r
20 import org.simantics.diagram.flag.FlagLabelingScheme;\r
21 import org.simantics.diagram.flag.FlagUtil;\r
22 import org.simantics.diagram.stubs.DiagramResource;\r
23 import org.simantics.diagram.synchronization.graph.DiagramGraphUtil;\r
24 import org.simantics.diagram.synchronization.graph.ElementWriter;\r
25 import org.simantics.g2d.diagram.IDiagram;\r
26 import org.simantics.g2d.diagram.handler.DataElementMap;\r
27 import org.simantics.g2d.element.ElementUtils;\r
28 import org.simantics.g2d.element.IElement;\r
29 import org.simantics.g2d.elementclass.FlagClass;\r
30 import org.simantics.g2d.elementclass.FlagHandler;\r
31 import org.simantics.layer0.Layer0;\r
32 \r
33 /**\r
34  * @author Tuukka Lehtonen\r
35  */\r
36 public class FlagWriter implements ElementWriter {\r
37 \r
38     @Override\r
39     public void addToGraph(WriteGraph g, IElement flag, Resource flagResource) throws DatabaseException {\r
40         DiagramResource dia = DiagramResource.getInstance(g);\r
41         Layer0 l0 = Layer0.getInstance(g);\r
42 \r
43         FlagHandler fh = flag.getElementClass().getSingleItem(FlagHandler.class);\r
44         FlagClass.Type type = fh.getType(flag);\r
45         String text = ElementUtils.getText(flag);\r
46         if (text != null && text.isEmpty())\r
47             text = null;\r
48 \r
49         g.deny(flagResource, dia.HasFlagType);\r
50         g.claim(flagResource, dia.HasFlagType, null, DiagramGraphUtil.toFlagTypeResource(dia, type));\r
51 \r
52         Resource counterpart = null;\r
53 \r
54         FlagClass.Connection<IElement> conn = fh.getConnection(flag);\r
55         if (conn != null) {\r
56             IElement counterpartE = fh.getCorrespondence(flag);\r
57             IDiagram od = ElementUtils.getDiagram(counterpartE);\r
58             DataElementMap dem = od.getDiagramClass().getSingleItem(DataElementMap.class);\r
59             counterpart = (Resource) dem.getData(od, counterpartE);\r
60         }\r
61 \r
62         if (counterpart != null) {\r
63             FlagUtil.join(g, flagResource, counterpart);\r
64 \r
65             Resource diagram = OrderedSetUtils.getSingleOwnerList(g, flagResource, dia.Diagram);\r
66             Resource counterpartDiagram = OrderedSetUtils.getSingleOwnerList(g, counterpart, dia.Diagram);\r
67 \r
68             // Only give labels if flags are locally connected.\r
69             if (diagram.equals(counterpartDiagram)) {\r
70                 // Only set labels if this is a flag pair.\r
71                 if (text == null) {\r
72                     // Try to generate label if not specfied externally.\r
73                     FlagLabelingScheme scheme = DiagramFlagPreferences.getActiveFlagLabelingScheme(g);\r
74                     if (scheme != null) {\r
75                         text = scheme.generateLabel(g, diagram);\r
76                     }\r
77                 }\r
78 \r
79                 if (text != null) {\r
80                     g.claimLiteral(flagResource, l0.HasLabel, dia.FlagLabel, text, Bindings.STRING);\r
81                     g.claimLiteral(counterpart, l0.HasLabel, dia.FlagLabel, text, Bindings.STRING);\r
82                 }\r
83             }\r
84         }\r
85     }\r
86 \r
87     @Override\r
88     public void removeFromGraph(WriteGraph graph, Resource flag) throws DatabaseException {\r
89         FlagUtil.disconnectFlag(graph, flag);\r
90     }\r
91 \r
92 }\r