package org.ultramine.bootstrap.maven; import org.ultramine.bootstrap.exceptions.ApplicationErrorException; import org.ultramine.bootstrap.versioning.DefaultArtifactVersion; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilderFactory; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MavenMetadata { private final List<DefaultArtifactVersion> versions; private MavenMetadata(String xmlUrl) { Document doc; try { doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlUrl); } catch (Exception e) { throw new ApplicationErrorException(e, "error.mavenmetadata", xmlUrl); } NodeList listNodes = doc.getElementsByTagName("version"); versions = new ArrayList<>(listNodes.getLength()); for(int i = 0, s = listNodes.getLength(); i < s; i++) { String version = listNodes.item(i).getTextContent(); versions.add(new DefaultArtifactVersion(version, version)); } Collections.sort(versions); } public List<DefaultArtifactVersion> getVersions() { return versions; } public static MavenMetadata loadFromXML(String xmlUrl) { return new MavenMetadata(xmlUrl); } public static MavenMetadata loadFromProject(String projectUrl) { return loadFromXML(projectUrl + (projectUrl.endsWith("/") ? "" : "/") + "maven-metadata.xml"); } public static MavenMetadata loadFromProject(String repoUrl, String group, String project) { return loadFromProject(repoUrl + "/" + group.replace('.', '/') + "/" + project); } }