Coverage Report - org.apache.tomcat.maven.plugin.tomcat7.AbstractCatalinaMojo
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractCatalinaMojo
0 %
0/38
0 %
0/16
2,857
 
 1  
 package org.apache.tomcat.maven.plugin.tomcat7;
 2  
 
 3  
 /*
 4  
  * Licensed to the Apache Software Foundation (ASF) under one
 5  
  * or more contributor license agreements.  See the NOTICE file
 6  
  * distributed with this work for additional information
 7  
  * regarding copyright ownership.  The ASF licenses this file
 8  
  * to you under the Apache License, Version 2.0 (the
 9  
  * "License"); you may not use this file except in compliance
 10  
  * with the License.  You may obtain a copy of the License at
 11  
  *
 12  
  *   http://www.apache.org/licenses/LICENSE-2.0
 13  
  *
 14  
  * Unless required by applicable law or agreed to in writing,
 15  
  * software distributed under the License is distributed on an
 16  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 17  
  * KIND, either express or implied.  See the License for the
 18  
  * specific language governing permissions and limitations
 19  
  * under the License.
 20  
  */
 21  
 
 22  
 import org.apache.maven.artifact.manager.WagonManager;
 23  
 import org.apache.maven.plugin.MojoExecutionException;
 24  
 import org.apache.maven.plugins.annotations.Component;
 25  
 import org.apache.maven.plugins.annotations.Parameter;
 26  
 import org.apache.maven.wagon.authentication.AuthenticationInfo;
 27  
 import org.apache.tomcat.maven.common.deployer.TomcatManager;
 28  
 import org.apache.tomcat.maven.common.deployer.TomcatManagerException;
 29  
 import org.codehaus.plexus.util.StringUtils;
 30  
 
 31  
 import java.io.IOException;
 32  
 import java.net.MalformedURLException;
 33  
 import java.net.URL;
 34  
 import java.util.StringTokenizer;
 35  
 
 36  
 /**
 37  
  * Abstract goal that provides common configuration for Catalina-based goals.
 38  
  *
 39  
  * @author Mark Hobson <markhobson@gmail.com>
 40  
  */
 41  0
 public abstract class AbstractCatalinaMojo
 42  
     extends AbstractTomcat7Mojo
 43  
 {
 44  
     // ----------------------------------------------------------------------
 45  
     // Constants
 46  
     // ----------------------------------------------------------------------
 47  
 
 48  
     /**
 49  
      * The name of this Maven plugin. Used to produce the user agent when communicating with Tomcat manager.
 50  
      */
 51  0
     private String name = "Apache Tomcat Maven Plugin";
 52  
 
 53  
     /**
 54  
      * The default username to use when authenticating with Tomcat manager.
 55  
      */
 56  
     private static final String DEFAULT_USERNAME = "admin";
 57  
 
 58  
     /**
 59  
      * The default password to use when authenticating with Tomcat manager.
 60  
      */
 61  
     private static final String DEFAULT_PASSWORD = "";
 62  
 
 63  
     // ----------------------------------------------------------------------
 64  
     // Mojo Parameters
 65  
     // ----------------------------------------------------------------------
 66  
 
 67  
     /**
 68  
      * The Maven Wagon manager to use when obtaining server authentication details.
 69  
      */
 70  
     @Component
 71  
     private WagonManager wagonManager;
 72  
 
 73  
     /**
 74  
      * The full URL of the Tomcat manager instance to use.
 75  
      */
 76  
     @Parameter( property = "maven.tomcat.url", defaultValue = "http://localhost:8080/manager/html", required = true )
 77  
     private URL url;
 78  
 
 79  
     /**
 80  
      * The server id in settings.xml to use when authenticating with Tomcat manager, or <code>null</code> to use
 81  
      * defaults of username <code>admin</code> and no password.
 82  
      */
 83  
     @Parameter( property = "maven.tomcat.server" )
 84  
     private String server;
 85  
 
 86  
     /**
 87  
      * The URL encoding charset to use when communicating with Tomcat manager.
 88  
      */
 89  
     @Parameter( property = "maven.tomcat.charset", defaultValue = "ISO-8859-1", required = true )
 90  
     private String charset;
 91  
 
 92  
     /**
 93  
      * The tomcat username to use for deployment
 94  
      *
 95  
      * @since 1.0-alpha-2
 96  
      */
 97  
     @Parameter( property = "tomcat.username" )
 98  
     private String username;
 99  
 
 100  
     /**
 101  
      * The password to use for deployment
 102  
      *
 103  
      * @since 1.0-alpha-2
 104  
      */
 105  
     @Parameter( property = "tomcat.password" )
 106  
     private String password;
 107  
 
 108  
     @Parameter( defaultValue = "${plugin.version}", required = true, readonly = true )
 109  
     private String version;
 110  
 
 111  
     // ----------------------------------------------------------------------
 112  
     // Fields
 113  
     // ----------------------------------------------------------------------
 114  
 
 115  
     /**
 116  
      * The Tomcat manager wrapper object.
 117  
      */
 118  
     private TomcatManager manager;
 119  
 
 120  
     // ----------------------------------------------------------------------
 121  
     // Mojo Implementation
 122  
     // ----------------------------------------------------------------------
 123  
 
 124  
     /**
 125  
      * {@inheritDoc}
 126  
      */
 127  
     public void execute()
 128  
         throws MojoExecutionException
 129  
     {
 130  
         try
 131  
         {
 132  0
             invokeManager();
 133  
         }
 134  0
         catch ( TomcatManagerException exception )
 135  
         {
 136  0
             throw new MojoExecutionException(
 137  
                 messagesProvider.getMessage( "AbstractCatalinaMojo.managerError", exception.getMessage() ) );
 138  
         }
 139  0
         catch ( IOException exception )
 140  
         {
 141  0
             throw new MojoExecutionException( messagesProvider.getMessage( "AbstractCatalinaMojo.managerIOError" ),
 142  
                                               exception );
 143  0
         }
 144  0
     }
 145  
 
 146  
     // ----------------------------------------------------------------------
 147  
     // Protected Methods
 148  
     // ----------------------------------------------------------------------
 149  
 
 150  
     /**
 151  
      * Invokes Tomcat manager when this Mojo is executed.
 152  
      *
 153  
      * @throws org.apache.maven.plugin.MojoExecutionException
 154  
      *                             if there was a problem executing this goal
 155  
      * @throws org.apache.tomcat.maven.common.deployer.TomcatManagerException
 156  
      *                             if the Tomcat manager request fails
 157  
      * @throws java.io.IOException if an i/o error occurs
 158  
      */
 159  
     protected abstract void invokeManager()
 160  
         throws MojoExecutionException, TomcatManagerException, IOException;
 161  
 
 162  
     /**
 163  
      * Gets the Tomcat manager wrapper object configured for this goal.
 164  
      *
 165  
      * @return the Tomcat manager wrapper object
 166  
      * @throws org.apache.maven.plugin.MojoExecutionException
 167  
      *          if there was a problem obtaining the authentication details
 168  
      */
 169  
     protected TomcatManager getManager()
 170  
         throws MojoExecutionException
 171  
     {
 172  
         // lazily instantiate when config values have been injected
 173  0
         if ( manager == null )
 174  
         {
 175  
             String userName;
 176  
             String password;
 177  
 
 178  0
             if ( server == null )
 179  
             {
 180  
                 // no server set, use defaults
 181  0
                 getLog().debug( messagesProvider.getMessage( "AbstractCatalinaMojo.defaultAuth" ) );
 182  0
                 userName = DEFAULT_USERNAME;
 183  0
                 password = DEFAULT_PASSWORD;
 184  
             }
 185  
             else
 186  
             {
 187  
                 // obtain authenication details for specified server from wagon
 188  0
                 AuthenticationInfo info = wagonManager.getAuthenticationInfo( server );
 189  0
                 if ( info == null )
 190  
                 {
 191  0
                     throw new MojoExecutionException(
 192  
                         messagesProvider.getMessage( "AbstractCatalinaMojo.unknownServer", server ) );
 193  
                 }
 194  
 
 195  
                 // derive username
 196  0
                 userName = info.getUserName();
 197  0
                 if ( userName == null )
 198  
                 {
 199  0
                     getLog().debug( messagesProvider.getMessage( "AbstractCatalinaMojo.defaultUserName" ) );
 200  0
                     userName = DEFAULT_USERNAME;
 201  
                 }
 202  
 
 203  
                 // derive password
 204  0
                 password = info.getPassword();
 205  0
                 if ( password == null )
 206  
                 {
 207  0
                     getLog().debug( messagesProvider.getMessage( "AbstractCatalinaMojo.defaultPassword" ) );
 208  0
                     password = DEFAULT_PASSWORD;
 209  
                 }
 210  
             }
 211  
 
 212  
             // if userName/password are defined in the mojo or the cli they override
 213  0
             if ( !StringUtils.isEmpty( this.username ) )
 214  
             {
 215  0
                 userName = this.username;
 216  0
                 password = this.password == null ? "" : this.password;
 217  
             }
 218  
 
 219  0
             manager = new TomcatManager( url, userName, password, charset );
 220  0
             manager.setUserAgent( name + "/" + version );
 221  
         }
 222  
 
 223  0
         return manager;
 224  
     }
 225  
 
 226  
     /**
 227  
      * Gets the full URL of the Tomcat manager instance.
 228  
      *
 229  
      * @return the full URL of the Tomcat manager instance to use
 230  
      */
 231  
     protected URL getURL()
 232  
     {
 233  0
         return url;
 234  
     }
 235  
 
 236  
     /**
 237  
      * Gets the webapp context path to use when communicating with Tomcat manager.
 238  
      *
 239  
      * @return the webapp context path to use
 240  
      */
 241  
     protected String getPath()
 242  
     {
 243  0
         return path;
 244  
     }
 245  
 
 246  
     /**
 247  
      * Gets the URL of the deployed webapp.
 248  
      *
 249  
      * @return the URL of the deployed webapp
 250  
      * @throws java.net.MalformedURLException if the deployed webapp URL is invalid
 251  
      */
 252  
     protected URL getDeployedURL()
 253  
         throws MalformedURLException
 254  
     {
 255  0
         return new URL( getURL(), getPath() );
 256  
     }
 257  
 
 258  
     /**
 259  
      * Splits the given string into lines and writes each one separately to the log at info level.
 260  
      *
 261  
      * @param string the string to write
 262  
      */
 263  
     protected void log( String string )
 264  
     {
 265  0
         StringTokenizer tokenizer = new StringTokenizer( string, "\n\r" );
 266  
 
 267  0
         while ( tokenizer.hasMoreTokens() )
 268  
         {
 269  0
             getLog().info( tokenizer.nextToken() );
 270  
         }
 271  0
     }
 272  
 }