Coverage Report - de.smartics.ci.config.maven.MavenPom
 
Classes in this File Line Coverage Branch Coverage Complexity
MavenPom
0%
0/29
0%
0/12
1.818
 
 1  
 /*
 2  
  * Copyright 2012 smartics, Kronseder & Reiner GmbH
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *     http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package de.smartics.ci.config.maven;
 17  
 
 18  
 import de.smartics.ci.config.hudson.ScmType;
 19  
 import de.smartics.util.lang.Arguments;
 20  
 import de.smartics.util.lang.BlankArgumentException;
 21  
 
 22  
 /**
 23  
  * Provides access to information of a Maven POM.
 24  
  */
 25  
 public final class MavenPom
 26  
 {
 27  
   // ********************************* Fields *********************************
 28  
 
 29  
   // --- constants ------------------------------------------------------------
 30  
 
 31  
   // --- members --------------------------------------------------------------
 32  
 
 33  
   /**
 34  
    * The project's group identifier.
 35  
    */
 36  
   private String groupId;
 37  
 
 38  
   /**
 39  
    * The project's artifact identifier.
 40  
    */
 41  
   private String artifactId;
 42  
 
 43  
   /**
 44  
    * The project's description.
 45  
    */
 46  
   private String description;
 47  
 
 48  
   /**
 49  
    * The type of the SCM.
 50  
    */
 51  
   private ScmType scmType;
 52  
 
 53  
   /**
 54  
    * The URL to the SCM server of the given {@link #getScmType() type}.
 55  
    */
 56  
   private String scmUrl;
 57  
 
 58  
   // ****************************** Initializer *******************************
 59  
 
 60  
   // ****************************** Constructors ******************************
 61  
 
 62  
   /**
 63  
    * Default constructor.
 64  
    */
 65  
   public MavenPom()
 66  0
   {
 67  0
   }
 68  
 
 69  
   // ****************************** Inner Classes *****************************
 70  
 
 71  
   // ********************************* Methods ********************************
 72  
 
 73  
   // --- init -----------------------------------------------------------------
 74  
 
 75  
   // --- get&set --------------------------------------------------------------
 76  
 
 77  
   /**
 78  
    * Returns the project's group identifier.
 79  
    *
 80  
    * @return the project's group identifier.
 81  
    */
 82  
   public String getGroupId()
 83  
   {
 84  0
     return groupId;
 85  
   }
 86  
 
 87  
   /**
 88  
    * Sets the project's group identifier.
 89  
    *
 90  
    * @param groupId the project's group identifier.
 91  
    */
 92  
   public void setGroupId(final String groupId)
 93  
   {
 94  0
     this.groupId = groupId;
 95  0
   }
 96  
 
 97  
   /**
 98  
    * Returns the project's artifact identifier.
 99  
    *
 100  
    * @return the project's artifact identifier.
 101  
    */
 102  
   public String getArtifactId()
 103  
   {
 104  0
     return artifactId;
 105  
   }
 106  
 
 107  
   /**
 108  
    * Sets the project's artifact identifier.
 109  
    *
 110  
    * @param artifactId the project's artifact identifier.
 111  
    */
 112  
   public void setArtifactId(final String artifactId)
 113  
   {
 114  0
     this.artifactId = artifactId;
 115  0
   }
 116  
 
 117  
   /**
 118  
    * Returns the project's description.
 119  
    *
 120  
    * @return the project's description.
 121  
    */
 122  
   public String getDescription()
 123  
   {
 124  0
     return description;
 125  
   }
 126  
 
 127  
   /**
 128  
    * Sets the project's description.
 129  
    *
 130  
    * @param description the project's description.
 131  
    */
 132  
   public void setDescription(final String description)
 133  
   {
 134  0
     this.description = description;
 135  0
   }
 136  
 
 137  
   /**
 138  
    * Returns the type of the SCM.
 139  
    *
 140  
    * @return the type of the SCM.
 141  
    */
 142  
   public ScmType getScmType()
 143  
   {
 144  0
     return scmType;
 145  
   }
 146  
 
 147  
   /**
 148  
    * Returns the URL to the SCM server of the given {@link #getScmType() type}.
 149  
    *
 150  
    * @return the URL to the SCM server of the given {@link #getScmType() type}.
 151  
    */
 152  
   public String getScmUrl()
 153  
   {
 154  0
     return scmUrl;
 155  
   }
 156  
 
 157  
   /**
 158  
    * Checks if SCM information is provided.
 159  
    *
 160  
    * @return <code>true</code> if SCM info is provided, <code>false</code> if
 161  
    *         not.
 162  
    */
 163  
   public boolean isScmInfoProvided()
 164  
   {
 165  0
     return scmType != null; // && scmUrl != null;
 166  
   }
 167  
 
 168  
   /**
 169  
    * Sets the SCM information to the Maven POM.
 170  
    *
 171  
    * @param connectionString the connection string of format
 172  
    *          <code>scm:SCM_TYPE:SCM_URL</code>.
 173  
    * @throws BlankArgumentException if {@code connectionString} is
 174  
    *           <code>null</code>.
 175  
    * @throws IllegalArgumentException if the {@code connectionString} does not
 176  
    *           meet the expected format <code>scm:SCM_TYPE:SCM_URL</code>.
 177  
    */
 178  
   public void setScmConnectionString(final String connectionString)
 179  
     throws BlankArgumentException, IllegalArgumentException
 180  
   {
 181  0
     Arguments.checkNotBlank("connectionString", connectionString);
 182  0
     if (!connectionString.startsWith("scm:"))
 183  
     {
 184  0
       throw new IllegalArgumentException(
 185  
           "SCM connection string does not start with 'scm:': "
 186  
               + connectionString);
 187  
     }
 188  0
     final int endOfScmTypeString = connectionString.indexOf(':', 4);
 189  0
     if (endOfScmTypeString == -1)
 190  
     {
 191  0
       throw new IllegalArgumentException(
 192  
           "Cannot find SCM type"
 193  
               + " (expected between first and second ':') in connection string: "
 194  
               + connectionString);
 195  
     }
 196  0
     final String scmTypeString =
 197  
         connectionString.substring(4, endOfScmTypeString);
 198  0
     if ("http".equals(scmTypeString) || "https".equals(scmTypeString))
 199  
     {
 200  0
       throw new IllegalArgumentException(
 201  
           "Cannot find valid SCM type"
 202  
               + " (expected between first and second ':') in connection string: "
 203  
               + connectionString);
 204  
     }
 205  0
     final int startOfScmUrl = endOfScmTypeString + 1;
 206  0
     if (connectionString.length() <= startOfScmUrl)
 207  
     {
 208  0
       throw new IllegalArgumentException(
 209  
           "SCM connection string does not provide an URL: " + connectionString);
 210  
     }
 211  
 
 212  0
     scmType = ScmType.getValueFor(scmTypeString);
 213  0
     scmUrl = connectionString.substring(endOfScmTypeString + 1);
 214  0
   }
 215  
 
 216  
   // --- business -------------------------------------------------------------
 217  
 
 218  
   // --- object basics --------------------------------------------------------
 219  
 
 220  
 }