package com.compomics.software.autoupdater; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.XMLEvent; /** * MetaDataXMLParser. * * @author Davy Maddelein */ public class MetaDataXMLParser { /** * The highest version number. */ private String highestVersionNumber; /** * The XML event. */ private XMLEvent XMLEvent; /** * Create a new MetaDataXMLParser. * * @param xmlReader the XML reader * @throws XMLStreamException if an XMLStreamException occurs */ public MetaDataXMLParser(XMLEventReader xmlReader) throws XMLStreamException { while (xmlReader.hasNext()) { XMLEvent = xmlReader.nextEvent(); if (XMLEvent.isStartElement()) { if (XMLEvent.asStartElement().getName().getLocalPart().equalsIgnoreCase("versions")) { parseVersionNumbers(xmlReader); break; } } } } /** * Returns the highest version number. * * @return the highest version number */ public String getHighestVersionNumber() { return highestVersionNumber; } /** * Parses the version numbers of a Maven repository web site (or just about * any proper XML containing the tag version). * * @param xmlReader * @throws XMLStreamException */ private void parseVersionNumbers(XMLEventReader xmlReader) throws XMLStreamException { CompareVersionNumbers versionNumberComparator = new CompareVersionNumbers(); while (xmlReader.hasNext()) { XMLEvent = xmlReader.nextEvent(); if (XMLEvent.isStartElement()) { if (XMLEvent.asStartElement().getName().getLocalPart().equalsIgnoreCase("version")) { String currentVersionNumber = xmlReader.nextEvent().asCharacters().getData(); if (!currentVersionNumber.contains("b") && !currentVersionNumber.contains("beta")) { if (highestVersionNumber == null) { highestVersionNumber = currentVersionNumber; } else { if (versionNumberComparator.compare(highestVersionNumber, currentVersionNumber) == 1) { highestVersionNumber = currentVersionNumber; } } } } } else if (XMLEvent.isEndElement()) { if (XMLEvent.asEndElement().getName().getLocalPart().equalsIgnoreCase("versions")) { break; } } } } }