/******************************************************************************* * Copyright (c) 2009 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat Incorporated - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.rpmstubby.model; import java.util.HashMap; import java.util.Map; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * Gives easy access to data from the maven pom.xml file. * */ public class PomModel { private Document docroot; private XPath xpath; /** * Instantiates the model with the given XML document and preparing the * XPath evaluation environment. * * @param docroot * The document to query. */ public PomModel(Document docroot) { this.docroot = docroot; xpath = XPathFactory.newInstance().newXPath(); } /** * Returns the proposed package name. * * @return The proposed package name. */ public String getPackageName() { return xpathEval("/project/artifactId"); } /** * Returns the summary (xpath:/project/name). Maven project name is verbose * and it corresponds to the RPM specfile Summary tag. * * @return The summary. */ public String getSummary() { return xpathEval("/project/name"); } /** * Returns the project version (xpath:/project/version) or the parent version if * version is not present. * * @return The version. */ public String getVersion() { String version = xpathEval("/project/version"); if (version.equals("")) { version = xpathEval("/project/parent/version"); } return version; } /** * Returns the license (xpath:/project/licenses/license/name). * * @return The license name. */ public String getLicense() { return xpathEval("/project/licenses/license/name"); } /** * Returns the URL (xpath:/project/url) or (xpath:/project/organization/url). * * @return The project url. */ public String getURL() { String url = xpathEval("/project/url"); if (url.equals("")) { url = xpathEval("/project/organization/url"); } return url; } /** * Returns the project description (xpath:/project/description). * * @return The project description. */ public String getDescription() { return xpathEval("/project/description"); } /** * Returns the dependencies. * @return All the dependencies. */ public Map<String, String> getDependencies() { Map<String, String> dependencies = new HashMap<>(); NodeList nodes = xpathEvalNodes("/project/dependencies/dependency"); for (int i = 0; i < nodes.getLength(); i++) { Node node = nodes.item(i); try { dependencies.put(xpath.evaluate("groupId", node), xpath.evaluate("artifactId", node)); } catch (XPathExpressionException e) { // just no deps generated } } return dependencies; } private String xpathEval(String path) { String result = ""; try { result = xpath.evaluate(path, docroot); } catch (XPathExpressionException e) { // ignore, nothing that can be read } return result; } private NodeList xpathEvalNodes(String path) { NodeList result = null; try { result = (NodeList) xpath.evaluate(path, docroot, XPathConstants.NODESET); } catch (XPathExpressionException e) { // ignore, nothing that can be read } return result; } }