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