diff options
author | Stanislav Ochotnicky <sochotnicky@redhat.com> | 2010-11-08 11:24:35 +0100 |
---|---|---|
committer | Stanislav Ochotnicky <sochotnicky@redhat.com> | 2010-11-08 11:24:35 +0100 |
commit | 06979fee03fbaf49ceeb133e87d26386df78b8bb (patch) | |
tree | b707258d2ea1d1bbf11ff0f14c48d3cc05e3b23d | |
parent | c6e77293a9b605d6f05878b75a35c4405daefada (diff) | |
download | maven-javadir-resolver-06979fee03fbaf49ceeb133e87d26386df78b8bb.tar.gz maven-javadir-resolver-06979fee03fbaf49ceeb133e87d26386df78b8bb.tar.xz maven-javadir-resolver-06979fee03fbaf49ceeb133e87d26386df78b8bb.zip |
Use DOM model again to solve performance issues
cleanups
-rw-r--r-- | src/main/java/org/fedoraproject/maven/artifact/repository/MavenJPackageDepmap.java | 166 |
1 files changed, 87 insertions, 79 deletions
diff --git a/src/main/java/org/fedoraproject/maven/artifact/repository/MavenJPackageDepmap.java b/src/main/java/org/fedoraproject/maven/artifact/repository/MavenJPackageDepmap.java index 6d599df..035c9b4 100644 --- a/src/main/java/org/fedoraproject/maven/artifact/repository/MavenJPackageDepmap.java +++ b/src/main/java/org/fedoraproject/maven/artifact/repository/MavenJPackageDepmap.java @@ -6,19 +6,24 @@ import java.io.IOException; import java.util.Hashtable; import java.util.StringTokenizer; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + import org.xml.sax.SAXException; import org.w3c.dom.*; -import javax.xml.parsers.*; - - - -import javax.xml.xpath.*; public class MavenJPackageDepmap { + private static class ArtifactDefinition { + String groupId = null; + String artifactId = null; + String version = null; + } + private static MavenJPackageDepmap instance; private static Hashtable<String, String> jppArtifactMap; @@ -37,15 +42,15 @@ public class MavenJPackageDepmap { public Hashtable<String, String> getMappedInfo(Hashtable<String, String> mavenDep) { return getMappedInfo((String) mavenDep.get("group"), - (String) mavenDep.get("artifact"), - (String) mavenDep.get("version")); + (String) mavenDep.get("artifact"), + (String) mavenDep.get("version")); } public Hashtable<String, String> getMappedInfo(String groupId, String artifactId, String version) { Hashtable<String, String> jppDep; String idToCheck, jppCombination; - + if (System.getProperty("maven2.ignore.versions") == null && System.getProperty("maven2.jpp.mode") == null) { idToCheck = groupId+","+artifactId+","+version; } else { @@ -108,15 +113,15 @@ public class MavenJPackageDepmap { } } - @SuppressWarnings("restriction") private static void processDepmapFile(String fileName) { Document mapDocument; - System.err.println("PDF: " + fileName); + debug("Loading depmap file: " + fileName); try { DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = fact.newDocumentBuilder(); - mapDocument = builder.parse(fileName); + fact.setNamespaceAware(true); + DocumentBuilder builder = fact.newDocumentBuilder(); + mapDocument = builder.parse(fileName); } catch (FileNotFoundException fnfe) { System.err.println("ERROR: Unable to find map file: " + fileName); fnfe.printStackTrace(); @@ -129,77 +134,80 @@ public class MavenJPackageDepmap { System.err.println("ERROR: Parsing of depmap file failed - configuration"); pce.printStackTrace(); return; - } - catch (SAXException se) { + } catch (SAXException se) { System.err.println("ERROR: Parsing of depmap file failed"); se.printStackTrace(); return; } - System.err.println("PARSED!"); - try { - // NodeList depNodes = mapDocument.getDocumentElement().getElementsByTagName("dependency"); - XPathFactory factory = XPathFactory.newInstance(); - XPath xpath = factory.newXPath(); - - // select depdenceny tag with one maven sub-element - Object result = xpath.evaluate("//dependency[count(maven)=1]", mapDocument, XPathConstants.NODESET); - NodeList depNodes = (NodeList) result; - - XPathExpression mGroupIdExpr = xpath.compile(".//maven/groupId"); - XPathExpression mArtifactIdExpr = xpath.compile(".//maven/artifactId"); - XPathExpression mVersionExpr = xpath.compile(".//maven/version"); - - XPathExpression jppGroupIdExpr = xpath.compile(".//jpp/groupId"); - XPathExpression jppArtifactIdExpr = xpath.compile(".//jpp/artifactId"); - XPathExpression jppVersionExpr = xpath.compile(".//jpp/version"); - - for (int i = 0; i < depNodes.getLength(); i++) { - Node depNode = depNodes.item(i); - String mV = null, jppG = null, jppA = null, jppV = null; - - String mG = ((Node) mGroupIdExpr.evaluate(depNode, XPathConstants.NODE)).getTextContent(); - String mA = ((Node) mArtifactIdExpr.evaluate(depNode, XPathConstants.NODE)).getTextContent(); - Node tempNode = ((Node) mVersionExpr.evaluate(depNode, XPathConstants.NODE)); - if (tempNode != null) { - // version can be omitted - mV = tempNode.getTextContent(); - } - - try { - jppG = ((Node) jppGroupIdExpr.evaluate(depNode, XPathConstants.NODE)).getTextContent(); - jppA = ((Node) jppArtifactIdExpr.evaluate(depNode, XPathConstants.NODE)).getTextContent(); - jppV = ((Node) jppVersionExpr.evaluate(depNode, XPathConstants.NODE)).getTextContent(); - } catch (NullPointerException ex) { - // drop this dependency - no jpp part found - System.err.println("WARNING: JPP part for" + mG + ":" + mA + " not found. Dropping dependency"); - } - // jppElem == null => drop this dependency - if (jppG != null && jppA != null) { - - if (System.getProperty("maven2.ignore.versions") == null && System.getProperty("maven2.jpp.mode") == null) { - debug("*** Adding: " + mG+","+mA+","+mV + " => " + jppG+","+jppA+","+jppV + " to map..."); - jppArtifactMap.put(mG+","+mA+","+mV, jppG+","+jppA+","+jppV); - } else { - debug("*** Adding: " + mG+","+mA + " => " + jppG+","+jppA+","+jppV + " to map..."); - jppArtifactMap.put(mG+","+mA, jppG+","+jppA+","+jppV); - } - //System.err.println("ADDED: " + mG+","+mA+","+mV+ " => "+ jppG+","+jppA+","+jppV); - } else { - debug("*** Adding: " + mG+","+mA+"," + " => " + "JPP/maven2,empty-dep,"+mV + " to map..."); - jppArtifactMap.put(mG+","+mA, "JPP/maven2,empty-dep,"+mV); - //System.err.println("ADDED SOMETHING2!"); - } - } - } - catch (XPathExpressionException ex) { - System.err.println("ERROR: Setting up or evaluation of XPath expressions failed"); - ex.printStackTrace(); - return; - } + + NodeList depNodes = (NodeList) mapDocument.getElementsByTagName("dependency"); + + for (int i = 0; i < depNodes.getLength(); i++) { + Element depNode = (Element) depNodes.item(i); + + NodeList mavenNodeList = (NodeList) depNode.getElementsByTagName("maven"); + if (mavenNodeList.getLength() != 1) { + debug("Number of maven sub-elements is not 1. Bailing from depmap generation"); + debug("Maven node: " + depNode.getTextContent()); + return; + } + ArtifactDefinition mavenAD = getArtifactDefinition((Element) mavenNodeList.item(0)); + + ArtifactDefinition jppAD = null; + NodeList jppNodeList = (NodeList) depNode.getElementsByTagName("jpp"); + + if (jppNodeList.getLength() == 1) { + jppAD = getArtifactDefinition((Element) jppNodeList.item(0)); + if (System.getProperty("maven2.ignore.versions") == null && System.getProperty("maven2.jpp.mode") == null) { + debug("*** Adding: " + mavenAD.groupId + "," + mavenAD.artifactId + "," + mavenAD.version + " => " + + jppAD.groupId + "," + jppAD.artifactId + "," + jppAD.version + " to map..."); + + jppArtifactMap.put(mavenAD.groupId + "," + mavenAD.artifactId + "," + mavenAD.version, + jppAD.groupId + "," + jppAD.artifactId + "," + jppAD.version); + } else { + debug("*** Adding: " + mavenAD.groupId+"," + mavenAD.artifactId + " => " + + jppAD.groupId + "," + jppAD.artifactId + "," + jppAD.version + " to map..."); + + jppArtifactMap.put(mavenAD.groupId+","+mavenAD.artifactId, + jppAD.groupId + "," + jppAD.artifactId + "," + jppAD.version); + } + } else { + debug("Number of jpp sub-elements is not 1. Dropping dependency"); + debug("*** Adding: " + mavenAD.groupId+","+mavenAD.artifactId+"," + " => " + "JPP/maven2,empty-dep,"+mavenAD.version + " to map..."); + jppArtifactMap.put(mavenAD.groupId+","+mavenAD.artifactId, "JPP/maven2,empty-dep,"+mavenAD.version); + } + } } - private static void debug(String msg) { - if (System.getProperty("maven2.jpp.debug") != null) - System.err.println(msg); - } + private static ArtifactDefinition getArtifactDefinition(Element element) { + ArtifactDefinition ad = new ArtifactDefinition(); + + NodeList nodes = element.getElementsByTagName("groupId"); + if (nodes.getLength() != 1) { + debug("groupId definition not found in depmap"); + return null; + } + ad.groupId = nodes.item(0).getTextContent(); + + nodes = element.getElementsByTagName("artifactId"); + if (nodes.getLength() != 1) { + debug("artifactId definition not found in depmap"); + return null; + } + ad.artifactId = nodes.item(0).getTextContent(); + + nodes = element.getElementsByTagName("version"); + if (nodes.getLength() != 1) { + ad.version = "DUMMY_VER"; + } else { + ad.version = nodes.item(0).getTextContent(); + } + return ad; + } + + + private static void debug(String msg) { + if (System.getProperty("maven2.jpp.debug") != null) + System.err.println(msg); + } } |