package org.argeo.slc.repo.maven; import java.io.File; import java.util.HashMap; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** Recursively migrate all the POMs to Argeo Distribution v1.3 */ public class ConvertPoms_01_03 implements Runnable { final String SPRING_SOURCE_PREFIX = "com.springsource"; private HashMap artifactMapping = new HashMap(); private File rootDir; public ConvertPoms_01_03(String rootDirPath) { this(new File(rootDirPath)); } public ConvertPoms_01_03(File rootDir) { this.rootDir = rootDir; artifactMapping.put("org.argeo.dep.jacob", "com.jacob"); artifactMapping.put("org.argeo.dep.jacob.win32.x86", "com.jacob.win32.x86"); artifactMapping.put("org.argeo.dep.osgi.activemq", "org.apache.activemq"); artifactMapping.put("org.argeo.dep.osgi.activemq.optional", "org.apache.activemq.optional"); artifactMapping.put("org.argeo.dep.osgi.activemq.xmpp", "org.apache.activemq.xmpp"); artifactMapping.put("org.argeo.dep.osgi.aether", "org.eclipse.aether"); artifactMapping.put("org.argeo.dep.osgi.boilerpipe", "de.l3s.boilerpipe"); artifactMapping.put("org.argeo.dep.osgi.commons.cli", "org.apache.commons.cli"); artifactMapping.put("org.argeo.dep.osgi.commons.exec", "org.apache.commons.exec"); artifactMapping.put("org.argeo.dep.osgi.directory.shared.asn.codec", "org.apache.directory.shared.asn.codec"); artifactMapping.put("org.argeo.dep.osgi.drewnoakes.metadata_extractor", "com.drewnoakes.metadata_extractor"); artifactMapping.put("org.argeo.dep.osgi.geoapi", "org.opengis"); artifactMapping.put("org.argeo.dep.osgi.geotools", "org.geotools"); artifactMapping.put("org.argeo.dep.osgi.google.collections", "com.google.collections"); artifactMapping.put("org.argeo.dep.osgi.hibernatespatial", "org.hibernatespatial"); artifactMapping.put("org.argeo.dep.osgi.jackrabbit", "org.apache.jackrabbit"); artifactMapping.put("org.argeo.dep.osgi.jai.imageio", "com.sun.media.jai.imageio"); artifactMapping.put("org.argeo.dep.osgi.java3d", "javax.vecmath"); artifactMapping.put("org.argeo.dep.osgi.jcr", "javax.jcr"); artifactMapping.put("org.argeo.dep.osgi.jsr275", "javax.measure"); artifactMapping.put("org.argeo.dep.osgi.jts", "com.vividsolutions.jts"); artifactMapping.put("org.argeo.dep.osgi.mina.filter.ssl", "org.apache.mina.filter.ssl"); artifactMapping.put("org.argeo.dep.osgi.modeshape", "org.modeshape"); artifactMapping.put("org.argeo.dep.osgi.netcdf", "edu.ucar.unidata.netcdf"); artifactMapping.put("org.argeo.dep.osgi.pdfbox", "org.apache.pdfbox"); artifactMapping.put("org.argeo.dep.osgi.poi", "org.apache.poi"); artifactMapping.put("org.argeo.dep.osgi.postgis.jdbc", "org.postgis.jdbc"); artifactMapping.put("org.argeo.dep.osgi.springframework.ldap", "org.springframework.ldap"); artifactMapping.put("org.argeo.dep.osgi.tagsoup", "org.ccil.cowan.tagsoup"); artifactMapping.put("org.argeo.dep.osgi.tika", "org.apache.tika"); } public void run() { traverse(rootDir); } protected void traverse(File dir) { for (File file : dir.listFiles()) { String fileName = file.getName(); if (file.isDirectory() && !skipDirName(fileName)) { traverse(file); } else if (fileName.equals("pom.xml")) { processPom(file); } } } protected Boolean skipDirName(String fileName) { return fileName.equals(".svn") || fileName.equals("target") || fileName.equals("META-INF") || fileName.equals("src"); } protected void processPom(File pomFile) { try { Boolean wasChanged = false; DocumentBuilderFactory dbFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(pomFile); doc.getDocumentElement().normalize(); Element dependenciesElement = null; NodeList rootChildren = doc.getDocumentElement().getChildNodes(); for (int temp = 0; temp < rootChildren.getLength(); temp++) { Node n = rootChildren.item(temp); if (n.getNodeName().equals("dependencies")) dependenciesElement = (Element) n; } if (dependenciesElement != null) { stdOut("\n## " + pomFile); NodeList dependencyElements = dependenciesElement .getElementsByTagName("dependency"); for (int temp = 0; temp < dependencyElements.getLength(); temp++) { Element eElement = (Element) dependencyElements.item(temp); String groupId = getTagValue(eElement, "groupId"); String artifactId = getTagValue(eElement, "artifactId"); // stdOut(groupId + ":" + artifactId); String newGroupId = null; String newArtifactId = null; if (groupId.startsWith("org.argeo.dep")) { newGroupId = "org.argeo.tp"; } else if (!(groupId.startsWith("org.argeo") || groupId.startsWith("com.capco") || groupId.startsWith("com.agfa") || groupId .startsWith("org.ibboost"))) { newGroupId = "org.argeo.tp"; } if (artifactMapping.containsKey(artifactId)) { newArtifactId = artifactMapping.get(artifactId); } else if (artifactId.startsWith(SPRING_SOURCE_PREFIX) && !artifactId.equals(SPRING_SOURCE_PREFIX + ".json")) { newArtifactId = artifactId .substring(SPRING_SOURCE_PREFIX.length() + 1); } // modify if (newGroupId != null || newArtifactId != null) { if (newGroupId == null) newGroupId = groupId; if (newArtifactId == null) newArtifactId = artifactId; stdOut(groupId + ":" + artifactId + " => " + newGroupId + ":" + newArtifactId); setTagValue(eElement, "groupId", newGroupId); setTagValue(eElement, "artifactId", newArtifactId); wasChanged = true; } } } if (wasChanged) { // pomFile.renameTo(new File(pomFile.getParentFile(), // "pom-old.xml")); // save in place Source source = new DOMSource(doc); Result result = new StreamResult(pomFile); Transformer xformer = TransformerFactory.newInstance() .newTransformer(); xformer.transform(source, result); } } catch (Exception e) { throw new RuntimeException("Cannot process " + pomFile, e); } } private String getTagValue(Element eElement, String sTag) { NodeList nList = eElement.getElementsByTagName(sTag); if (nList.getLength() > 0) { NodeList nlList = nList.item(0).getChildNodes(); Node nValue = (Node) nlList.item(0); return nValue.getNodeValue(); } else return null; } private void setTagValue(Element eElement, String sTag, String value) { NodeList nList = eElement.getElementsByTagName(sTag); if (nList.getLength() > 0) { NodeList nlList = nList.item(0).getChildNodes(); Node nValue = (Node) nlList.item(0); nValue.setNodeValue(value); } } public static void stdOut(Object obj) { System.out.println(obj); } public static void main(String argv[]) { new ConvertPoms_01_03(argv[0]).run(); } }