X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.repo%2Fsrc%2Forg%2Fargeo%2Fslc%2Frepo%2Fmaven%2FConvertPoms_01_03.java;fp=org.argeo.slc.repo%2Fsrc%2Forg%2Fargeo%2Fslc%2Frepo%2Fmaven%2FConvertPoms_01_03.java;h=d46375e1dfad1e9214d3128d22872084e446edb3;hb=825d60c5348dbe3f5be25b0bccf7bdebfe694219;hp=0000000000000000000000000000000000000000;hpb=5e991fff5cba01858dcc5747a27e637325bc5c8e;p=gpl%2Fargeo-jcr.git diff --git a/org.argeo.slc.repo/src/org/argeo/slc/repo/maven/ConvertPoms_01_03.java b/org.argeo.slc.repo/src/org/argeo/slc/repo/maven/ConvertPoms_01_03.java new file mode 100644 index 0000000..d46375e --- /dev/null +++ b/org.argeo.slc.repo/src/org/argeo/slc/repo/maven/ConvertPoms_01_03.java @@ -0,0 +1,211 @@ +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(); + } + +}