001 /* 002 * #%L 003 * License Maven Plugin 004 * 005 * $Id: LicenseStore.java 13616 2011-02-14 11:38:39Z tchemit $ 006 * $HeadURL: http://svn.codehaus.org/mojo/tags/license-maven-plugin-1.0/src/main/java/org/codehaus/mojo/license/model/LicenseStore.java $ 007 * %% 008 * Copyright (C) 2008 - 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 026 package org.codehaus.mojo.license.model; 027 028 import org.apache.commons.lang.StringUtils; 029 import org.apache.commons.logging.Log; 030 import org.apache.commons.logging.LogFactory; 031 import org.apache.maven.plugin.MojoExecutionException; 032 033 import java.io.IOException; 034 import java.net.URL; 035 import java.util.ArrayList; 036 import java.util.Iterator; 037 import java.util.List; 038 039 /** 040 * The {@code LicenseStore} offers {@link License} coming from different {@link 041 * LicenseRepository}. 042 * 043 * @author tchemit <chemit@codelutin.com> 044 * @since 1.0 045 */ 046 public class LicenseStore 047 implements Iterable<LicenseRepository> 048 { 049 050 /** 051 * Logger 052 */ 053 private static final Log log = LogFactory.getLog( LicenseStore.class ); 054 055 /** 056 * class-path directory where is the licenses repository 057 */ 058 public static final String JAR_LICENSE_REPOSITORY = "/META-INF/licenses"; 059 060 /** 061 * list of available license repositories 062 */ 063 protected List<LicenseRepository> repositories; 064 065 /** 066 * flag to know if store was init 067 */ 068 protected boolean init; 069 070 public static LicenseStore createLicenseStore( org.apache.maven.plugin.logging.Log log, String... extraResolver ) 071 throws MojoExecutionException 072 { 073 LicenseStore store; 074 try 075 { 076 store = new LicenseStore(); 077 store.addJarRepository(); 078 if ( extraResolver != null ) 079 { 080 for ( String s : extraResolver ) 081 { 082 if ( StringUtils.isNotEmpty( s ) ) 083 { 084 log.info( "adding extra resolver " + s ); 085 store.addRepository( s ); 086 } 087 } 088 } 089 store.init(); 090 } 091 catch ( IllegalArgumentException ex ) 092 { 093 throw new MojoExecutionException( "could not obtain the license repository", ex ); 094 } 095 catch ( IOException ex ) 096 { 097 throw new MojoExecutionException( "could not obtain the license repository", ex ); 098 } 099 return store; 100 } 101 102 public void init() 103 throws IOException 104 { 105 checkNotInit( "init" ); 106 try 107 { 108 if ( repositories == null ) 109 { 110 // adding the default class-path repository 111 addJarRepository(); 112 } 113 for ( LicenseRepository r : this ) 114 { 115 r.load(); 116 } 117 } 118 finally 119 { 120 init = true; 121 } 122 } 123 124 public List<LicenseRepository> getRepositories() 125 { 126 return repositories; 127 } 128 129 public String[] getLicenseNames() 130 { 131 checkInit( "getLicenseNames" ); 132 List<String> result = new ArrayList<String>(); 133 for ( LicenseRepository repository : this ) 134 { 135 for ( License license : repository ) 136 { 137 result.add( license.getName() ); 138 } 139 } 140 return result.toArray( new String[result.size()] ); 141 } 142 143 public License[] getLicenses() 144 { 145 checkInit( "getLicenses" ); 146 List<License> result = new ArrayList<License>(); 147 if ( repositories != null ) 148 { 149 for ( LicenseRepository repository : this ) 150 { 151 for ( License license : repository ) 152 { 153 result.add( license ); 154 } 155 } 156 } 157 return result.toArray( new License[result.size()] ); 158 } 159 160 public License getLicense( String licenseName ) 161 { 162 checkInit( "getLicense" ); 163 Iterator<LicenseRepository> itr = iterator(); 164 License result = null; 165 while ( itr.hasNext() ) 166 { 167 LicenseRepository licenseRepository = itr.next(); 168 License license = licenseRepository.getLicense( licenseName ); 169 if ( license != null ) 170 { 171 result = license; 172 break; 173 } 174 } 175 if ( result == null && log.isDebugEnabled() ) 176 { 177 log.debug( "could not find license named '" + licenseName + "'" ); 178 } 179 return result; 180 } 181 182 public void addRepository( String extraResolver ) 183 throws IOException 184 { 185 addRepository( new URL( extraResolver ) ); 186 } 187 188 public void addRepository( URL baseURL ) 189 throws IOException 190 { 191 checkNotInit( "addRepository" ); 192 LicenseRepository repository = new LicenseRepository(); 193 repository.setBaseURL( baseURL ); 194 if ( log.isDebugEnabled() ) 195 { 196 log.debug( "Adding a license repository " + repository ); 197 } 198 addRepository( repository ); 199 } 200 201 public void addJarRepository() 202 throws IOException 203 { 204 checkNotInit( "addJarRepository" ); 205 URL baseURL = getClass().getResource( JAR_LICENSE_REPOSITORY ); 206 LicenseRepository repository = new LicenseRepository(); 207 repository.setBaseURL( baseURL ); 208 if ( log.isDebugEnabled() ) 209 { 210 log.debug( "Adding a jar license repository " + repository ); 211 } 212 addRepository( repository ); 213 } 214 215 public Iterator<LicenseRepository> iterator() 216 { 217 return getRepositories().iterator(); 218 } 219 220 protected void addRepository( LicenseRepository repository ) 221 { 222 checkNotInit( "addRepository" ); 223 if ( repositories == null ) 224 { 225 repositories = new ArrayList<LicenseRepository>(); 226 227 } 228 if ( log.isInfoEnabled() ) 229 { 230 log.info( "Adding a license repository " + repository.getBaseURL() ); 231 } 232 repositories.add( repository ); 233 } 234 235 protected void checkInit( String operation ) 236 throws IllegalStateException 237 { 238 if ( !init ) 239 { 240 throw new IllegalStateException( "store was not init, operation [" + operation + "] not possible." ); 241 } 242 } 243 244 protected void checkNotInit( String operation ) 245 throws IllegalStateException 246 { 247 if ( init ) 248 { 249 throw new IllegalStateException( "store was init, operation [" + operation + "+] not possible." ); 250 } 251 } 252 }