001    /*
002     * #%L
003     * License Maven Plugin
004     * 
005     * $Id: LicenseListMojo.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/LicenseListMojo.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;
027    
028    import org.apache.maven.plugin.MojoExecutionException;
029    import org.apache.maven.plugin.MojoFailureException;
030    import org.codehaus.mojo.license.model.License;
031    import org.codehaus.mojo.license.model.LicenseStore;
032    
033    import java.io.IOException;
034    import java.util.Arrays;
035    import java.util.Collections;
036    import java.util.List;
037    
038    /**
039     * Display all available licenses.
040     *
041     * @author tchemit <chemit@codelutin.com>
042     * @goal license-list
043     * @requiresProject false
044     * @requiresDirectInvocation
045     * @since 1.0
046     */
047    public class LicenseListMojo
048        extends AbstractLicenseMojo
049    {
050    
051        /**
052         * the url of an extra license repository.
053         *
054         * @parameter expression="${extraResolver}"
055         * @since 1.0
056         */
057        private String extraResolver;
058    
059        /**
060         * A flag to display also the content of each license.
061         *
062         * @parameter expression="${detail}"
063         * @since 1.0
064         */
065        private boolean detail;
066    
067        /**
068         * store of licenses
069         */
070        protected LicenseStore licenseStore;
071    
072        @Override
073        protected void init()
074            throws Exception
075        {
076    
077            // obtain licenses store
078            licenseStore = LicenseStore.createLicenseStore( getLog(), getExtraResolver() );
079        }
080    
081        @Override
082        public void doAction()
083            throws MojoExecutionException, MojoFailureException
084        {
085            StringBuilder buffer = new StringBuilder();
086    
087            if ( isVerbose() )
088            {
089                buffer.append( "\n\n-------------------------------------------------------------------------------\n" );
090                buffer.append( "                           maven-license-plugin\n" );
091                buffer.append( "-------------------------------------------------------------------------------\n\n" );
092            }
093            buffer.append( "Available licenses :\n\n" );
094    
095            List<String> names = Arrays.asList( licenseStore.getLicenseNames() );
096    
097            int maxLength = 0;
098            for ( String name : names )
099            {
100                if ( name.length() > maxLength )
101                {
102                    maxLength = name.length();
103                }
104            }
105            Collections.sort( names );
106    
107            String pattern = " * %1$-" + maxLength + "s : %2$s\n";
108            for ( String licenseName : names )
109            {
110                License license = licenseStore.getLicense( licenseName );
111                buffer.append( String.format( pattern, licenseName, license.getDescription() ) );
112                if ( isDetail() )
113                {
114                    try
115                    {
116                        buffer.append( "\n" );
117                        buffer.append( license.getHeaderContent( getEncoding() ) );
118                        buffer.append( "\n\n" );
119                    }
120                    catch ( IOException ex )
121                    {
122                        throw new MojoExecutionException(
123                            "could not instanciate license with name " + licenseName + " for reason " + ex.getMessage(),
124                            ex );
125                    }
126                }
127            }
128            getLog().info( buffer.toString() );
129        }
130    
131        public String getExtraResolver()
132        {
133            return extraResolver;
134        }
135    
136        public boolean isDetail()
137        {
138            return detail;
139        }
140    
141        public void setExtraResolver( String extraResolver )
142        {
143            this.extraResolver = extraResolver;
144        }
145    
146        public void setDetail( boolean detail )
147        {
148            this.detail = detail;
149        }
150    }