annotate src/uk/ac/qmul/eecs/ccmi/xmlparser/LocalDiagramUpdater.java @ 1:66b3a838feca logging tip

Added logging of user interaction
author Fiore Martin <fiore@eecs.qmul.ac.uk>
date Tue, 12 Feb 2013 15:31:48 +0000
parents e0ee6ac3a45f
children
rev   line source
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 }