Coverage Report - org.apache.maven.plugin.doap.HelpMojo
 
Classes in this File Line Coverage Branch Coverage Complexity
HelpMojo
0 %
0/104
0 %
0/50
4
 
 1  
 package org.apache.maven.plugin.doap;
 2  
 
 3  
 import java.util.ArrayList;
 4  
 import java.util.Iterator;
 5  
 import java.util.List;
 6  
 
 7  
 import org.apache.maven.plugin.AbstractMojo;
 8  
 import org.apache.maven.plugin.MojoExecutionException;
 9  
 
 10  
 /**
 11  
  * Display help information on maven-doap-plugin. Call <pre>  mvn doap:help -Ddetail=true -Dgoal=&lt;goal-name&gt;</pre> to display parameter details.
 12  
  *
 13  
  * @version generated on Mon Jul 28 18:57:39 EDT 2008
 14  
  * @goal help
 15  
  * @requiresProject false
 16  
  */
 17  0
 public class HelpMojo
 18  
     extends AbstractMojo
 19  
 {
 20  
     /**
 21  
      * If <code>true</code>, display all settable properties for each goal.
 22  
      * 
 23  
      * @parameter expression="${detail}" default-value="false"
 24  
      */
 25  
     private boolean detail;
 26  
 
 27  
     /**
 28  
      * The name of the goal for which to show help. If unspecified, all goals will be displayed.
 29  
      * 
 30  
      * @parameter expression="${goal}"
 31  
      */
 32  
     private java.lang.String goal;
 33  
 
 34  
     /**
 35  
      * The maximum length of a display line.
 36  
      * 
 37  
      * @parameter expression="${lineLength}" default-value="80"
 38  
      */
 39  
     private int lineLength;
 40  
 
 41  
     /**
 42  
      * The number of spaces per indentation level.
 43  
      * 
 44  
      * @parameter expression="${indentSize}" default-value="2"
 45  
      */
 46  
     private int indentSize;
 47  
 
 48  
 
 49  
     /** {@inheritDoc} */
 50  
     public void execute()
 51  
         throws MojoExecutionException
 52  
     {
 53  0
         StringBuffer sb = new StringBuffer();
 54  
 
 55  0
         append( sb, "org.apache.maven.plugins:maven-doap-plugin:1.0", 0 );
 56  0
         append( sb, "", 0 );
 57  
 
 58  0
         append( sb, "Maven DOAP Plugin 1.0", 0 );
 59  0
         append( sb, "Plugins which generate a DOAP file from information in a POM.", 1 );
 60  0
         append( sb, "", 0 );
 61  
 
 62  0
         if ( goal == null || goal.length() <= 0 )
 63  
         {
 64  0
             append( sb, "This plugin has 2 goals:", 0 );
 65  0
             append( sb, "", 0 );
 66  
         }
 67  
 
 68  0
         if ( goal == null || goal.length() <= 0 || "generate".equals( goal ) )
 69  
         {
 70  0
             append( sb, "doap:generate", 0 );
 71  0
             append( sb, "Generate a Description of a Project (DOAP) file from the main information found in a POM.\nNote: The generated file is tailored for use by projects at Apache.", 1 );
 72  0
             append( sb, "", 0 );
 73  0
             if ( detail )
 74  
             {
 75  0
                 append( sb, "Available parameters:", 1 );
 76  0
                 append( sb, "", 0 );
 77  
 
 78  0
                 append( sb, "about (Default: ${project.url})", 2 );
 79  0
                 append( sb, "The about URI-reference which should be displayed in the DOAP file. Example:\n<rdf:RDF>\n\u00a0\u00a0<Project\u00a0rdf:about=\'http://maven.apache.org/\'>\n\u00a0\u00a0...\n\u00a0\u00a0</Project>\n</rdf:RDF>\nSee http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/#aboutAttr\n", 3 );
 80  0
                 append( sb, "", 0 );
 81  
 
 82  0
                 append( sb, "asfExtOptions", 2 );
 83  0
                 append( sb, "Specific ASF extensions parameters, i.e. options that POM doesn\'t have any notions but required by ASF DOAP requirements.\nExample:\n<asfExtOptions>\n\u00a0\u00a0<included>true</included>\n\u00a0\u00a0<charter>The\u00a0mission\u00a0of\u00a0the\u00a0Apache\u00a0XXX\u00a0project\u00a0is\u00a0to\u00a0create\u00a0and\u00a0maintain\u00a0software\n\u00a0\u00a0libraries\u00a0that\u00a0provide\u00a0...</charter>\n\u00a0\u00a0...\n</asfExtOptions>\nNote: By default, asfExtOptions/included is set to true to include the ASF extensions.\nSee Javadoc\n", 3 );
 84  0
                 append( sb, "", 0 );
 85  
 
 86  0
                 append( sb, "category", 2 );
 87  0
                 append( sb, "The category which should be displayed in the DOAP file.", 3 );
 88  0
                 append( sb, "", 0 );
 89  
 
 90  0
                 append( sb, "doapFile (Default: ${project.reporting.outputDirectory}/doap_${project.artifactId}.rdf)", 2 );
 91  0
                 append( sb, "The name of the DOAP file that will be generated.", 3 );
 92  0
                 append( sb, "", 0 );
 93  
 
 94  0
                 append( sb, "doapOptions", 2 );
 95  0
                 append( sb, "Specific DOAP parameters, i.e. options that POM doesn\'t have any notions.\nExample:\n<doapOptions>\n\u00a0\u00a0<programmingLanguage>java</programmingLanguage>\n</doapOptions>\n\nSee Javadoc\n", 3 );
 96  0
                 append( sb, "", 0 );
 97  
 
 98  0
                 append( sb, "lang (Default: en)", 2 );
 99  0
                 append( sb, "The value for the xml:lang attribute used by the <rdf:RDF/>, <description/> and <shortdesc/> elements.\nPOM doesn\'t have any notions about language.\nSee http://www.w3.org/TR/REC-xml/#sec-lang-tag\n", 3 );
 100  0
                 append( sb, "", 0 );
 101  
 
 102  0
                 append( sb, "language", 2 );
 103  0
                 append( sb, "The programming language which should be displayed in the DOAP file.", 3 );
 104  0
                 append( sb, "", 0 );
 105  
 
 106  0
                 append( sb, "project", 2 );
 107  0
                 append( sb, "The POM from which information will be extracted to create a DOAP file.", 3 );
 108  0
                 append( sb, "", 0 );
 109  
             }
 110  
         }
 111  
 
 112  0
         if ( goal == null || goal.length() <= 0 || "help".equals( goal ) )
 113  
         {
 114  0
             append( sb, "doap:help", 0 );
 115  0
             append( sb, "Display help information on maven-doap-plugin. Call\n\u00a0\u00a0mvn\u00a0doap:help\u00a0-Ddetail=true\u00a0-Dgoal=<goal-name>\nto display parameter details.", 1 );
 116  0
             append( sb, "", 0 );
 117  0
             if ( detail )
 118  
             {
 119  0
                 append( sb, "Available parameters:", 1 );
 120  0
                 append( sb, "", 0 );
 121  
 
 122  0
                 append( sb, "detail (Default: false)", 2 );
 123  0
                 append( sb, "If true, display all settable properties for each goal.", 3 );
 124  0
                 append( sb, "", 0 );
 125  
 
 126  0
                 append( sb, "goal", 2 );
 127  0
                 append( sb, "The name of the goal for which to show help. If unspecified, all goals will be displayed.", 3 );
 128  0
                 append( sb, "", 0 );
 129  
 
 130  0
                 append( sb, "lineLength (Default: 80)", 2 );
 131  0
                 append( sb, "The maximum length of a display line.", 3 );
 132  0
                 append( sb, "", 0 );
 133  
 
 134  0
                 append( sb, "indentSize (Default: 2)", 2 );
 135  0
                 append( sb, "The number of spaces per indentation level.", 3 );
 136  0
                 append( sb, "", 0 );
 137  
             }
 138  
         }
 139  
 
 140  0
         if ( getLog().isInfoEnabled() )
 141  
         {
 142  0
             getLog().info( sb.toString() );
 143  
         }
 144  0
     }
 145  
 
 146  
     /**
 147  
      * <p>Repeat a String <code>n</code> times to form a new string.</p>
 148  
      *
 149  
      * @param str String to repeat
 150  
      * @param repeat number of times to repeat str
 151  
      * @return String with repeated String
 152  
      * @throws NegativeArraySizeException if <code>repeat < 0</code>
 153  
      * @throws NullPointerException if str is <code>null</code>
 154  
      */
 155  
     private static String repeat( String str, int repeat )
 156  
     {
 157  0
         StringBuffer buffer = new StringBuffer( repeat * str.length() );
 158  
 
 159  0
         for ( int i = 0; i < repeat; i++ )
 160  
         {
 161  0
             buffer.append( str );
 162  
         }
 163  
 
 164  0
         return buffer.toString();
 165  
     }
 166  
 
 167  
     private void append( StringBuffer sb, String description, int indent )
 168  
     {
 169  0
         for ( Iterator it = toLines( description, indent ).iterator(); it.hasNext(); )
 170  
         {
 171  0
             sb.append( it.next().toString() ).append( '\n' );
 172  
         }
 173  0
     }
 174  
 
 175  
     /** 
 176  
      * Splits the specified text into lines of convenient display length.
 177  
      * 
 178  
      * @param text The text to split into lines, must not be <code>null</code>.
 179  
      * @param indent The base indentation level of each line, must not be negative.
 180  
      * @return The sequence of display lines, never <code>null</code>.
 181  
      */
 182  
     private List toLines( String text, int indent )
 183  
     {
 184  0
         List lines = new ArrayList();
 185  
 
 186  0
         String ind = repeat( "\t", indent );
 187  0
         String[] plainLines = text.split( "(\r\n)|(\r)|(\n)" );
 188  0
         for ( int i = 0; i < plainLines.length; i++ )
 189  
         {
 190  0
             toLines( lines, ind + plainLines[i] );
 191  
         }
 192  
 
 193  0
         return lines;
 194  
     }
 195  
 
 196  
     /** 
 197  
      * Adds the specified line to the output sequence, performing line wrapping if necessary.
 198  
      * 
 199  
      * @param lines The sequence of display lines, must not be <code>null</code>.
 200  
      * @param line The line to add, must not be <code>null</code>.
 201  
      */
 202  
     private void toLines( List lines, String line )
 203  
     {
 204  0
         int lineIndent = getIndentLevel( line );
 205  0
         StringBuffer buf = new StringBuffer( 256 );
 206  0
         String[] tokens = line.split( " +" );
 207  0
         for ( int i = 0; i < tokens.length; i++ )
 208  
         {
 209  0
             String token = tokens[i];
 210  0
             if ( i > 0 )
 211  
             {
 212  0
                 if ( buf.length() + token.length() >= lineLength )
 213  
                 {
 214  0
                     lines.add( buf.toString() );
 215  0
                     buf.setLength( 0 );
 216  0
                     buf.append( repeat( " ", lineIndent * indentSize ) );
 217  
                 }
 218  
                 else
 219  
                 {
 220  0
                     buf.append( ' ' );
 221  
                 }
 222  
             }
 223  0
             for ( int j = 0; j < token.length(); j++ )
 224  
             {
 225  0
                 char c = token.charAt( j );
 226  0
                 if ( c == '\t' )
 227  
                 {
 228  0
                     buf.append( repeat( " ", indentSize - buf.length() % indentSize ) );
 229  
                 }
 230  0
                 else if ( c == '\u00A0' )
 231  
                 {
 232  0
                     buf.append( ' ' );
 233  
                 }
 234  
                 else
 235  
                 {
 236  0
                     buf.append( c );
 237  
                 }
 238  
             }
 239  
         }
 240  0
         lines.add( buf.toString() );
 241  0
     }
 242  
 
 243  
     /** 
 244  
      * Gets the indentation level of the specified line.
 245  
      * 
 246  
      * @param line The line whose indentation level should be retrieved, must not be <code>null</code>.
 247  
      * @return The indentation level of the line.
 248  
      */
 249  
     private static int getIndentLevel( String line )
 250  
     {
 251  0
         int level = 0;
 252  0
         for ( int i = 0; i < line.length() && line.charAt( i ) == '\t'; i++ )
 253  
         {
 254  0
             level++;
 255  
         }
 256  0
         for ( int i = level + 1; i <= level + 4 && i < line.length(); i++ )
 257  
         {
 258  0
             if ( line.charAt( i ) == '\t' )
 259  
             {
 260  0
                 level++;
 261  0
                 break;
 262  
             }
 263  
         }
 264  0
         return level;
 265  
     }
 266  
 }