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