fiore@0
|
1 /*
|
fiore@0
|
2 CCmI Diagram Editor for Android
|
fiore@0
|
3
|
fiore@0
|
4 Copyright (C) 2012 Queen Mary University of London (http://ccmi.eecs.qmul.ac.uk/)
|
fiore@0
|
5
|
fiore@0
|
6 This program is free software: you can redistribute it and/or modify
|
fiore@0
|
7 it under the terms of the GNU General Public License as published by
|
fiore@0
|
8 the Free Software Foundation, either version 3 of the License, or
|
fiore@0
|
9 (at your option) any later version.
|
fiore@0
|
10
|
fiore@0
|
11 This program is distributed in the hope that it will be useful,
|
fiore@0
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
fiore@0
|
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
fiore@0
|
14 GNU General Public License for more details.
|
fiore@0
|
15
|
fiore@0
|
16 You should have received a copy of the GNU General Public License
|
fiore@0
|
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
|
fiore@0
|
18 */
|
fiore@0
|
19 package uk.ac.qmul.eecs.ccmi.xmlparser;
|
fiore@0
|
20
|
fiore@0
|
21 import java.util.Iterator;
|
fiore@0
|
22 import java.util.List;
|
fiore@0
|
23
|
fiore@0
|
24 /**
|
fiore@0
|
25 * An implementation of {@code DiagramUpdater} that immediately execute the commands on the local instance
|
fiore@0
|
26 * of {@code Diagram}.
|
fiore@0
|
27 */
|
fiore@0
|
28 public class LocalDiagramUpdater implements DiagramUpdater {
|
fiore@0
|
29 Diagram diagram;
|
fiore@0
|
30
|
fiore@0
|
31 /**
|
fiore@0
|
32 * Constructor
|
fiore@0
|
33 *
|
fiore@0
|
34 * @param diagram the diagram the commands will be executed on
|
fiore@0
|
35 */
|
fiore@0
|
36 public LocalDiagramUpdater(Diagram diagram){
|
fiore@0
|
37 this.diagram = diagram;
|
fiore@0
|
38 }
|
fiore@0
|
39
|
fiore@0
|
40 @Override
|
fiore@0
|
41 public void addNode(Node node){
|
fiore@0
|
42 diagram.getComponents().getNodes().add(node);
|
fiore@0
|
43 }
|
fiore@0
|
44
|
fiore@0
|
45 @Override
|
fiore@0
|
46 public void rename(HierarchyItem item, String newName) {
|
fiore@0
|
47 if(item instanceof Node){
|
fiore@0
|
48 ((Node)item).setName(newName);
|
fiore@0
|
49 }else if(item instanceof Edge){
|
fiore@0
|
50 ((Edge)item).setName(newName);
|
fiore@0
|
51 }else if(item instanceof PropertyValue){
|
fiore@0
|
52 ((PropertyValue)item).setValue(newName);
|
fiore@0
|
53 }
|
fiore@0
|
54 }
|
fiore@0
|
55
|
fiore@0
|
56 @Override
|
fiore@0
|
57 public void delete(HierarchyItem item) {
|
fiore@0
|
58 if(item instanceof Node){
|
fiore@0
|
59 diagram.getComponents().getNodes().remove(item);
|
fiore@0
|
60 Node node = (Node)item;
|
fiore@0
|
61 Iterator<Edge> iterator = diagram.getComponents().getEdges().iterator();
|
fiore@0
|
62 /* we are deleting this node, so we need to remove it from *
|
fiore@0
|
63 * attached nodes list of the edges it's attached to */
|
fiore@0
|
64 while(iterator.hasNext()){
|
fiore@0
|
65 Edge edge = iterator.next();
|
fiore@0
|
66 boolean removed = false;
|
fiore@0
|
67 for(EdgeNode edgeNode : edge.getAttachedNodes()){
|
fiore@0
|
68 if(edgeNode.getId() == node.getId()){
|
fiore@0
|
69 edge.getAttachedNodes().remove(edgeNode);
|
fiore@0
|
70 removed = true;
|
fiore@0
|
71 break;
|
fiore@0
|
72 }
|
fiore@0
|
73 }
|
fiore@0
|
74 /* there cannot be an edge with one node only. If the edge had two nodes one *
|
fiore@0
|
75 * of which was the deleted one, then the edge itself must be deleted */
|
fiore@0
|
76 if(removed && edge.getAttachedNodes().size() == 1)
|
fiore@0
|
77 iterator.remove();
|
fiore@0
|
78 }
|
fiore@0
|
79
|
fiore@0
|
80 }else if(item instanceof Edge){
|
fiore@0
|
81 diagram.getComponents().getEdges().remove(item);
|
fiore@0
|
82 }else if(item instanceof PropertyValue){
|
fiore@0
|
83 for(Node node: diagram.getComponents().getNodes()){
|
fiore@0
|
84 for(NodeProperty property : node.getProperties()){
|
fiore@0
|
85 if(property.getValues().remove(item)){
|
fiore@0
|
86 return;
|
fiore@0
|
87 }
|
fiore@0
|
88 }
|
fiore@0
|
89 }
|
fiore@0
|
90 }
|
fiore@0
|
91 }
|
fiore@0
|
92
|
fiore@0
|
93 @Override
|
fiore@0
|
94 public void addEdge(Edge edge) {
|
fiore@0
|
95 diagram.getComponents().getEdges().add(edge);
|
fiore@0
|
96 }
|
fiore@0
|
97
|
fiore@0
|
98 @Override
|
fiore@0
|
99 public void addProperty(Node node, NodeProperty property, String propertyValue) {
|
fiore@0
|
100 property.getValues().add(new PropertyValue(propertyValue));
|
fiore@0
|
101 }
|
fiore@0
|
102
|
fiore@0
|
103 @Override
|
fiore@0
|
104 public void setLabel(EdgeNode edgeNode, String label) {
|
fiore@0
|
105 edgeNode.setLabel(label);
|
fiore@0
|
106 }
|
fiore@0
|
107
|
fiore@0
|
108 @Override
|
fiore@0
|
109 public void setArrowHead(EdgeNode edgeNode, String arrowHead) {
|
fiore@0
|
110 edgeNode.setHead(arrowHead);
|
fiore@0
|
111 }
|
fiore@0
|
112
|
fiore@0
|
113 @Override
|
fiore@0
|
114 public void setModifiers(PropertyValue propertyValue, List<Integer> modifiers) {
|
fiore@0
|
115 propertyValue.setModifiersIndexes(modifiers);
|
fiore@0
|
116 }
|
fiore@0
|
117
|
fiore@0
|
118 }
|