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.plugin.eclipse.writers;
20
21 import java.io.File;
22 import java.util.Arrays;
23 import java.util.Comparator;
24 import java.util.List;
25 import java.util.Map;
26
27 import org.apache.maven.artifact.repository.ArtifactRepository;
28 import org.apache.maven.plugin.eclipse.EclipsePlugin;
29 import org.apache.maven.plugin.eclipse.EclipseSourceDir;
30 import org.apache.maven.plugin.eclipse.WorkspaceConfiguration;
31 import org.apache.maven.plugin.ide.IdeDependency;
32 import org.apache.maven.project.MavenProject;
33
34 /**
35 * @author Fabrizio Giustina
36 * @version $Id: EclipseWriterConfig.java 798336 2009-07-27 23:54:06Z aheritier $
37 */
38 public class EclipseWriterConfig
39 {
40 /**
41 * The maven project.
42 */
43 private MavenProject project;
44
45 /**
46 * The maven project packaging.
47 */
48 private String packaging;
49
50 /**
51 * Eclipse project dir.
52 */
53 private File eclipseProjectDirectory;
54
55 /**
56 * The name of the project in eclipse.
57 */
58 private String eclipseProjectName;
59
60 /**
61 * Base project dir.
62 */
63 private File projectBaseDir;
64
65 /**
66 * List of IDE dependencies.
67 */
68 private IdeDependency[] deps = new IdeDependency[0];
69
70 /**
71 * List of IDE dependencies ordered.
72 */
73 private IdeDependency[] orderedDeps = new IdeDependency[0];
74
75 /**
76 * Source directories.
77 */
78 private EclipseSourceDir[] sourceDirs;
79
80 /**
81 * Local maven repo.
82 */
83 private ArtifactRepository localRepository;
84
85 /**
86 * Build output directory for eclipse.
87 */
88 private File buildOutputDirectory;
89
90 /**
91 * Manifest file.
92 */
93 private File osgiManifestFile;
94
95 /**
96 * PDE mode.
97 */
98 private boolean pde;
99
100 /**
101 * Project natures.
102 */
103 private List projectnatures;
104
105 /**
106 * Project facets.
107 */
108 private Map projectFacets;
109
110 /**
111 * Build commands. List<BuildCommand>
112 */
113 private List buildCommands;
114
115 /**
116 * Classpath containers.
117 */
118 private List classpathContainers;
119
120 /**
121 * Appends the version number to the project name if <tt>true</tt>.
122 *
123 * @deprecated use {@link #projectNameTemplate}
124 */
125 private boolean addVersionToProjectName;
126
127 /**
128 * @see EclipsePlugin#getProjectNameTemplate()
129 */
130 private String projectNameTemplate;
131
132 /**
133 * @see EclipsePlugin#deployName()
134 */
135
136 private String contextName;
137
138 /**
139 * @see EclipsePlugin#wtpapplicationxml()
140 */
141 private boolean wtpapplicationxml;
142
143 /**
144 * @see EclipsePlugin#getWtpversion()
145 */
146 private float wtpVersion;
147
148 private float ajdtVersion;
149
150 private WorkspaceConfiguration workspaceConfiguration;
151
152 private List linkedResources;
153
154 public WorkspaceConfiguration getWorkspaceConfiguration()
155 {
156 return workspaceConfiguration;
157 }
158
159 public void setWorkspaceConfiguration( WorkspaceConfiguration workspaceConfiguration )
160 {
161 this.workspaceConfiguration = workspaceConfiguration;
162 }
163
164 /**
165 * Getter for <code>deps</code>.
166 *
167 * @return Returns the deps.
168 */
169 public IdeDependency[] getDeps()
170 {
171 return deps;
172 }
173
174 /**
175 * Setter for <code>deps</code>.
176 *
177 * @param deps The deps to set.
178 */
179 public void setDeps( IdeDependency[] deps )
180 {
181 this.deps = deps;
182 if ( deps != null )
183 {
184 // TODO get the right comparator depending on orderDependencies={name,nearness..};
185 // if none specified it could use a NullComparator to reduce the number of
186 // conditions that have to be checked
187 Comparator depsByArtifactId = new Comparator()
188 {
189 public int compare( Object o1, Object o2 )
190 {
191 int result =
192 ( (IdeDependency) o1 ).getArtifactId().compareToIgnoreCase(
193 ( (IdeDependency) o2 ).getArtifactId() );
194 if ( result != 0 )
195 {
196 return result;
197 }
198 if ( ( (IdeDependency) o1 ).getClassifier() != null
199 && ( (IdeDependency) o2 ).getClassifier() != null )
200 {
201 result =
202 ( (IdeDependency) o1 ).getClassifier().compareToIgnoreCase(
203 ( (IdeDependency) o2 ).getClassifier() );
204 if ( result != 0 )
205 {
206 return result;
207 }
208 }
209 result = ( (IdeDependency) o1 ).getType().compareToIgnoreCase( ( (IdeDependency) o2 ).getType() );
210 if ( result != 0 )
211 {
212 return result;
213 }
214 result =
215 ( (IdeDependency) o1 ).getGroupId().compareToIgnoreCase( ( (IdeDependency) o2 ).getGroupId() );
216 return result;
217 }
218 };
219
220 orderedDeps = new IdeDependency[deps.length];
221 System.arraycopy( deps, 0, orderedDeps, 0, deps.length );
222 Arrays.sort( orderedDeps, depsByArtifactId );
223 }
224 }
225
226 /**
227 * Getter for <code>eclipseProjectDir</code>.
228 *
229 * @return Returns the eclipseProjectDir.
230 */
231 public File getEclipseProjectDirectory()
232 {
233 return eclipseProjectDirectory;
234 }
235
236 /**
237 * Setter for <code>eclipseProjectDir</code>.
238 *
239 * @param eclipseProjectDir The eclipseProjectDir to set.
240 */
241 public void setEclipseProjectDirectory( File eclipseProjectDir )
242 {
243 eclipseProjectDirectory = eclipseProjectDir;
244 }
245
246 /**
247 * Getter for <code>eclipseProjectName</code>.
248 *
249 * @return Returns the project name used in eclipse.
250 */
251 public String getEclipseProjectName()
252 {
253 return eclipseProjectName;
254 }
255
256 /**
257 * Setter for <code>eclipseProjectName</code>.
258 *
259 * @param eclipseProjectName the project name used in eclipse.
260 */
261 public void setEclipseProjectName( String eclipseProjectName )
262 {
263 this.eclipseProjectName = eclipseProjectName;
264 }
265
266 /**
267 * Getter for <code>project</code>.
268 *
269 * @return Returns the project.
270 */
271 public MavenProject getProject()
272 {
273 return project;
274 }
275
276 /**
277 * Setter for <code>project</code>.
278 *
279 * @param project The project to set.
280 */
281 public void setProject( MavenProject project )
282 {
283 this.project = project;
284 }
285
286 /**
287 * Getter for <code>sourceDirs</code>.
288 *
289 * @return Returns the sourceDirs.
290 */
291 public EclipseSourceDir[] getSourceDirs()
292 {
293 return sourceDirs;
294 }
295
296 /**
297 * Setter for <code>sourceDirs</code>.
298 *
299 * @param sourceDirs The sourceDirs to set.
300 */
301 public void setSourceDirs( EclipseSourceDir[] sourceDirs )
302 {
303 this.sourceDirs = sourceDirs;
304 }
305
306 /**
307 * Getter for <code>buildOutputDirectory</code>.
308 *
309 * @return Returns the buildOutputDirectory.
310 */
311 public File getBuildOutputDirectory()
312 {
313 return buildOutputDirectory;
314 }
315
316 /**
317 * Setter for <code>buildOutputDirectory</code>.
318 *
319 * @param buildOutputDirectory The buildOutputDirectory to set.
320 */
321 public void setBuildOutputDirectory( File buildOutputDirectory )
322 {
323 this.buildOutputDirectory = buildOutputDirectory;
324 }
325
326 /**
327 * Getter for <code>localRepository</code>.
328 *
329 * @return Returns the localRepository.
330 */
331 public ArtifactRepository getLocalRepository()
332 {
333 return localRepository;
334 }
335
336 /**
337 * Setter for <code>localRepository</code>.
338 *
339 * @param localRepository The localRepository to set.
340 */
341 public void setLocalRepository( ArtifactRepository localRepository )
342 {
343 this.localRepository = localRepository;
344 }
345
346 /**
347 * Getter for <code>manifestFile</code>.
348 *
349 * @return Returns the manifestFile.
350 */
351 public File getOSGIManifestFile()
352 {
353 return osgiManifestFile;
354 }
355
356 /**
357 * Setter for <code>manifestFile</code>.
358 *
359 * @param manifestFile The manifestFile to set.
360 */
361 public void setOSGIManifestFile( File manifestFile )
362 {
363 this.osgiManifestFile = manifestFile;
364 }
365
366 /**
367 * Getter for <code>classpathContainers</code>.
368 *
369 * @return Returns the classpathContainers.
370 */
371 public List getClasspathContainers()
372 {
373 return classpathContainers;
374 }
375
376 /**
377 * Setter for <code>classpathContainers</code>.
378 *
379 * @param classpathContainers The classpathContainers to set.
380 */
381 public void setClasspathContainers( List classpathContainers )
382 {
383 this.classpathContainers = classpathContainers;
384 }
385
386 /**
387 * Getter for <code>pde</code>.
388 *
389 * @return Returns the pde.
390 */
391 public boolean isPde()
392 {
393 return pde;
394 }
395
396 /**
397 * Setter for <code>pde</code>.
398 *
399 * @param pde The pde to set.
400 */
401 public void setPde( boolean pde )
402 {
403 this.pde = pde;
404 }
405
406 /**
407 * Getter for <code>buildCommands</code>.
408 *
409 * @return Returns the buildCommands.
410 */
411 public List getBuildCommands()
412 {
413 return buildCommands;
414 }
415
416 /**
417 * Setter for <code>buildCommands</code>.
418 *
419 * @param buildCommands The buildCommands to set.
420 */
421 public void setBuildCommands( List buildCommands )
422 {
423 this.buildCommands = buildCommands;
424 }
425
426 /**
427 * Getter for <code>projectnatures</code>.
428 *
429 * @return Returns the projectnatures.
430 */
431 public List getProjectnatures()
432 {
433 return projectnatures;
434 }
435
436 /**
437 * Setter for <code>projectnatures</code>.
438 *
439 * @param projectnatures The projectnatures to set.
440 */
441 public void setProjectnatures( List projectnatures )
442 {
443 this.projectnatures = projectnatures;
444 }
445
446 /**
447 * Getter for <code>projectFacets</code>.
448 *
449 * @return Returns the projectFacets
450 */
451 public Map getProjectFacets()
452 {
453 return projectFacets;
454 }
455
456 /**
457 * Setter for <code>projectFacets</code>
458 *
459 * @param projectFacets The projectFacets to set.
460 */
461 public void setProjectFacets( Map projectFacets )
462 {
463 this.projectFacets = projectFacets;
464 }
465
466 /**
467 * Getter for <code>projectBaseDir</code>.
468 *
469 * @return Returns the projectBaseDir.
470 */
471 public File getProjectBaseDir()
472 {
473 return projectBaseDir;
474 }
475
476 /**
477 * Setter for <code>projectBaseDir</code>.
478 *
479 * @param projectBaseDir The projectBaseDir to set.
480 */
481 public void setProjectBaseDir( File projectBaseDir )
482 {
483 this.projectBaseDir = projectBaseDir;
484 }
485
486 /**
487 * Getter for <code>addVersionToProjectName</code>.
488 *
489 * @deprecated use {@link #getProjectNameTemplate()}
490 */
491 public boolean isAddVersionToProjectName()
492 {
493 return addVersionToProjectName;
494 }
495
496 /**
497 * Setter for <code>addVersionToProjectName</code>.
498 *
499 * @deprecated use {@link #setProjectNameTemplate(String)}
500 */
501 public void setAddVersionToProjectName( boolean addVersionToProjectName )
502 {
503 this.addVersionToProjectName = addVersionToProjectName;
504 }
505
506 public void setProjectNameTemplate( String projectNameTemplate )
507 {
508 this.projectNameTemplate = projectNameTemplate;
509 }
510
511 public String getProjectNameTemplate()
512 {
513 return projectNameTemplate;
514 }
515
516 public String getContextName()
517 {
518 return contextName;
519 }
520
521 public void setContextName( String deployName )
522 {
523 contextName = deployName;
524 }
525
526 /**
527 * @return the packaging
528 */
529 public String getPackaging()
530 {
531 return packaging;
532 }
533
534 /**
535 * @param packaging the packaging to set
536 */
537 public void setPackaging( String packaging )
538 {
539 this.packaging = packaging;
540 }
541
542 /**
543 * Getter for <code>wtpapplicationxml</code>.
544 *
545 * @return Returns the wtpapplicationxml.
546 */
547 public boolean getWtpapplicationxml()
548 {
549 return wtpapplicationxml;
550 }
551
552 /**
553 * Setter for <code>buildCommands</code>.
554 *
555 * @param buildCommands The buildCommands to set.
556 */
557 public void setWtpapplicationxml( boolean wtpapplicationxml )
558 {
559 this.wtpapplicationxml = wtpapplicationxml;
560 }
561
562 /**
563 * Getter for <code>wtpVersion</code>.
564 *
565 * @return Returns the wtpVersion.
566 */
567 public float getWtpVersion()
568 {
569 return wtpVersion;
570 }
571
572 /**
573 * Setter for <code>wtpVersion</code>.
574 *
575 * @param wtpVersion The wtpVersion to set.
576 */
577 public void setWtpVersion( float wtpVersion )
578 {
579 this.wtpVersion = wtpVersion;
580 }
581
582 /**
583 * @return an ordered list of dependencies
584 */
585 public IdeDependency[] getDepsOrdered()
586 {
587 return orderedDeps;
588 }
589
590 /**
591 * Returns the ajdtVersion.
592 *
593 * @return the ajdtVersion.
594 */
595 public float getAjdtVersion()
596 {
597 return ajdtVersion;
598 }
599
600 /**
601 * Sets the ajdtVersion.
602 *
603 * @param ajdtVersion the ajdtVersion.
604 */
605 public void setAjdtVersion( float ajdtVersion )
606 {
607 this.ajdtVersion = ajdtVersion;
608 }
609
610 /**
611 * @return the linkedResources
612 */
613 public List getLinkedResources()
614 {
615 return linkedResources;
616 }
617
618 /**
619 * @param linkedResources the linkedResources to set
620 */
621 public void setLinkedResources( List linkedResources )
622 {
623 this.linkedResources = linkedResources;
624 }
625
626 }