/**
* Hudson Serenitec plugin
*
* @author Georges Bossert <gbossert@gmail.com>
* @version $Revision: 1.3 $
* @since $Date: 2008/07/16 15:11:09 ${date}
* @copyright Universit� de Rennes 1
*/
package hudson.plugins.serenitec.parseur;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Gettingxml
{
static class Analyse extends DefaultHandler
{
private final ArrayList<ReportEntry> entries;
private ArrayList<ReportPointeur> pointeurs;
private ArrayList<ReportDescription> descriptions;
private ArrayList<ReportFile> fichiers;
private ReportEntry entry;
private StringBuffer buffer;
private ReportPointeur pointeur;
private ReportDescription description;
private ReportFile fichier;
private ArrayList<ReportPatch> patchs;
private ReportPatch patch;
// FLAGS
boolean f_report = false;
boolean f_entry = false;
boolean f_name = false;
boolean f_severity = false;
boolean f_descriptions = false;
boolean f_description = false;
boolean f_fulltext = false;
boolean f_helpreference = false;
boolean f_pointeurs = false;
boolean f_pointeur = false;
boolean f_filename = false;
boolean f_fullpath = false;
boolean f_linenumber = false;
boolean f_targetprojectfiles = false;
boolean f_targetprojectfile = false;
boolean f_fullfilename = false;
boolean f_patchs = false;
boolean f_patch = false;
/**
* Analyse
*/
public Analyse() {
super();
entries = new ArrayList<ReportEntry>();
fichiers = new ArrayList<ReportFile>();
patchs = new ArrayList<ReportPatch>();
}
/**
* @param ch,
* start, length
*/
@Override
public void characters(final char[] ch, final int start, final int length) throws SAXException {
final String lecture = new String(ch, start, length);
if (buffer != null) {
buffer.append(lecture);
}
}
/**
*
*/
@Override
public void endDocument() throws SAXException {
resultat_fichiers = fichiers;
resultat = entries;
}
/**
* @param uri,
* localName, qName
*/
@Override
public void endElement(final String uri, final String localName, final String qNam) throws SAXException {
String qName = qNam;
qName = qName.replaceAll("tns:", "");
if (qName.equals("name") && f_entry && f_name) {
entry.setName(buffer.toString());
f_name = false;
} else if (qName.equals("Severity") && f_entry && f_severity) {
entry.setSeverity(Integer.parseInt(buffer.toString()));
f_severity = false;
} else if (qName.equals("Descriptions") && f_entry && f_descriptions) {
f_descriptions = false;
entry.setDescriptions(descriptions);
} else if (qName.equals("Description") && f_entry && f_description) {
f_description = false;
descriptions.add(description);
} else if (qName.equals("FullText") && f_entry && f_descriptions && f_description && f_fulltext) {
description.setDescription(buffer.toString());
f_fulltext = false;
} else if (qName.equals("HelpReference") && f_entry && f_descriptions && f_description && f_helpreference) {
description.setHelpreference(buffer.toString());
f_helpreference = false;
} else if (qName.equals("Pointers") && f_entry && f_pointeurs) {
entry.setPointeurs(pointeurs);
f_pointeurs = false;
} else if (qName.equals("Pointer") && f_entry && f_pointeurs && f_pointeur) {
pointeurs.add(pointeur);
f_pointeur = false;
} else if (qName.equals("FileName") && f_entry && f_pointeurs && f_pointeur && f_filename) {
pointeur.setFilename(buffer.toString());
f_filename = false;
} else if (qName.equals("FullPath") && f_entry && f_pointeurs && f_pointeur && f_fullpath) {
pointeur.setFullpath(buffer.toString());
f_fullpath = false;
} else if (qName.equals("LineNumber") && f_entry && f_pointeurs && f_pointeur && f_linenumber) {
pointeur.setLinenumber(Integer.parseInt(buffer.toString()));
f_linenumber = false;
} else if (qName.equals("Entry") && f_entry) {
entries.add(entry);
f_entry = false;
} else if (qName.equals("TargetProjectFiles") && f_targetprojectfiles) {
f_targetprojectfiles = false;
} else if (qName.equals("TargetProjectFile") && f_targetprojectfile) {
fichiers.add(fichier);
f_targetprojectfile = false;
} else if (qName.equals("FullFileName") && f_fullfilename) {
f_fullfilename = false;
fichier.setFullFileName(buffer.toString());
buffer = new StringBuffer();
} else if (qName.equals("Patchs") && f_targetprojectfiles && f_targetprojectfile) {
f_patchs = false;
fichier.addPatchs(patchs);
} else if (qName.equals("Patch") && f_targetprojectfiles && f_targetprojectfile && f_patchs) {
f_patch = false;
patchs.add(patch);
buffer = new StringBuffer();
} else if (qName.equals("Report") && f_report) {
f_report = false;
}
}
/*
* (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(final String uri, final String localName, final String qNam, final Attributes attributes)
throws SAXException {
String qName = qNam.replaceAll("tns:", "");
if (qName.equals("Entry")) {
entry = new ReportEntry();
buffer = new StringBuffer();
f_entry = true;
} else if (qName.equals("name") && f_entry) {
f_name = true;
buffer = new StringBuffer();
} else if (qName.equals("Severity") && f_entry) {
f_severity = true;
buffer = new StringBuffer();
} else if (qName.equals("Descriptions") && f_entry) {
f_descriptions = true;
descriptions = new ArrayList<ReportDescription>();
buffer = new StringBuffer();
} else if (qName.equals("Description") && f_entry && f_descriptions) {
f_description = true;
description = new ReportDescription();
description.setLanguage(attributes.getValue("languageCode"));
buffer = new StringBuffer();
} else if (qName.equals("FullText") && f_entry && f_descriptions && f_description) {
f_fulltext = true;
buffer = new StringBuffer();
} else if (qName.equals("HelpReference") && f_entry && f_descriptions && f_description) {
f_helpreference = true;
buffer = new StringBuffer();
} else if (qName.equals("Pointers") && f_entry) {
f_pointeurs = true;
pointeurs = new ArrayList<ReportPointeur>();
buffer = new StringBuffer();
} else if (qName.equals("Pointer") && f_entry && f_pointeurs) {
f_pointeur = true;
pointeur = new ReportPointeur();
pointeur.setIsfixed(Boolean.parseBoolean(attributes.getValue("IsFixed")));
buffer = new StringBuffer();
} else if (qName.equals("FileName") && f_entry && f_pointeurs && f_pointeur) {
f_filename = true;
buffer = new StringBuffer();
} else if (qName.equals("FullPath") && f_entry && f_pointeurs && f_pointeur) {
f_fullpath = true;
buffer = new StringBuffer();
} else if (qName.equals("LineNumber") && f_entry && f_pointeurs && f_pointeur) {
f_linenumber = true;
buffer = new StringBuffer();
} else if (qName.equals("TargetProjectFiles") && !f_entry) {
f_targetprojectfiles = true;
fichiers = new ArrayList<ReportFile>();
buffer = new StringBuffer();
} else if (qName.equals("TargetProjectFile") && f_targetprojectfiles) {
f_targetprojectfile = true;
fichier = new ReportFile();
buffer = new StringBuffer();
} else if (qName.equals("FullFileName") && f_targetprojectfiles && f_targetprojectfile) {
f_fullfilename = true;
buffer = new StringBuffer();
} else if (qName.equals("Patchs") && f_targetprojectfiles && f_targetprojectfile) {
patchs = new ArrayList<ReportPatch>();
f_patchs = true;
buffer = new StringBuffer();
} else if (qName.equals("Patch") && f_targetprojectfiles && f_targetprojectfile && f_patchs) {
patch = new ReportPatch();
f_patch = true;
buffer = new StringBuffer();
} else {
buffer = new StringBuffer();
}
}
}
// Attribute
private static ArrayList<ReportEntry> resultat;
private static ArrayList<ReportFile> resultat_fichiers;
private static String xml;
/**
* @param xml1
*/
public Gettingxml(final String xml1) {
resultat_fichiers = new ArrayList<ReportFile>();
resultat = new ArrayList<ReportEntry>();
xml = xml1;
}
/**
* @throws ParserConfigurationException
* @throws SAXException
* @throws IOException
*/
public void parse() throws ParserConfigurationException, SAXException, IOException {
final SAXParserFactory fabrique = SAXParserFactory.newInstance();
final SAXParser parseur = fabrique.newSAXParser();
final File file = new File(xml);
final DefaultHandler gestionnaire = new Analyse();
parseur.parse(file, gestionnaire);
}
/**
* @return HashMap<String, Rule>
*/
public ArrayList<ReportEntry> result() {
return resultat;
}
/**
* @return ArrayList<ReportFiles>
*/
public ArrayList<ReportFile> resultFiles() {
/*
* System.out.println("ParsingXML : On renvoi 1 fichier"); ArrayList<ReportFile> res = new ArrayList<ReportFile>(); ReportFile fic =
* new ReportFile("AdvancedPlayer.java", "C:\\projetMaven\\TargetProject2\\AdvancedPlayer.java", true, true, true); res.add(fic);
* ReportFile fic2 = new ReportFile("fichier2.java", "C:\\projetMaven\\TargetProject2\\fichier2.java", true, true, true);
* res.add(fic2); ReportFile fic3 = new ReportFile("fichier3.java", "C:\\projetMaven\\TargetProject2\\fichier3.java", true, true,
* true); res.add(fic3); return res;
*/
return resultat_fichiers;
}
}