Mercurial > hg > ccmieditor
view java/src/uk/ac/qmul/eecs/ccmi/checkboxtree/XMLHandler.java @ 8:ea7885bd9bff tip
fixed bug : render solid line as dotted/dashed when moving the stylus from dotted/dashed to solid
author | ccmi-guest |
---|---|
date | Thu, 03 Jul 2014 16:12:20 +0100 |
parents | 9e67171477bc |
children |
line wrap: on
line source
/* CCmI Editor - A Collaborative Cross-Modal Diagram Editing Tool Copyright (C) 2011 Queen Mary University of London (http://ccmi.eecs.qmul.ac.uk/) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package uk.ac.qmul.eecs.ccmi.checkboxtree; import java.util.Stack; import javax.swing.tree.DefaultTreeModel; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /* Build a tree out of an XML file. The hierarchical structure of the XML file reflects * the structure of the tree. The XMl file must have the form specified in CheckBoxTree * class comment. * */ class XMLHandler extends DefaultHandler { @SuppressWarnings("serial") public XMLHandler(DefaultTreeModel treeModel, SetProperties properties){ this.properties = properties; this.treeModel = treeModel; /* path is used to keep track of the current node's path. If the path is present as a * * properties entry, then the current node, that has jus been created, will be set as selected */ path = new Stack<String>() { @Override public String toString(){ StringBuilder builder = new StringBuilder(); for(int i=0; i<size();i++){ builder.append(get(i)); if(i != size()-1) builder.append(CheckBoxTreeNode.STRING_PATH_SEPARATOR); } return builder.toString(); } }; } /* * Create a CheckBoxTreeNode out of an xml tag. The tree node name is given by the value * attribute. Whether the tree node is selectable or not, depends on the tag name, which can be * selectable/unselectable. If the node is selectable, then it will be set as selected if its path * is present in the properties */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { String nodeName = attributes.getValue(VALUE_ATTR); if(nodeName == null) throw new SAXException("Value attribute missing"); boolean isSelectable = SELECTABLE_NODE.equals(qName); CheckBoxTreeNode newNode = new CheckBoxTreeNode(nodeName,isSelectable); if(currentNode == null){ currentNode = newNode; treeModel.setRoot(newNode); }else{ currentNode.add(newNode); } currentNode = newNode; path.push(nodeName); if(properties.contains(path.toString())) newNode.setSelected(true); } /* when an end tag is encountered, we carry on building the tree with the father as current node */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { path.pop(); currentNode = (CheckBoxTreeNode)currentNode.getParent(); } private CheckBoxTreeNode currentNode; private DefaultTreeModel treeModel; private SetProperties properties; private Stack<String> path; /* attributes used in the XML file */ public static final String VALUE_ATTR = "value"; public static final String SELECTABLE_NODE = "selectable"; public static final String UNSELECTABLE_NODE = "selectable"; }