/* * CCVisu is a tool for visual graph clustering * and general force-directed graph layout. * This file is part of CCVisu. * * Copyright (C) 2005-2012 Dirk Beyer * * CCVisu is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * CCVisu 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with CCVisu; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Please find the GNU Lesser General Public License in file * license_lgpl.txt or http://www.gnu.org/licenses/lgpl.txt * * Dirk Beyer (firstname.lastname@uni-passau.de) * University of Passau, Bavaria, Germany */ package org.sosy_lab.ccvisu.readers; import java.util.ArrayList; import java.util.List; import org.sosy_lab.ccvisu.graph.Relation; import org.sosy_lab.ccvisu.graph.Tuple; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXHandlerDOXXml extends DefaultHandler { private int xmlLevel = 0; private int memberLevel = 1; private String memberId = ""; private int compoundLevel = 1; private String compoundId = ""; private Relation relations; public SAXHandlerDOXXml(Relation relations) { super(); this.relations = relations; } /* (non-Javadoc) * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) */ @Override public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException { assert (attrs != null); xmlLevel++; if (qName.toLowerCase().equals("memberdef") // MEMBERDEF AND || qName.toLowerCase().equals("compounddef")) { // COMPOUNDDEF // Update current entry. String lId = attrs.getValue("id"); assert (lId != null); if (qName.toLowerCase().equals("memberdef")) { memberLevel = xmlLevel; memberId = lId; } else { compoundLevel = xmlLevel; compoundId = lId; } } if (qName.toLowerCase().equals("basecompoundref")) { // BASECOMPOUNDREF // Output this reference. assert (xmlLevel == compoundLevel + 1); // Super class that we inherit from. String baseCompoundId = attrs.getValue("refid"); if (baseCompoundId == null) { baseCompoundId = "UNKNOWN-EXTERNAL"; } // Protection. String protection = attrs.getValue("prot"); assert (protection != null); // Virtual. String virtual = attrs.getValue("virt"); assert (virtual != null); List<String> newTuple = new ArrayList<String>(); newTuple.add(compoundId); newTuple.add(baseCompoundId); newTuple.add(protection); newTuple.add(virtual); relations.addTuple(new Tuple("BASEDON", newTuple)); } else if (qName.toLowerCase().equals("references")) { // REFERENCES // Output this reference. assert (xmlLevel == memberLevel + 1); String referenceId = attrs.getValue("refid"); assert (referenceId != null); List<String> newTuple = new ArrayList<String>(); newTuple.add(memberId); newTuple.add(referenceId); relations.addTuple(new Tuple("REFERSTO", newTuple)); } else if (qName.toLowerCase().equals("location")) { // LOCATION // Output the location. String file = attrs.getValue("file"); assert (file != null); String lineNumber = attrs.getValue("line"); if (lineNumber == null) { lineNumber = "UNKNOWN"; } if (xmlLevel == compoundLevel + 1) { List<String> newTuple = new ArrayList<String>(); newTuple.add(compoundId); newTuple.add(file); newTuple.add(lineNumber); relations.addTuple(new Tuple("LOCATEDAT", newTuple)); } else { assert (xmlLevel == memberLevel + 1); assert (xmlLevel == compoundLevel + 3); List<String> newTuple = new ArrayList<String>(); newTuple.add(memberId); newTuple.add(file); newTuple.add(lineNumber); relations.addTuple(new Tuple("LOCATEDAT", newTuple)); } } } /* (non-Javadoc) * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String) */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { xmlLevel--; } }