/*
* 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 SAXHandlerSVN extends DefaultHandler {
private String currentRevision = "";
private String currentPath = "";
private Relation relations;
public SAXHandlerSVN(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 {
if (qName.toLowerCase().equals("logentry")) { // LOGENTRY
assert (attrs != null);
currentRevision = attrs.getValue("revision");
assert (currentRevision != null);
} else if (qName.toLowerCase().equals("path")) { // PATH
// Reset path.
currentPath = "";
}
}
/* (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 {
if (qName.toLowerCase().equals("path")) {
if (currentRevision.equals("")) {
System.err.println("Runtime Error: No path found for revision "
+ currentRevision + ".");
return;
}
List<String> tuple = new ArrayList<String>();
tuple.add(currentRevision);
tuple.add('"' + currentPath + '"');
relations.addTuple(new Tuple("CO-CHANGE", tuple));
}
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@Override
public void characters(char[] ch, int start, int len) throws SAXException {
String lName = new String(ch, start, len);
if (lName.trim().equals("")) {
return;
}
// Concatenate the existing and the new string.
currentPath += lName;
}
}