001    /*
002     * #%L
003     * License Maven Plugin
004     * 
005     * $Id: CommentStyleListMojo.java 13519 2011-02-05 09:32:50Z tchemit $
006     * $HeadURL: http://svn.codehaus.org/mojo/tags/license-maven-plugin-1.0/src/main/java/org/codehaus/mojo/license/CommentStyleListMojo.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.header.transformer.FileHeaderTransformer;
031    
032    import java.util.*;
033    
034    /**
035     * Displays all the available comment style to box file headers.
036     *
037     * @author themit <chemit@codelutin.com>
038     * @requiresProject false
039     * @requiresDirectInvocation
040     * @goal comment-style-list
041     * @since 1.0
042     */
043    public class CommentStyleListMojo
044        extends AbstractLicenseMojo
045    {
046    
047        /**
048         * A flag to display also the content of each license.
049         *
050         * @parameter expression="${detail}"
051         * @since 1.0
052         */
053        private boolean detail;
054    
055        /**
056         * All available header transformers.
057         *
058         * @component role="org.codehaus.mojo.license.header.transformer.FileHeaderTransformer"
059         * @since 1.0
060         */
061        private Map<String, FileHeaderTransformer> transformers;
062    
063        @Override
064        protected void init()
065            throws Exception
066        {
067            //nothing to do
068        }
069    
070        @Override
071        public void doAction()
072            throws MojoExecutionException, MojoFailureException
073        {
074    
075            StringBuilder buffer = new StringBuilder();
076            if ( isVerbose() )
077            {
078                buffer.append( "\n\n-------------------------------------------------------------------------------\n" );
079                buffer.append( "                           license-maven-plugin\n" );
080                buffer.append( "-------------------------------------------------------------------------------\n\n" );
081            }
082            List<String> names = new ArrayList<String>( transformers.keySet() );
083            Collections.sort( names );
084    
085            int maxLength = 0;
086            int maxDLength = 0;
087            for ( String name : names )
088            {
089                if ( name.length() > maxLength )
090                {
091                    maxLength = name.length();
092                }
093                FileHeaderTransformer transformer = transformers.get( name );
094                if ( transformer.getDescription().length() > maxDLength )
095                {
096                    maxDLength = transformer.getDescription().length();
097                }
098            }
099    
100            String pattern = "  - %1$-" + maxLength + "s : %2$-" + maxDLength + "s, extensions : %3$s\n";
101    
102            buffer.append( "List of available comment styles:\n\n" );
103            for ( String transformerName : names )
104            {
105                FileHeaderTransformer transformer = transformers.get( transformerName );
106                buffer.append( String.format( pattern, transformerName, transformer.getDescription(),
107                                              Arrays.toString( transformer.getDefaultAcceptedExtensions() ) ) );
108                if ( detail )
109                {
110                    buffer.append( "\n   example : \n" );
111                    buffer.append( transformer.boxComment( "header", true ) );
112                    buffer.append( '\n' );
113                }
114            }
115    
116            getLog().info( buffer.toString() );
117        }
118    
119        public boolean isDetail()
120        {
121            return detail;
122        }
123    
124        public void setDetail( boolean detail )
125        {
126            this.detail = detail;
127        }
128    
129        public Map<String, FileHeaderTransformer> getTransformers()
130        {
131            return transformers;
132        }
133    
134        public void setTransformers( Map<String, FileHeaderTransformer> transformers )
135        {
136            this.transformers = transformers;
137        }
138    }