View Javadoc
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 }