001 /* 002 * #%L 003 * License Maven Plugin 004 * $Id: LicenseSummaryReader.java 13529 2011-02-07 11:05:33Z tchemit $ 005 * $HeadURL: http://svn.codehaus.org/mojo/tags/license-maven-plugin-1.0/src/main/java/org/codehaus/mojo/license/LicenseSummaryReader.java $ 006 * 007 * %% 008 * Copyright (C) 2010 - 2011 CodeLutin, Codehaus, Tony Chemit 009 * %% 010 * This program is free software: you can redistribute it and/or modify 011 * it under the terms of the GNU Lesser General Public License as 012 * published by the Free Software Foundation, either version 3 of the 013 * License, or (at your option) any later version. 014 * 015 * This program is distributed in the hope that it will be useful, 016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 018 * GNU General Lesser Public License for more details. 019 * 020 * You should have received a copy of the GNU General Lesser Public 021 * License along with this program. If not, see 022 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 023 * #L% 024 */ 025 package org.codehaus.mojo.license; 026 027 import org.apache.maven.model.License; 028 import org.codehaus.mojo.license.model.ProjectLicenseInfo; 029 import org.w3c.dom.Document; 030 import org.w3c.dom.Element; 031 import org.w3c.dom.Node; 032 import org.w3c.dom.NodeList; 033 import org.xml.sax.SAXException; 034 035 import javax.xml.parsers.DocumentBuilder; 036 import javax.xml.parsers.DocumentBuilderFactory; 037 import javax.xml.parsers.ParserConfigurationException; 038 import java.io.IOException; 039 import java.io.InputStream; 040 import java.util.ArrayList; 041 import java.util.List; 042 043 /** 044 * A LicenseSummaryReader. 045 * 046 * @author Paul Gier 047 * @version $Revision: 13529 $ 048 * @since 1.0 049 */ 050 public class LicenseSummaryReader 051 { 052 053 /** 054 * Read a component-info.xml from an input stream into a ComponentInfo object. 055 * 056 * @param licSummaryIS Input stream containing the license data 057 * @return List of DependencyProject objects 058 * @throws IOException if there is a problem reading the InputStream 059 * @throws ParserConfigurationException if there is a problem parsing the XML stream 060 * @throws SAXException if there is a problem parsing the XML stream 061 */ 062 public static List<ProjectLicenseInfo> parseLicenseSummary( InputStream licSummaryIS ) 063 throws IOException, ParserConfigurationException, SAXException 064 { 065 List<ProjectLicenseInfo> dependencies = new ArrayList<ProjectLicenseInfo>(); 066 067 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 068 DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 069 Document doc = docBuilder.parse( licSummaryIS ); 070 071 // normalize text representation 072 doc.getDocumentElement().normalize(); 073 Element documentElement = doc.getDocumentElement(); 074 075 Node dependenciesNode = documentElement.getElementsByTagName( "dependencies" ).item( 0 ); 076 NodeList dependencyNodes = dependenciesNode.getChildNodes(); 077 078 for ( int i = 0; i < dependencyNodes.getLength(); ++i ) 079 { 080 Node dependencyNode = dependencyNodes.item( i ); 081 if ( dependencyNode.getNodeType() == Node.ELEMENT_NODE ) 082 { 083 dependencies.add( parseDependencyNode( dependencyNode ) ); 084 } 085 } 086 087 return dependencies; 088 089 } 090 091 private static ProjectLicenseInfo parseDependencyNode( Node dependencyNode ) 092 { 093 ProjectLicenseInfo dependency = new ProjectLicenseInfo(); 094 NodeList depElements = dependencyNode.getChildNodes(); 095 for ( int i = 0; i < depElements.getLength(); ++i ) 096 { 097 Node node = depElements.item( i ); 098 099 if ( node.getNodeName().equals( "groupId" ) ) 100 { 101 dependency.setGroupId( node.getTextContent() ); 102 } 103 else if ( node.getNodeName().equals( "artifactId" ) ) 104 { 105 dependency.setArtifactId( node.getTextContent() ); 106 } 107 else if ( node.getNodeName().equals( "version" ) ) 108 { 109 dependency.setVersion( node.getTextContent() ); 110 } 111 else if ( node.getNodeName().equals( "licenses" ) ) 112 { 113 NodeList licensesChildNodes = node.getChildNodes(); 114 for ( int j = 0; j < licensesChildNodes.getLength(); ++j ) 115 { 116 Node licensesChildNode = licensesChildNodes.item( j ); 117 if ( licensesChildNode.getNodeName().equals( "license" ) ) 118 { 119 License license = parseLicense( licensesChildNode ); 120 dependency.addLicense( license ); 121 } 122 } 123 } 124 } 125 return dependency; 126 } 127 128 private static License parseLicense( Node licenseNode ) 129 { 130 License license = new License(); 131 NodeList licenseElements = licenseNode.getChildNodes(); 132 for ( int i = 0; i < licenseElements.getLength(); ++i ) 133 { 134 Node node = licenseElements.item( i ); 135 if ( node.getNodeName().equals( "name" ) ) 136 { 137 license.setName( node.getTextContent() ); 138 } 139 else if ( node.getNodeName().equals( "url" ) ) 140 { 141 license.setUrl( node.getTextContent() ); 142 } 143 else if ( node.getNodeName().equals( "distribution" ) ) 144 { 145 license.setDistribution( node.getTextContent() ); 146 } 147 else if ( node.getNodeName().equals( "comments" ) ) 148 { 149 license.setComments( node.getTextContent() ); 150 } 151 } 152 return license; 153 } 154 155 }