Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
MavenPom |
|
|
1.8181818181818181;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 | } |