1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.shared.archiver;
20
21 import java.nio.file.Path;
22 import java.util.LinkedHashMap;
23 import java.util.LinkedList;
24 import java.util.List;
25 import java.util.Map;
26
27 /**
28 * Capture common archive configuration.
29 *
30 * @author <a href="mailto:brett@apache.org">Brett Porter</a>
31 */
32 // TODO Is this general enough to be in Plexus Archiver?
33 public class MavenArchiveConfiguration {
34 private boolean compress = true;
35
36 private boolean recompressAddedZips = true;
37
38 private boolean addMavenDescriptor = true;
39
40 private Path manifestFile;
41
42 // TODO: Rename this attribute to manifestConfiguration;
43 private ManifestConfiguration manifest;
44
45 private Map<String, String> manifestEntries = new LinkedHashMap<>();
46
47 private List<ManifestSection> manifestSections = new LinkedList<>();
48
49 /**
50 * @since 2.2
51 */
52 private boolean forced = true;
53
54 /**
55 * @since 2.3
56 */
57 private Path pomPropertiesFile;
58
59 /**
60 * <p>isCompress.</p>
61 *
62 * @return {@link #compress}
63 */
64 public boolean isCompress() {
65 return compress;
66 }
67
68 /**
69 * <p>isRecompressAddedZips.</p>
70 *
71 * @return {@link #recompressAddedZips}
72 */
73 public boolean isRecompressAddedZips() {
74 return recompressAddedZips;
75 }
76
77 /**
78 * <p>Setter for the field <code>recompressAddedZips</code>.</p>
79 *
80 * @param recompressAddedZips {@link #recompressAddedZips}
81 */
82 public void setRecompressAddedZips(boolean recompressAddedZips) {
83 this.recompressAddedZips = recompressAddedZips;
84 }
85
86 /**
87 * <p>isAddMavenDescriptor.</p>
88 *
89 * @return {@link #addMavenDescriptor}
90 */
91 public boolean isAddMavenDescriptor() {
92 return addMavenDescriptor;
93 }
94
95 /**
96 * <p>Getter for the field <code>manifestFile</code>.</p>
97 *
98 * @return {@link #manifestFile}
99 */
100 public Path getManifestFile() {
101 return manifestFile;
102 }
103
104 /**
105 * <p>Getter for the field <code>manifest</code>.</p>
106 *
107 * @return {@link #manifest}
108 */
109 // TODO: Change the name of this method into getManifestConfiguration()
110 public ManifestConfiguration getManifest() {
111 if (manifest == null) {
112 manifest = new ManifestConfiguration();
113 }
114 return manifest;
115 }
116
117 /**
118 * <p>Setter for the field <code>compress</code>.</p>
119 *
120 * @param compress set compress to true/false.
121 */
122 public void setCompress(boolean compress) {
123 this.compress = compress;
124 }
125
126 /**
127 * <p>Setter for the field <code>addMavenDescriptor</code>.</p>
128 *
129 * @param addMavenDescriptor activate to add maven descriptor or not.
130 */
131 public void setAddMavenDescriptor(boolean addMavenDescriptor) {
132 this.addMavenDescriptor = addMavenDescriptor;
133 }
134
135 /**
136 * <p>Setter for the field <code>manifestFile</code>.</p>
137 *
138 * @param manifestFile The manifest file.
139 */
140 public void setManifestFile(Path manifestFile) {
141 this.manifestFile = manifestFile;
142 }
143
144 /**
145 * <p>Setter for the field <code>manifest</code>.</p>
146 *
147 * @param manifest {@link ManifestConfiguration}
148 */
149 public void setManifest(ManifestConfiguration manifest) {
150 this.manifest = manifest;
151 }
152
153 /**
154 * <p>addManifestEntry.</p>
155 *
156 * @param key The key of the entry.
157 * @param value The value of the entry.
158 */
159 public void addManifestEntry(String key, String value) {
160 manifestEntries.put(key, value);
161 }
162
163 /**
164 * <p>addManifestEntries.</p>
165 *
166 * @param map The whole map which should be added.
167 */
168 public void addManifestEntries(Map<String, String> map) {
169 manifestEntries.putAll(map);
170 }
171
172 /**
173 * <p>isManifestEntriesEmpty.</p>
174 *
175 * @return are there entries true yes false otherwise.
176 */
177 public boolean isManifestEntriesEmpty() {
178 return manifestEntries.isEmpty();
179 }
180
181 /**
182 * <p>Getter for the field <code>manifestEntries</code>.</p>
183 *
184 * @return {@link #manifestEntries}
185 */
186 public Map<String, String> getManifestEntries() {
187 return manifestEntries;
188 }
189
190 /**
191 * <p>Setter for the field <code>manifestEntries</code>.</p>
192 *
193 * @param manifestEntries {@link #manifestEntries}
194 */
195 public void setManifestEntries(Map<String, String> manifestEntries) {
196 this.manifestEntries = manifestEntries;
197 }
198
199 /**
200 * <p>addManifestSection.</p>
201 *
202 * @param section {@link ManifestSection}
203 */
204 public void addManifestSection(ManifestSection section) {
205 manifestSections.add(section);
206 }
207
208 /**
209 * <p>addManifestSections.</p>
210 *
211 * @param list Added list of {@link ManifestSection}.
212 */
213 public void addManifestSections(List<ManifestSection> list) {
214 manifestSections.addAll(list);
215 }
216
217 /**
218 * <p>isManifestSectionsEmpty.</p>
219 *
220 * @return if manifestSections is empty or not.
221 */
222 public boolean isManifestSectionsEmpty() {
223 return manifestSections.isEmpty();
224 }
225
226 /**
227 * <p>Getter for the field <code>manifestSections</code>.</p>
228 *
229 * @return {@link #manifestSections}
230 */
231 public List<ManifestSection> getManifestSections() {
232 return manifestSections;
233 }
234
235 /**
236 * <p>Setter for the field <code>manifestSections</code>.</p>
237 *
238 * @param manifestSections set The list of {@link ManifestSection}.
239 */
240 public void setManifestSections(List<ManifestSection> manifestSections) {
241 this.manifestSections = manifestSections;
242 }
243
244 /**
245 * <p>
246 * Returns, whether recreating the archive is forced (default). Setting this option to false means, that the
247 * archiver should compare the timestamps of included files with the timestamp of the target archive and rebuild the
248 * archive only, if the latter timestamp precedes the former timestamps. Checking for timestamps will typically
249 * offer a performance gain (in particular, if the following steps in a build can be suppressed, if an archive isn't
250 * recrated) on the cost that you get inaccurate results from time to time. In particular, removal of source files
251 * won't be detected.
252 * </p>
253 * <p>
254 * An archiver doesn't necessarily support checks for uptodate. If so, setting this option to true will simply be
255 * ignored.
256 * </p>
257 *
258 * @return True, if the target archive should always be created; false otherwise
259 * @see #setForced(boolean)
260 */
261 public boolean isForced() {
262 return forced;
263 }
264
265 /**
266 * <p>
267 * Sets, whether recreating the archive is forced (default). Setting this option to false means, that the archiver
268 * should compare the timestamps of included files with the timestamp of the target archive and rebuild the archive
269 * only, if the latter timestamp precedes the former timestamps. Checking for timestamps will typically offer a
270 * performance gain (in particular, if the following steps in a build can be suppressed, if an archive isn't
271 * recrated) on the cost that you get inaccurate results from time to time. In particular, removal of source files
272 * won't be detected.
273 * </p>
274 * <p>
275 * An archiver doesn't necessarily support checks for uptodate. If so, setting this option to true will simply be
276 * ignored.
277 * </p>
278 *
279 * @param forced True, if the target archive should always be created; false otherwise
280 * @see #isForced()
281 */
282 public void setForced(boolean forced) {
283 this.forced = forced;
284 }
285
286 /**
287 * Returns the location of the "pom.properties" file. May be null, in which case a default value is choosen.
288 *
289 * @return "pom.properties" location or null.
290 */
291 public Path getPomPropertiesFile() {
292 return pomPropertiesFile;
293 }
294
295 /**
296 * Sets the location of the "pom.properties" file. May be null, in which case a default value is choosen.
297 *
298 * @param pomPropertiesFile "pom.properties" location or null.
299 */
300 public void setPomPropertiesFile(Path pomPropertiesFile) {
301 this.pomPropertiesFile = pomPropertiesFile;
302 }
303 }