Coverage Report - org.apache.maven.plugin.jira.AbstractJiraDownloader
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractJiraDownloader
54%
43/79
0%
0/24
1.516
 
 1  
 package org.apache.maven.plugin.jira;
 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.plugin.MojoExecutionException;
 23  
 import org.apache.maven.plugin.issues.Issue;
 24  
 import org.apache.maven.plugin.issues.IssueUtils;
 25  
 import org.apache.maven.plugin.logging.Log;
 26  
 import org.apache.maven.project.MavenProject;
 27  
 import org.apache.maven.settings.Proxy;
 28  
 import org.apache.maven.settings.Settings;
 29  
 import org.apache.maven.wagon.proxy.ProxyInfo;
 30  
 
 31  
 import java.io.File;
 32  
 import java.net.MalformedURLException;
 33  
 import java.net.URL;
 34  
 import java.util.List;
 35  
 
 36  
 /**
 37  
  * Abstract API, more or less, to retrieving issue information from JIRA.
 38  
  * Intended to have subclasses for the old (RSS) and new (REST) ways of doing things.
 39  
  *
 40  
  * @author mfranken@xebia.com
 41  
  * @author jruiz@exist.com
 42  
  * @version $Id: AbstractJiraDownloader.java 1412155 2012-11-21 15:47:19Z bimargulies $
 43  
  */
 44  2
 public abstract class AbstractJiraDownloader
 45  
 {
 46  
     protected static final String UTF_8 = "UTF-8";
 47  
 
 48  
     /** Log for debug output. */
 49  
     protected Log log;
 50  
     /** Output file for xml document. */
 51  
     protected File output;
 52  
     /** The maximum number of entries to show. */
 53  
     protected int nbEntriesMax;
 54  
     /** The filter to apply to query to JIRA. */
 55  
     protected String filter;
 56  
     /** Ids of fix versions to show, as comma separated string. */
 57  
     protected String fixVersionIds;
 58  
     /** Ids of status to show, as comma separated string. */
 59  
     protected String statusIds;
 60  
     /** Ids of resolution to show, as comma separated string. */
 61  
     protected String resolutionIds;
 62  
     /** Ids of priority to show, as comma separated string. */
 63  
     protected String priorityIds;
 64  
     /** The component to show. */
 65  
     protected String component;
 66  
     /** Ids of types to show, as comma separated string. */
 67  
     protected String typeIds;
 68  
     /** Column names to sort by, as comma separated string. */
 69  
     protected String sortColumnNames;
 70  
     /** The username to log into JIRA. */
 71  
     protected String jiraUser;
 72  
     /** The password to log into JIRA. */
 73  
     protected String jiraPassword;
 74  
     /** The username to log into webserver. */
 75  
     protected String webUser;
 76  
     /** The password to log into webserver. */
 77  
     protected String webPassword;
 78  
     /** The maven project. */
 79  
     protected MavenProject project;
 80  
     /** The maven settings. */
 81  
     protected Settings settings;
 82  
     /** Use JQL, JIRA query language, instead of URL parameter based queries.
 83  
      * Note that this is down here to make it easier for the mojo to deal with
 84  
      * both new and old flavors. */
 85  
     protected boolean useJql;
 86  
     /** Filter the JIRA query based on the current version */
 87  
     protected boolean onlyCurrentVersion;
 88  
     /** The versionPrefix to apply to the POM version */
 89  
     protected String versionPrefix;
 90  
     /** The pattern used to parse dates from the JIRA xml file. */
 91  
     protected String jiraDatePattern;
 92  
     protected String proxyHost;
 93  
     protected int proxyPort;
 94  
     protected String proxyUser;
 95  
     protected String proxyPass;
 96  
 
 97  
     /**
 98  
      * Execute the query on the JIRA server.
 99  
      *
 100  
      * @throws Exception on error
 101  
      */
 102  
     public abstract void doExecute() throws Exception;
 103  
 
 104  
 
 105  
     /**
 106  
      * Check to see if we think that JIRA authentication is needed.
 107  
      *
 108  
      * @return <code>true</code> if jiraUser and jiraPassword are set, otherwise <code>false</code>
 109  
      */
 110  
     protected boolean isJiraAuthenticationConfigured()
 111  
     {
 112  0
         return ( jiraUser != null ) && ( jiraUser.length() > 0 ) && ( jiraPassword != null );
 113  
     }
 114  
 
 115  
 
 116  
     protected void getProxyInfo( String jiraUrl )
 117  
     {
 118  
         // see whether there is any proxy defined in maven
 119  0
         Proxy proxy = null;
 120  
 
 121  0
         if ( project == null )
 122  
         {
 123  0
             getLog().error( "No project set. No proxy info available." );
 124  
 
 125  0
             return;
 126  
         }
 127  
 
 128  0
         if ( settings != null )
 129  
         {
 130  0
             proxy = settings.getActiveProxy();
 131  
         }
 132  
 
 133  0
         if ( proxy != null )
 134  
         {
 135  
 
 136  0
             ProxyInfo proxyInfo = new ProxyInfo();
 137  0
             proxyInfo.setNonProxyHosts( proxy.getNonProxyHosts() );
 138  
 
 139  
             // Get the host out of the JIRA URL
 140  0
             URL url = null;
 141  
             try
 142  
             {
 143  0
                 url = new URL( jiraUrl );
 144  
             }
 145  0
             catch( MalformedURLException e )
 146  
             {
 147  0
                 getLog().error( "Invalid JIRA URL: " + jiraUrl + ". " + e.getMessage() );
 148  0
             }
 149  0
             String jiraHost = null;
 150  0
             if ( url != null )
 151  
             {
 152  0
                 jiraHost = url.getHost();
 153  
             }
 154  
 
 155  
             // Validation of proxy method copied from org.apache.maven.wagon.proxy.ProxyUtils.
 156  
             // @todo Can use original when maven-changes-plugin requires a more recent version of Maven
 157  
 
 158  
             //if ( ProxyUtils.validateNonProxyHosts( proxyInfo, jiraHost ) )
 159  0
             if ( JiraHelper.validateNonProxyHosts( proxyInfo, jiraHost ) )
 160  
             {
 161  0
                 return;
 162  
             }
 163  
 
 164  0
             proxyHost = settings.getActiveProxy().getHost();
 165  0
             proxyPort = settings.getActiveProxy().getPort();
 166  0
             proxyUser = settings.getActiveProxy().getUsername();
 167  0
             proxyPass = settings.getActiveProxy().getPassword();
 168  
         }
 169  0
     }
 170  
 
 171  
     /**
 172  
      * Override this method if you need to get issues for a specific Fix For.
 173  
      *
 174  
      * @return A Fix For id or <code>null</code> if you don't have that need
 175  
      */
 176  
     protected String getFixFor()
 177  
     {
 178  0
         if ( onlyCurrentVersion && useJql )
 179  
         {
 180  
             // Let JIRA do the filtering of the current version instead of the JIRA mojo.
 181  
             // This way JIRA returns less issues and we do not run into the "nbEntriesMax" limit that easily.
 182  
 
 183  0
             String version = ( versionPrefix == null ? "" : versionPrefix ) + project.getVersion();
 184  
 
 185  
             // Remove "-SNAPSHOT" from the end of the version, if it's there
 186  0
             if ( version.endsWith( IssueUtils.SNAPSHOT_SUFFIX ) )
 187  
             {
 188  0
                 return version.substring( 0, version.length() - IssueUtils.SNAPSHOT_SUFFIX.length() );
 189  
             }
 190  
             else
 191  
             {
 192  0
                 return version;
 193  
             }
 194  
         }
 195  
         else
 196  
         {
 197  0
             return null;
 198  
         }
 199  
     }
 200  
 
 201  
 
 202  
     public abstract List<Issue> getIssueList() throws MojoExecutionException;
 203  
 
 204  
     public void setJiraDatePattern( String jiraDatePattern )
 205  
     {
 206  2
         this.jiraDatePattern = jiraDatePattern;
 207  2
     }
 208  
 
 209  
     /**
 210  
      * Set the output file for the log.
 211  
      *
 212  
      * @param thisOutput the output file
 213  
      */
 214  
     public void setOutput( File thisOutput )
 215  
     {
 216  2
         this.output = thisOutput;
 217  2
     }
 218  
 
 219  
     public File getOutput()
 220  
     {
 221  0
         return this.output;
 222  
     }
 223  
 
 224  
     /**
 225  
      * Sets the project.
 226  
      *
 227  
      * @param thisProject  The project to set
 228  
      */
 229  
     public void setMavenProject( Object thisProject )
 230  
     {
 231  2
         this.project = (MavenProject) thisProject;
 232  2
     }
 233  
 
 234  
     /**
 235  
      * Sets the maximum number of Issues to show.
 236  
      *
 237  
      * @param nbEntries  The maximum number of Issues
 238  
      */
 239  
     public void setNbEntries( final int nbEntries )
 240  
     {
 241  2
         nbEntriesMax = nbEntries;
 242  2
     }
 243  
 
 244  
     /**
 245  
      * Sets the statusIds.
 246  
      *
 247  
      * @param thisStatusIds   The id(s) of the status to show, as comma separated string
 248  
      */
 249  
     public void setStatusIds( String thisStatusIds )
 250  
     {
 251  2
         statusIds = thisStatusIds;
 252  2
     }
 253  
 
 254  
     /**
 255  
      * Sets the priorityIds.
 256  
      *
 257  
      * @param thisPriorityIds  The id(s) of the priority to show, as comma separated string
 258  
      */
 259  
     public void setPriorityIds( String thisPriorityIds )
 260  
     {
 261  2
         priorityIds = thisPriorityIds;
 262  2
     }
 263  
 
 264  
     /**
 265  
      * Sets the resolutionIds.
 266  
      *
 267  
      * @param thisResolutionIds  The id(s) of the resolution to show, as comma separated string
 268  
      */
 269  
     public void setResolutionIds( String thisResolutionIds )
 270  
     {
 271  2
         resolutionIds = thisResolutionIds;
 272  2
     }
 273  
 
 274  
     /**
 275  
      * Sets the sort column names.
 276  
      *
 277  
      * @param thisSortColumnNames The column names to sort by
 278  
      */
 279  
     public void setSortColumnNames( String thisSortColumnNames )
 280  
     {
 281  2
         sortColumnNames = thisSortColumnNames;
 282  2
     }
 283  
 
 284  
     /**
 285  
      * Sets the password for authentication against the webserver.
 286  
      *
 287  
      * @param thisWebPassword  The password of the webserver
 288  
      */
 289  
     public void setWebPassword( String thisWebPassword )
 290  
     {
 291  2
         this.webPassword = thisWebPassword;
 292  2
     }
 293  
 
 294  
     /**
 295  
      * Sets the username for authentication against the webserver.
 296  
      *
 297  
      * @param thisWebUser   The username of the webserver
 298  
      */
 299  
     public void setWebUser( String thisWebUser )
 300  
     {
 301  2
         this.webUser = thisWebUser;
 302  2
     }
 303  
 
 304  
     /**
 305  
      * Sets the password to log into a secured JIRA.
 306  
      *
 307  
      * @param thisJiraPassword  The password for JIRA
 308  
      */
 309  
     public void setJiraPassword( final String thisJiraPassword )
 310  
     {
 311  2
         this.jiraPassword = thisJiraPassword;
 312  2
     }
 313  
 
 314  
     /**
 315  
      * Sets the username to log into a secured JIRA.
 316  
      *
 317  
      * @param thisJiraUser  The username for JIRA
 318  
      */
 319  
     public void setJiraUser( String thisJiraUser )
 320  
     {
 321  2
         this.jiraUser = thisJiraUser;
 322  2
     }
 323  
 
 324  
     /**
 325  
      * Sets the filter to apply to query to JIRA.
 326  
      *
 327  
      * @param thisFilter  The filter to query JIRA
 328  
      */
 329  
     public void setFilter( String thisFilter )
 330  
     {
 331  2
         this.filter = thisFilter;
 332  2
     }
 333  
 
 334  
     /**
 335  
      * Sets the component(s) to apply to query JIRA.
 336  
      *
 337  
      * @param theseComponents   The id(s) of components to show, as comma separated string
 338  
      */
 339  
     public void setComponent( String theseComponents )
 340  
     {
 341  2
         this.component = theseComponents;
 342  2
     }
 343  
 
 344  
     /**
 345  
      * Sets the fix version id(s) to apply to query JIRA.
 346  
      *
 347  
      * @param theseFixVersionIds The id(s) of fix versions to show, as comma separated string
 348  
      */
 349  
     public void setFixVersionIds( String theseFixVersionIds )
 350  
     {
 351  2
         this.fixVersionIds = theseFixVersionIds;
 352  2
     }
 353  
 
 354  
     /**
 355  
      * Sets the typeIds.
 356  
      *
 357  
      * @param theseTypeIds  The id(s) of the types to show, as comma separated string
 358  
      */
 359  
     public void setTypeIds( String theseTypeIds )
 360  
     {
 361  2
         typeIds = theseTypeIds;
 362  2
     }
 363  
 
 364  
     public void setLog( Log log )
 365  
     {
 366  2
         this.log = log;
 367  2
     }
 368  
 
 369  
     protected Log getLog()
 370  
     {
 371  0
         return log;
 372  
     }
 373  
 
 374  
     public void setSettings( Settings settings )
 375  
     {
 376  2
         this.settings = settings;
 377  2
     }
 378  
 
 379  
     public boolean isUseJql()
 380  
     {
 381  0
         return useJql;
 382  
     }
 383  
 
 384  
     public void setUseJql( boolean useJql )
 385  
     {
 386  2
         this.useJql = useJql;
 387  2
     }
 388  
 
 389  
     public boolean isOnlyCurrentVersion()
 390  
     {
 391  0
         return onlyCurrentVersion;
 392  
     }
 393  
 
 394  
     public void setOnlyCurrentVersion( boolean onlyCurrentVersion )
 395  
     {
 396  2
         this.onlyCurrentVersion = onlyCurrentVersion;
 397  2
     }
 398  
 
 399  
     public String getVersionPrefix()
 400  
     {
 401  0
         return versionPrefix;
 402  
     }
 403  
 
 404  
     public void setVersionPrefix( String versionPrefix )
 405  
     {
 406  2
         this.versionPrefix = versionPrefix;
 407  2
     }
 408  
 }