001 package org.codehaus.mojo.license; 002 003 /* 004 * Codehaus License Maven Plugin 005 * 006 * This program is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU Lesser General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * This program is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public License 017 * along with this program. If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>. 018 */ 019 020 import org.apache.maven.model.License; 021 import org.codehaus.mojo.license.model.ProjectLicenseInfo; 022 import org.w3c.dom.Document; 023 import org.w3c.dom.Node; 024 025 import javax.xml.parsers.DocumentBuilder; 026 import javax.xml.parsers.DocumentBuilderFactory; 027 import javax.xml.parsers.ParserConfigurationException; 028 import javax.xml.transform.*; 029 import javax.xml.transform.dom.DOMSource; 030 import javax.xml.transform.stream.StreamResult; 031 import java.io.File; 032 import java.util.List; 033 034 /** 035 * A LicenseSummaryWriter. 036 * 037 * @author Paul Gier 038 * @version $Revision: 13519 $ 039 * @since 1.0 040 */ 041 public class LicenseSummaryWriter 042 { 043 public static void writeLicenseSummary( List<ProjectLicenseInfo> dependencies, File outputFile ) 044 throws ParserConfigurationException, TransformerException 045 { 046 DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); 047 DocumentBuilder parser = fact.newDocumentBuilder(); 048 Document doc = parser.newDocument(); 049 050 Node root = doc.createElement( "licenseSummary" ); 051 doc.appendChild( root ); 052 Node dependenciesNode = doc.createElement( "dependencies" ); 053 root.appendChild( dependenciesNode ); 054 055 for ( ProjectLicenseInfo dep : dependencies ) 056 { 057 dependenciesNode.appendChild( createDependencyNode( doc, dep ) ); 058 } 059 060 // Prepare the output file File 061 Result result = new StreamResult( outputFile.toURI().getPath() ); 062 063 // Write the DOM document to the file 064 Transformer xformer = TransformerFactory.newInstance().newTransformer(); 065 xformer.setOutputProperty( OutputKeys.INDENT, "yes" ); 066 xformer.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "2" ); 067 xformer.transform( new DOMSource( doc ), result ); 068 } 069 070 public static Node createDependencyNode( Document doc, ProjectLicenseInfo dep ) 071 { 072 Node depNode = doc.createElement( "dependency" ); 073 074 Node groupIdNode = doc.createElement( "groupId" ); 075 groupIdNode.appendChild( doc.createTextNode( dep.getGroupId() ) ); 076 depNode.appendChild( groupIdNode ); 077 078 Node artifactIdNode = doc.createElement( "artifactId" ); 079 artifactIdNode.appendChild( doc.createTextNode( dep.getArtifactId() ) ); 080 depNode.appendChild( artifactIdNode ); 081 082 Node versionNode = doc.createElement( "version" ); 083 versionNode.appendChild( doc.createTextNode( dep.getVersion() ) ); 084 depNode.appendChild( versionNode ); 085 086 Node licensesNode = doc.createElement( "licenses" ); 087 if ( dep.getLicenses() == null || dep.getLicenses().size() == 0 ) 088 { 089 licensesNode.appendChild( doc.createComment( "No license information available. " ) ); 090 } 091 else 092 { 093 for ( License lic : dep.getLicenses() ) 094 { 095 licensesNode.appendChild( createLicenseNode( doc, lic ) ); 096 } 097 } 098 depNode.appendChild( licensesNode ); 099 return depNode; 100 101 } 102 103 public static Node createLicenseNode( Document doc, License lic ) 104 { 105 Node licenseNode = doc.createElement( "license" ); 106 107 if ( lic.getName() != null ) 108 { 109 Node licNameNode = doc.createElement( "name" ); 110 licNameNode.appendChild( doc.createTextNode( lic.getName() ) ); 111 licenseNode.appendChild( licNameNode ); 112 } 113 114 if ( lic.getUrl() != null ) 115 { 116 Node licUrlNode = doc.createElement( "url" ); 117 licUrlNode.appendChild( doc.createTextNode( lic.getUrl() ) ); 118 licenseNode.appendChild( licUrlNode ); 119 } 120 121 if ( lic.getDistribution() != null ) 122 { 123 Node licDistNode = doc.createElement( "distribution" ); 124 licDistNode.appendChild( doc.createTextNode( lic.getDistribution() ) ); 125 licenseNode.appendChild( licDistNode ); 126 } 127 128 if ( lic.getComments() != null ) 129 { 130 Node licCommentsNode = doc.createElement( "comments" ); 131 licCommentsNode.appendChild( doc.createTextNode( lic.getComments() ) ); 132 licenseNode.appendChild( licCommentsNode ); 133 } 134 135 return licenseNode; 136 } 137 138 }