Newer
Older
ultramine_bootstrap / src / main / java / org / ultramine / bootstrap / maven / ProjectObjectModel.java
@vlad20012 vlad20012 on 31 Jul 2017 1 KB Initial commit
package org.ultramine.bootstrap.maven;

import org.ultramine.bootstrap.exceptions.ApplicationErrorException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilderFactory;
import java.util.ArrayList;
import java.util.List;

public class ProjectObjectModel
{
	private final List<MavenDependency> runtimeDependencies;

	private ProjectObjectModel(String pomUrl)
	{
		Document doc;
		try
		{
			doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(pomUrl);
		}
		catch (Exception e)
		{
			throw new ApplicationErrorException(e, "error.pom", pomUrl);
		}
		NodeList listNodes = doc.getElementsByTagName("dependency");

		runtimeDependencies = new ArrayList<>(listNodes.getLength());
		for(int i = 0, s = listNodes.getLength(); i < s; i++)
		{
			NodeList dependency = listNodes.item(i).getChildNodes();
			String group = null;
			String artifact = null;
			String version = null;
			String scope = null;
			for(int i1 = 0, s1 = dependency.getLength(); i1 < s1; i1++)
			{
				Node nd = dependency.item(i1);
				String name = nd.getNodeName();
				String val = nd.getTextContent();
				switch(name)
				{
				case "groupId": group = val; break;
				case "artifactId": artifact = val; break;
				case "version": version = val; break;
				case "scope": scope = val; break;
				}
			}
			if("runtime".equals(scope) || "compile".equals(scope))
				runtimeDependencies.add(new MavenDependency(group, artifact, version));
		}
	}

	public List<MavenDependency> getRuntimeDependencies()
	{
		return runtimeDependencies;
	}

	public static ProjectObjectModel loadFromXML(String pomUrl)
	{
		return new ProjectObjectModel(pomUrl);
	}

	public static ProjectObjectModel loadFromArtifact(String repoUrl, String group, String project, String version)
	{
		return loadFromXML(repoUrl + "/" + group.replace('.', '/') + "/" + project + "/" + version + "/" + project + "-" + version + ".pom");
	}
}