1 package net.avcompris.devops;
2
3 import static com.google.common.base.Preconditions.checkNotNull;
4 import static com.google.common.collect.Sets.newTreeSet;
5 import static java.nio.charset.StandardCharsets.UTF_8;
6 import static org.apache.commons.lang3.StringUtils.substringBeforeLast;
7
8 import java.io.File;
9 import java.io.IOException;
10 import java.util.Collection;
11 import java.util.Comparator;
12
13 import javax.annotation.Nullable;
14 import javax.xml.transform.Transformer;
15 import javax.xml.transform.TransformerException;
16 import javax.xml.transform.TransformerFactory;
17 import javax.xml.transform.stream.StreamResult;
18 import javax.xml.transform.stream.StreamSource;
19
20 import net.avcompris.devops.Pom.DistributionManagement;
21 import net.avcompris.devops.Pom.DistributionRepository;
22 import net.avcompris.devops.Pom.Parent;
23 import net.avcompris.domdumper.Dumper;
24 import net.avcompris.domdumper.XMLDumpers;
25
26 public class PomParentsHtmlGenerator {
27
28 final Collection<Pom> poms;
29
30 public PomParentsHtmlGenerator(final Collection<Pom> poms) {
31
32 this.poms = checkNotNull(poms, "poms");
33 }
34
35 public void generateHTML(final File htmlOutFile) throws IOException, TransformerException {
36
37 checkNotNull(htmlOutFile, "htmlOutFile");
38
39 final File xmlFile = new File(htmlOutFile.getParentFile(),
40 substringBeforeLast(htmlOutFile.getName(), ".") + ".xml");
41
42 generateXML(xmlFile);
43
44 final Transformer transformer = TransformerFactory.newInstance().newTransformer(
45 new StreamSource(new File("src/main/resources", "xslt/pomParents.html.xsl")));
46
47 transformer.transform(
48 new StreamSource(xmlFile),
49 new StreamResult(htmlOutFile));
50 }
51
52 public void generateXML(final File xmlOutFile) throws IOException, TransformerException {
53
54 checkNotNull(xmlOutFile, "xmlOutFile");
55
56 final Collection<Pom> sortedPoms = newTreeSet(new Comparator<Pom>() {
57
58 @Override
59 public int compare(final Pom p1, final Pom p2) {
60
61 return p1.getArtifactId().compareTo(p2.getArtifactId());
62 }
63 });
64
65 sortedPoms.addAll(poms);
66
67 final Collection<String> sortedParentArtifactIds = newTreeSet();
68
69 final Dumper dumper = XMLDumpers.newDumper("workspace", xmlOutFile, UTF_8.name());
70
71 final Dumper projectsDumper = dumper.addElement("projects");
72
73 for (final Pom pom : sortedPoms) {
74
75 final Dumper projectDumper = projectsDumper.addElement("project");
76
77 projectDumper.addElement("artifactId").addCharacters(pom.getArtifactId());
78
79 final Parent parent = pom.getParent();
80
81 if (parent != null) {
82
83 final Dumper parentDumper = projectDumper.addElement("parent");
84
85 final String parentArtifactId = parent.getArtifactId();
86
87 parentDumper.addElement("groupId").addCharacters(parent.getGroupId());
88 parentDumper.addElement("artifactId").addCharacters(parentArtifactId);
89 parentDumper.addElement("version").addCharacters(parent.getVersion());
90
91 sortedParentArtifactIds.add(parentArtifactId);
92 }
93
94 if (!pom.isNullDistributionManagement()) {
95
96 final DistributionManagement distributionManagement = pom.getDistributionManagement();
97
98 final Dumper distributionManagementDumper = projectDumper.addElement("distributionManagement");
99
100 dump(distributionManagementDumper, distributionManagement.getSnapshotRepository());
101
102 dump(distributionManagementDumper, distributionManagement.getRepository());
103 }
104 }
105
106 final Dumper parentsDumper = dumper.addElement("parents");
107
108 for (final String parentArtifactId : sortedParentArtifactIds) {
109
110 final Dumper parentDumper = parentsDumper.addElement("parent");
111
112 parentDumper.addElement("artifactId").addCharacters(parentArtifactId);
113 }
114
115 dumper.close();
116 }
117
118 private static void dump(final Dumper dumper, @Nullable final DistributionRepository repository)
119 throws IOException {
120
121 if (repository == null) {
122 return;
123 }
124
125 final Dumper repositoryDumper = dumper.addElement(repository.getElementName());
126
127 repositoryDumper.addElement("id").addCharacters(repository.getId());
128 }
129 }