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 import org.apache.maven.model.License;
019 import org.codehaus.mojo.license.model.ProjectLicenseInfo;
020 import org.w3c.dom.Document;
021 import org.w3c.dom.Element;
022 import org.w3c.dom.Node;
023 import org.w3c.dom.NodeList;
024 import org.xml.sax.SAXException;
025
026 import javax.xml.parsers.DocumentBuilder;
027 import javax.xml.parsers.DocumentBuilderFactory;
028 import javax.xml.parsers.ParserConfigurationException;
029 import java.io.IOException;
030 import java.io.InputStream;
031 import java.util.ArrayList;
032 import java.util.List;
033
034 /**
035 * A LicenseSummaryReader.
036 *
037 * @author Paul Gier
038 * @version $Revision: 13529 $
039 * @since 1.0
040 */
041 public class LicenseSummaryReader
042 {
043
044 /**
045 * Read a component-info.xml from an input stream into a ComponentInfo object.
046 *
047 * @param licSummaryIS Input stream containing the license data
048 * @return List of DependencyProject objects
049 * @throws IOException if there is a problem reading the InputStream
050 * @throws ParserConfigurationException if there is a problem parsing the XML stream
051 * @throws SAXException if there is a problem parsing the XML stream
052 */
053 public static List<ProjectLicenseInfo> parseLicenseSummary( InputStream licSummaryIS )
054 throws IOException, ParserConfigurationException, SAXException
055 {
056 List<ProjectLicenseInfo> dependencies = new ArrayList<ProjectLicenseInfo>();
057
058 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
059 DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
060 Document doc = docBuilder.parse( licSummaryIS );
061
062 // normalize text representation
063 doc.getDocumentElement().normalize();
064 Element documentElement = doc.getDocumentElement();
065
066 Node dependenciesNode = documentElement.getElementsByTagName( "dependencies" ).item( 0 );
067 NodeList dependencyNodes = dependenciesNode.getChildNodes();
068
069 for ( int i = 0; i < dependencyNodes.getLength(); ++i )
070 {
071 Node dependencyNode = dependencyNodes.item( i );
072 if ( dependencyNode.getNodeType() == Node.ELEMENT_NODE )
073 {
074 dependencies.add( parseDependencyNode( dependencyNode ) );
075 }
076 }
077
078 return dependencies;
079
080 }
081
082 private static ProjectLicenseInfo parseDependencyNode( Node dependencyNode )
083 {
084 ProjectLicenseInfo dependency = new ProjectLicenseInfo();
085 NodeList depElements = dependencyNode.getChildNodes();
086 for ( int i = 0; i < depElements.getLength(); ++i )
087 {
088 Node node = depElements.item( i );
089
090 if ( node.getNodeName().equals( "groupId" ) )
091 {
092 dependency.setGroupId( node.getTextContent() );
093 }
094 else if ( node.getNodeName().equals( "artifactId" ) )
095 {
096 dependency.setArtifactId( node.getTextContent() );
097 }
098 else if ( node.getNodeName().equals( "version" ) )
099 {
100 dependency.setVersion( node.getTextContent() );
101 }
102 else if ( node.getNodeName().equals( "licenses" ) )
103 {
104 NodeList licensesChildNodes = node.getChildNodes();
105 for ( int j = 0; j < licensesChildNodes.getLength(); ++j )
106 {
107 Node licensesChildNode = licensesChildNodes.item( j );
108 if ( licensesChildNode.getNodeName().equals( "license" ) )
109 {
110 License license = parseLicense( licensesChildNode );
111 dependency.addLicense( license );
112 }
113 }
114 }
115 }
116 return dependency;
117 }
118
119 private static License parseLicense( Node licenseNode )
120 {
121 License license = new License();
122 NodeList licenseElements = licenseNode.getChildNodes();
123 for ( int i = 0; i < licenseElements.getLength(); ++i )
124 {
125 Node node = licenseElements.item( i );
126 if ( node.getNodeName().equals( "name" ) )
127 {
128 license.setName( node.getTextContent() );
129 }
130 else if ( node.getNodeName().equals( "url" ) )
131 {
132 license.setUrl( node.getTextContent() );
133 }
134 else if ( node.getNodeName().equals( "distribution" ) )
135 {
136 license.setDistribution( node.getTextContent() );
137 }
138 else if ( node.getNodeName().equals( "comments" ) )
139 {
140 license.setComments( node.getTextContent() );
141 }
142 }
143 return license;
144 }
145
146 }