View Javadoc
1   // =================== DO NOT EDIT THIS FILE ====================
2   // Generated by Modello 1.7,
3   // any modifications will be overwritten.
4   // ==============================================================
5   
6   package org.apache.maven.shared.release.config;
7   
8   /**
9    * Class ReleaseDescriptor.
10   * 
11   * @version $Revision$ $Date$
12   */
13  @SuppressWarnings( "all" )
14  public class ReleaseDescriptor
15      implements java.io.Serializable
16  {
17  
18        //--------------------------/
19       //- Class/Member Variables -/
20      //--------------------------/
21  
22      /**
23       * 
24       *             The name of this release configuration
25       *           .
26       */
27      private String name;
28  
29      /**
30       * 
31       *             The description of this release configuration
32       *           .
33       */
34      private String description;
35  
36      /**
37       * 
38       *             The prefix of SCM modification messages
39       *           .
40       */
41      private String ScmCommentPrefix = "[maven-release-manager] ";
42  
43      /**
44       * 
45       *             This is a MavenSCM of where you're going to get
46       * the sources to make the release with.
47       *             Example:
48       * scm:svn:https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-release-plugin
49       *           .
50       */
51      private String scmSourceUrl;
52  
53      /**
54       * 
55       *             Where you are going to put your tagged sources
56       *             Example
57       * https://svn.apache.org/repos/asf/maven/plugins/tags
58       *           .
59       */
60      private String scmTagBase;
61  
62      /**
63       * 
64       *             Where you are going to put your branched sources
65       *             Example
66       * https://svn.apache.org/repos/asf/maven/plugins/branches
67       *           .
68       */
69      private String scmBranchBase;
70  
71      /**
72       * 
73       *             tag or branch name: the identifier for the
74       * tag/branch.
75       *             Example: maven-release-plugin-2.0
76       *           .
77       */
78      private String scmReleaseLabel;
79  
80      /**
81       * 
82       *             The id can be used to get the credentials by the
83       * server-id from the settings.xml
84       *           .
85       */
86      private String scmId;
87  
88      /**
89       * 
90       *             The user name to interact with the scm
91       *           .
92       */
93      private String scmUsername;
94  
95      /**
96       * 
97       *             The password for the user interacting with the
98       * scm
99       *           .
100      */
101     private String scmPassword;
102 
103     /**
104      * 
105      *             Private key for an SSH based SCM repository.
106      *           
107      */
108     private String scmPrivateKey;
109 
110     /**
111      * 
112      *             Pass phrase for the private key.
113      *           
114      */
115     private String scmPrivateKeyPassPhrase;
116 
117     /**
118      * 
119      *             Whether to use edit mode when making SCM
120      * modifications. This setting is disregarded
121      *             if the SCM does not support edit mode, or if
122      * edit mode is compulsory for the given SCM.
123      *           
124      */
125     private boolean scmUseEditMode = false;
126 
127     /**
128      * 
129      *             Relative path of the project returned by the
130      * checkout command.
131      *           
132      */
133     private String scmRelativePathProjectDirectory;
134 
135     /**
136      * Field releaseVersions.
137      */
138     private java.util.Map releaseVersions;
139 
140     /**
141      * Field developmentVersions.
142      */
143     private java.util.Map developmentVersions;
144 
145     /**
146      * Field resolvedSnapshotDependencies.
147      */
148     private java.util.Map resolvedSnapshotDependencies;
149 
150     /**
151      * 
152      *             If updateDependencies is false, dependencies
153      * version won't be updated to the next development version.
154      *           
155      */
156     private boolean updateDependencies = true;
157 
158     /**
159      * 
160      *             Whether to use the release profile that adds
161      * sources and javadocs to the released artifact, if
162      * appropriate.
163      *             If set to true, this will set the property
164      * "performRelease" to true.
165      *           
166      */
167     private boolean useReleaseProfile = true;
168 
169     /**
170      * Field originalScmInfo.
171      */
172     private java.util.Map originalScmInfo;
173 
174     /**
175      * 
176      *             The directory where the release is performed.
177      *           
178      */
179     private String workingDirectory;
180 
181     /**
182      * 
183      *             The directory where the tag will be checked out.
184      *           
185      */
186     private String checkoutDirectory;
187 
188     /**
189      * 
190      *             The last completed phase.
191      *           
192      */
193     private String completedPhase;
194 
195     /**
196      * 
197      *             Whether to add the model schema to the top of
198      * the rewritten POM if it wasn't there already.
199      *             If <code>false</code> then the root element will
200      * remain untouched.
201      *           
202      */
203     private boolean addSchema = false;
204 
205     /**
206      * 
207      *             Whether to generate release POMs.
208      *           
209      */
210     private boolean generateReleasePoms = false;
211 
212     /**
213      * 
214      *             Whether to use the parent pom version for
215      * submodule versions.
216      *           
217      */
218     private boolean autoVersionSubmodules = false;
219 
220     /**
221      * 
222      *             Whether the release process is interactive and
223      * the release manager should be prompted to
224      *             confirm values, or whether the defaults are used
225      * regardless.
226      *           
227      */
228     private boolean interactive = true;
229 
230     /**
231      * 
232      *             Whether a SNAPSHOT of the release plugin is
233      * allowed.
234      *           
235      */
236     private boolean snapshotReleasePluginAllowed = false;
237 
238     /**
239      * 
240      *             Additional arguments to pass to any executed
241      * Maven process.
242      *           
243      */
244     private String additionalArguments;
245 
246     /**
247      * 
248      *             The file name of the POM to pass to any executed
249      * Maven process.
250      *           
251      */
252     private String pomFileName;
253 
254     /**
255      * Field checkModificationExcludes.
256      */
257     private java.util.List<String> checkModificationExcludes;
258 
259     /**
260      * 
261      *             The goals to execute in preparation for the
262      * release.
263      *           
264      */
265     private String preparationGoals;
266 
267     /**
268      * 
269      *             The goals to execute in on completion of
270      * preparation for the release.
271      *           
272      */
273     private String completionGoals;
274 
275     /**
276      * 
277      *             The goals to execute in perform phase for the
278      * release.
279      *           
280      */
281     private String performGoals;
282 
283     /**
284      * 
285      *             The commits must be done by modules or not. Set
286      * it to true in case of flat directory structure.
287      *           
288      */
289     private boolean commitByProject = false;
290 
291     /**
292      * 
293      *             Whether to create a branch instead of do a
294      * release.
295      *           
296      */
297     private boolean branchCreation = false;
298 
299     /**
300      * 
301      *             Whether to update branch POM versions.
302      *           
303      */
304     private boolean updateBranchVersions = false;
305 
306     /**
307      * 
308      *             Whether to update working copy POM versions.
309      *           
310      */
311     private boolean updateWorkingCopyVersions = true;
312 
313     /**
314      * 
315      *             Whether to update branch versions to SNAPSHOT.
316      *           
317      */
318     private boolean updateVersionsToSnapshot = false;
319 
320     /**
321      * 
322      *             Whether to suppress a commit of changes to the
323      * working copy before a tag or branch is created.
324      *           
325      */
326     private boolean suppressCommitBeforeTagOrBranch = false;
327 
328     /**
329      * 
330      *             Wait the specified number of seconds before
331      * creating a tag.
332      *           
333      */
334     private int waitBeforeTagging = 0;
335 
336     /**
337      * 
338      *             Should timestamped SNAPSHOT dependencies be
339      * allowed?  Default is to fail when any SNAPSHOT
340      *               dependency is found.
341      *           
342      */
343     private boolean allowTimestampedSnapshots = false;
344 
345     /**
346      * 
347      *             Default version to use for the tagged release or
348      * the new branch.
349      *           
350      */
351     private String defaultReleaseVersion;
352 
353     /**
354      * 
355      *             Default version to use for new working copy.
356      *           
357      */
358     private String defaultDevelopmentVersion;
359 
360     /**
361      * 
362      *             The role-hint for the VersionPolicy
363      * implementation used to calculate the project versions.
364      *           
365      */
366     private String projectVersionPolicyId = "default";
367 
368     /**
369      * 
370      *             NOTE : currently only implemented with svn scm.
371      * Enable a workaround to prevent issue due to svn client >
372      * 1.5.0
373      *             (http://jira.codehaus.org/browse/SCM-406)
374      *           .
375      */
376     private boolean remoteTagging = false;
377 
378     /**
379      * 
380      *             NOTE : currently only implemented with svn scm.
381      * It contains the revision of the committed released pom to
382      * remotely tag
383      *             the source code with this revision.
384      *           
385      */
386     private String scmReleasedPomRevision;
387 
388     /**
389      * 
390      *             Should distributed changes be pushed to the
391      * central repository?
392      *             For many distributed SCMs like Git, a change
393      * like a commit is only stored in your local copy of the
394      * repository.
395      *             Pushing the change allows your to more easily
396      * share it with other users.
397      *           
398      */
399     private boolean pushChanges = true;
400 
401     /**
402      * 
403      *             If the scm provider should use local checkouts
404      * via file://${basedir}
405      *             instead of doing a clean checkout over the
406      * network.
407      *             This is very helpful for releasing large
408      * projects!
409      *           
410      */
411     private boolean localCheckout = false;
412 
413     /**
414      * 
415      *             Specifies the format for generating a tag name.
416      * Property expansion is
417      *             used with the optional prefix of project, where
418      * properties are delimited
419      *             with @{ and }
420      *           .
421      */
422     private String scmTagNameFormat;
423 
424     /**
425      * Field modelEncoding.
426      */
427     private String modelEncoding = "UTF-8";
428 
429 
430       //-----------/
431      //- Methods -/
432     //-----------/
433 
434     /**
435      * Method addCheckModificationExclude.
436      * 
437      * @param string
438      */
439     public void addCheckModificationExclude( String string )
440     {
441         getCheckModificationExcludes().add( string );
442     } //-- void addCheckModificationExclude( String )
443 
444     /**
445      * Method addDevelopmentVersion.
446      * 
447      * @param key
448      * @param value
449      */
450     public void addDevelopmentVersion( Object key, String value )
451     {
452         getDevelopmentVersions().put( key, value );
453     } //-- void addDevelopmentVersion( Object, String )
454 
455     /**
456      * Method addOriginalScmInfo.
457      * 
458      * @param key
459      * @param value
460      */
461     public void addOriginalScmInfo( Object key, String value )
462     {
463         getOriginalScmInfo().put( key, value );
464     } //-- void addOriginalScmInfo( Object, String )
465 
466     /**
467      * Method addReleaseVersion.
468      * 
469      * @param key
470      * @param value
471      */
472     public void addReleaseVersion( Object key, String value )
473     {
474         getReleaseVersions().put( key, value );
475     } //-- void addReleaseVersion( Object, String )
476 
477     /**
478      * Method addResolvedSnapshotDependency.
479      * 
480      * @param key
481      * @param value
482      */
483     public void addResolvedSnapshotDependency( Object key, String value )
484     {
485         getResolvedSnapshotDependencies().put( key, value );
486     } //-- void addResolvedSnapshotDependency( Object, String )
487 
488     /**
489      * Get additional arguments to pass to any executed Maven
490      * process.
491      * 
492      * @return String
493      */
494     public String getAdditionalArguments()
495     {
496         return this.additionalArguments;
497     } //-- String getAdditionalArguments()
498 
499     /**
500      * Method getCheckModificationExcludes.
501      * 
502      * @return List
503      */
504     public java.util.List<String> getCheckModificationExcludes()
505     {
506         if ( this.checkModificationExcludes == null )
507         {
508             this.checkModificationExcludes = new java.util.ArrayList<String>();
509         }
510 
511         return this.checkModificationExcludes;
512     } //-- java.util.List<String> getCheckModificationExcludes()
513 
514     /**
515      * Get the directory where the tag will be checked out.
516      * 
517      * @return String
518      */
519     public String getCheckoutDirectory()
520     {
521         return this.checkoutDirectory;
522     } //-- String getCheckoutDirectory()
523 
524     /**
525      * Get the last completed phase.
526      * 
527      * @return String
528      */
529     public String getCompletedPhase()
530     {
531         return this.completedPhase;
532     } //-- String getCompletedPhase()
533 
534     /**
535      * Get the goals to execute in on completion of preparation for
536      * the release.
537      * 
538      * @return String
539      */
540     public String getCompletionGoals()
541     {
542         return this.completionGoals;
543     } //-- String getCompletionGoals()
544 
545     /**
546      * Get default version to use for new working copy.
547      * 
548      * @return String
549      */
550     public String getDefaultDevelopmentVersion()
551     {
552         return this.defaultDevelopmentVersion;
553     } //-- String getDefaultDevelopmentVersion()
554 
555     /**
556      * Get default version to use for the tagged release or the new
557      * branch.
558      * 
559      * @return String
560      */
561     public String getDefaultReleaseVersion()
562     {
563         return this.defaultReleaseVersion;
564     } //-- String getDefaultReleaseVersion()
565 
566     /**
567      * Get the description of this release configuration.
568      * 
569      * @return String
570      */
571     public String getDescription()
572     {
573         return this.description;
574     } //-- String getDescription()
575 
576     /**
577      * Method getDevelopmentVersions.
578      * 
579      * @return Map
580      */
581     public java.util.Map getDevelopmentVersions()
582     {
583         if ( this.developmentVersions == null )
584         {
585             this.developmentVersions = new java.util.HashMap();
586         }
587 
588         return this.developmentVersions;
589     } //-- java.util.Map getDevelopmentVersions()
590 
591     /**
592      * Get the modelEncoding field.
593      * 
594      * @return String
595      */
596     public String getModelEncoding()
597     {
598         return this.modelEncoding;
599     } //-- String getModelEncoding()
600 
601     /**
602      * Get the name of this release configuration.
603      * 
604      * @return String
605      */
606     public String getName()
607     {
608         return this.name;
609     } //-- String getName()
610 
611     /**
612      * Method getOriginalScmInfo.
613      * 
614      * @return Map
615      */
616     public java.util.Map getOriginalScmInfo()
617     {
618         if ( this.originalScmInfo == null )
619         {
620             this.originalScmInfo = new java.util.HashMap();
621         }
622 
623         return this.originalScmInfo;
624     } //-- java.util.Map getOriginalScmInfo()
625 
626     /**
627      * Get the goals to execute in perform phase for the release.
628      * 
629      * @return String
630      */
631     public String getPerformGoals()
632     {
633         return this.performGoals;
634     } //-- String getPerformGoals()
635 
636     /**
637      * Get the file name of the POM to pass to any executed Maven
638      * process.
639      * 
640      * @return String
641      */
642     public String getPomFileName()
643     {
644         return this.pomFileName;
645     } //-- String getPomFileName()
646 
647     /**
648      * Get the goals to execute in preparation for the release.
649      * 
650      * @return String
651      */
652     public String getPreparationGoals()
653     {
654         return this.preparationGoals;
655     } //-- String getPreparationGoals()
656 
657     /**
658      * Get the role-hint for the VersionPolicy implementation used
659      * to calculate the project versions.
660      * 
661      * @return String
662      */
663     public String getProjectVersionPolicyId()
664     {
665         return this.projectVersionPolicyId;
666     } //-- String getProjectVersionPolicyId()
667 
668     /**
669      * Method getReleaseVersions.
670      * 
671      * @return Map
672      */
673     public java.util.Map getReleaseVersions()
674     {
675         if ( this.releaseVersions == null )
676         {
677             this.releaseVersions = new java.util.HashMap();
678         }
679 
680         return this.releaseVersions;
681     } //-- java.util.Map getReleaseVersions()
682 
683     /**
684      * Method getResolvedSnapshotDependencies.
685      * 
686      * @return Map
687      */
688     public java.util.Map getResolvedSnapshotDependencies()
689     {
690         if ( this.resolvedSnapshotDependencies == null )
691         {
692             this.resolvedSnapshotDependencies = new java.util.HashMap();
693         }
694 
695         return this.resolvedSnapshotDependencies;
696     } //-- java.util.Map getResolvedSnapshotDependencies()
697 
698     /**
699      * Get where you are going to put your branched sources
700      *             Example
701      * https://svn.apache.org/repos/asf/maven/plugins/branches.
702      * 
703      * @return String
704      */
705     public String getScmBranchBase()
706     {
707         return this.scmBranchBase;
708     } //-- String getScmBranchBase()
709 
710     /**
711      * Get the prefix of SCM modification messages.
712      * 
713      * @return String
714      */
715     public String getScmCommentPrefix()
716     {
717         return this.ScmCommentPrefix;
718     } //-- String getScmCommentPrefix()
719 
720     /**
721      * Get the id can be used to get the credentials by the
722      * server-id from the settings.xml.
723      * 
724      * @return String
725      */
726     public String getScmId()
727     {
728         return this.scmId;
729     } //-- String getScmId()
730 
731     /**
732      * Get the password for the user interacting with the scm.
733      * 
734      * @return String
735      */
736     public String getScmPassword()
737     {
738         return this.scmPassword;
739     } //-- String getScmPassword()
740 
741     /**
742      * Get private key for an SSH based SCM repository.
743      * 
744      * @return String
745      */
746     public String getScmPrivateKey()
747     {
748         return this.scmPrivateKey;
749     } //-- String getScmPrivateKey()
750 
751     /**
752      * Get pass phrase for the private key.
753      * 
754      * @return String
755      */
756     public String getScmPrivateKeyPassPhrase()
757     {
758         return this.scmPrivateKeyPassPhrase;
759     } //-- String getScmPrivateKeyPassPhrase()
760 
761     /**
762      * Get relative path of the project returned by the checkout
763      * command.
764      * 
765      * @return String
766      */
767     public String getScmRelativePathProjectDirectory()
768     {
769         return this.scmRelativePathProjectDirectory;
770     } //-- String getScmRelativePathProjectDirectory()
771 
772     /**
773      * Get tag or branch name: the identifier for the tag/branch.
774      *             Example: maven-release-plugin-2.0.
775      * 
776      * @return String
777      */
778     public String getScmReleaseLabel()
779     {
780         return this.scmReleaseLabel;
781     } //-- String getScmReleaseLabel()
782 
783     /**
784      * Get nOTE : currently only implemented with svn scm. It
785      * contains the revision of the committed released pom to
786      * remotely tag
787      *             the source code with this revision.
788      * 
789      * @return String
790      */
791     public String getScmReleasedPomRevision()
792     {
793         return this.scmReleasedPomRevision;
794     } //-- String getScmReleasedPomRevision()
795 
796     /**
797      * Get this is a MavenSCM of where you're going to get the
798      * sources to make the release with.
799      *             Example:
800      * scm:svn:https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-release-plugin.
801      * 
802      * @return String
803      */
804     public String getScmSourceUrl()
805     {
806         return this.scmSourceUrl;
807     } //-- String getScmSourceUrl()
808 
809     /**
810      * Get where you are going to put your tagged sources
811      *             Example
812      * https://svn.apache.org/repos/asf/maven/plugins/tags.
813      * 
814      * @return String
815      */
816     public String getScmTagBase()
817     {
818         return this.scmTagBase;
819     } //-- String getScmTagBase()
820 
821     /**
822      * Get specifies the format for generating a tag name. Property
823      * expansion is
824      *             used with the optional prefix of project, where
825      * properties are delimited
826      *             with @{ and }.
827      * 
828      * @return String
829      */
830     public String getScmTagNameFormat()
831     {
832         return this.scmTagNameFormat;
833     } //-- String getScmTagNameFormat()
834 
835     /**
836      * Get the user name to interact with the scm.
837      * 
838      * @return String
839      */
840     public String getScmUsername()
841     {
842         return this.scmUsername;
843     } //-- String getScmUsername()
844 
845     /**
846      * Get wait the specified number of seconds before creating a
847      * tag.
848      * 
849      * @return int
850      */
851     public int getWaitBeforeTagging()
852     {
853         return this.waitBeforeTagging;
854     } //-- int getWaitBeforeTagging()
855 
856     /**
857      * Get the directory where the release is performed.
858      * 
859      * @return String
860      */
861     public String getWorkingDirectory()
862     {
863         return this.workingDirectory;
864     } //-- String getWorkingDirectory()
865 
866     /**
867      * Get whether to add the model schema to the top of the
868      * rewritten POM if it wasn't there already.
869      *             If <code>false</code> then the root element will
870      * remain untouched.
871      * 
872      * @return boolean
873      */
874     public boolean isAddSchema()
875     {
876         return this.addSchema;
877     } //-- boolean isAddSchema()
878 
879     /**
880      * Get should timestamped SNAPSHOT dependencies be allowed? 
881      * Default is to fail when any SNAPSHOT
882      *               dependency is found.
883      * 
884      * @return boolean
885      */
886     public boolean isAllowTimestampedSnapshots()
887     {
888         return this.allowTimestampedSnapshots;
889     } //-- boolean isAllowTimestampedSnapshots()
890 
891     /**
892      * Get whether to use the parent pom version for submodule
893      * versions.
894      * 
895      * @return boolean
896      */
897     public boolean isAutoVersionSubmodules()
898     {
899         return this.autoVersionSubmodules;
900     } //-- boolean isAutoVersionSubmodules()
901 
902     /**
903      * Get whether to create a branch instead of do a release.
904      * 
905      * @return boolean
906      */
907     public boolean isBranchCreation()
908     {
909         return this.branchCreation;
910     } //-- boolean isBranchCreation()
911 
912     /**
913      * Get the commits must be done by modules or not. Set it to
914      * true in case of flat directory structure.
915      * 
916      * @return boolean
917      */
918     public boolean isCommitByProject()
919     {
920         return this.commitByProject;
921     } //-- boolean isCommitByProject()
922 
923     /**
924      * Get whether to generate release POMs.
925      * 
926      * @return boolean
927      */
928     public boolean isGenerateReleasePoms()
929     {
930         return this.generateReleasePoms;
931     } //-- boolean isGenerateReleasePoms()
932 
933     /**
934      * Get whether the release process is interactive and the
935      * release manager should be prompted to
936      *             confirm values, or whether the defaults are used
937      * regardless.
938      * 
939      * @return boolean
940      */
941     public boolean isInteractive()
942     {
943         return this.interactive;
944     } //-- boolean isInteractive()
945 
946     /**
947      * Get if the scm provider should use local checkouts via
948      * file://${basedir}
949      *             instead of doing a clean checkout over the
950      * network.
951      *             This is very helpful for releasing large
952      * projects!
953      * 
954      * @return boolean
955      */
956     public boolean isLocalCheckout()
957     {
958         return this.localCheckout;
959     } //-- boolean isLocalCheckout()
960 
961     /**
962      * Get should distributed changes be pushed to the central
963      * repository?
964      *             For many distributed SCMs like Git, a change
965      * like a commit is only stored in your local copy of the
966      * repository.
967      *             Pushing the change allows your to more easily
968      * share it with other users.
969      * 
970      * @return boolean
971      */
972     public boolean isPushChanges()
973     {
974         return this.pushChanges;
975     } //-- boolean isPushChanges()
976 
977     /**
978      * Get nOTE : currently only implemented with svn scm. Enable a
979      * workaround to prevent issue due to svn client > 1.5.0
980      *             (http://jira.codehaus.org/browse/SCM-406).
981      * 
982      * @return boolean
983      */
984     public boolean isRemoteTagging()
985     {
986         return this.remoteTagging;
987     } //-- boolean isRemoteTagging()
988 
989     /**
990      * Get whether to use edit mode when making SCM modifications.
991      * This setting is disregarded
992      *             if the SCM does not support edit mode, or if
993      * edit mode is compulsory for the given SCM.
994      * 
995      * @return boolean
996      */
997     public boolean isScmUseEditMode()
998     {
999         return this.scmUseEditMode;
1000     } //-- boolean isScmUseEditMode()
1001 
1002     /**
1003      * Get whether a SNAPSHOT of the release plugin is allowed.
1004      * 
1005      * @return boolean
1006      */
1007     public boolean isSnapshotReleasePluginAllowed()
1008     {
1009         return this.snapshotReleasePluginAllowed;
1010     } //-- boolean isSnapshotReleasePluginAllowed()
1011 
1012     /**
1013      * Get whether to suppress a commit of changes to the working
1014      * copy before a tag or branch is created.
1015      * 
1016      * @return boolean
1017      */
1018     public boolean isSuppressCommitBeforeTagOrBranch()
1019     {
1020         return this.suppressCommitBeforeTagOrBranch;
1021     } //-- boolean isSuppressCommitBeforeTagOrBranch()
1022 
1023     /**
1024      * Get whether to update branch POM versions.
1025      * 
1026      * @return boolean
1027      */
1028     public boolean isUpdateBranchVersions()
1029     {
1030         return this.updateBranchVersions;
1031     } //-- boolean isUpdateBranchVersions()
1032 
1033     /**
1034      * Get if updateDependencies is false, dependencies version
1035      * won't be updated to the next development version.
1036      * 
1037      * @return boolean
1038      */
1039     public boolean isUpdateDependencies()
1040     {
1041         return this.updateDependencies;
1042     } //-- boolean isUpdateDependencies()
1043 
1044     /**
1045      * Get whether to update branch versions to SNAPSHOT.
1046      * 
1047      * @return boolean
1048      */
1049     public boolean isUpdateVersionsToSnapshot()
1050     {
1051         return this.updateVersionsToSnapshot;
1052     } //-- boolean isUpdateVersionsToSnapshot()
1053 
1054     /**
1055      * Get whether to update working copy POM versions.
1056      * 
1057      * @return boolean
1058      */
1059     public boolean isUpdateWorkingCopyVersions()
1060     {
1061         return this.updateWorkingCopyVersions;
1062     } //-- boolean isUpdateWorkingCopyVersions()
1063 
1064     /**
1065      * Get whether to use the release profile that adds sources and
1066      * javadocs to the released artifact, if appropriate.
1067      *             If set to true, this will set the property
1068      * "performRelease" to true.
1069      * 
1070      * @return boolean
1071      */
1072     public boolean isUseReleaseProfile()
1073     {
1074         return this.useReleaseProfile;
1075     } //-- boolean isUseReleaseProfile()
1076 
1077     /**
1078      * Method removeCheckModificationExclude.
1079      * 
1080      * @param string
1081      */
1082     public void removeCheckModificationExclude( String string )
1083     {
1084         getCheckModificationExcludes().remove( string );
1085     } //-- void removeCheckModificationExclude( String )
1086 
1087     /**
1088      * Set whether to add the model schema to the top of the
1089      * rewritten POM if it wasn't there already.
1090      *             If <code>false</code> then the root element will
1091      * remain untouched.
1092      * 
1093      * @param addSchema
1094      */
1095     public void setAddSchema( boolean addSchema )
1096     {
1097         this.addSchema = addSchema;
1098     } //-- void setAddSchema( boolean )
1099 
1100     /**
1101      * Set additional arguments to pass to any executed Maven
1102      * process.
1103      * 
1104      * @param additionalArguments
1105      */
1106     public void setAdditionalArguments( String additionalArguments )
1107     {
1108         this.additionalArguments = additionalArguments;
1109     } //-- void setAdditionalArguments( String )
1110 
1111     /**
1112      * Set should timestamped SNAPSHOT dependencies be allowed? 
1113      * Default is to fail when any SNAPSHOT
1114      *               dependency is found.
1115      * 
1116      * @param allowTimestampedSnapshots
1117      */
1118     public void setAllowTimestampedSnapshots( boolean allowTimestampedSnapshots )
1119     {
1120         this.allowTimestampedSnapshots = allowTimestampedSnapshots;
1121     } //-- void setAllowTimestampedSnapshots( boolean )
1122 
1123     /**
1124      * Set whether to use the parent pom version for submodule
1125      * versions.
1126      * 
1127      * @param autoVersionSubmodules
1128      */
1129     public void setAutoVersionSubmodules( boolean autoVersionSubmodules )
1130     {
1131         this.autoVersionSubmodules = autoVersionSubmodules;
1132     } //-- void setAutoVersionSubmodules( boolean )
1133 
1134     /**
1135      * Set whether to create a branch instead of do a release.
1136      * 
1137      * @param branchCreation
1138      */
1139     public void setBranchCreation( boolean branchCreation )
1140     {
1141         this.branchCreation = branchCreation;
1142     } //-- void setBranchCreation( boolean )
1143 
1144     /**
1145      * Set in some exceptions you want to allow changes to the
1146      * working copy. Changes
1147      *             to files listed here will not make the
1148      * ScmCheckModificationsPhase fail.
1149      * 
1150      * @param checkModificationExcludes
1151      */
1152     public void setCheckModificationExcludes( java.util.List<String> checkModificationExcludes )
1153     {
1154         this.checkModificationExcludes = checkModificationExcludes;
1155     } //-- void setCheckModificationExcludes( java.util.List )
1156 
1157     /**
1158      * Set the directory where the tag will be checked out.
1159      * 
1160      * @param checkoutDirectory
1161      */
1162     public void setCheckoutDirectory( String checkoutDirectory )
1163     {
1164         this.checkoutDirectory = checkoutDirectory;
1165     } //-- void setCheckoutDirectory( String )
1166 
1167     /**
1168      * Set the commits must be done by modules or not. Set it to
1169      * true in case of flat directory structure.
1170      * 
1171      * @param commitByProject
1172      */
1173     public void setCommitByProject( boolean commitByProject )
1174     {
1175         this.commitByProject = commitByProject;
1176     } //-- void setCommitByProject( boolean )
1177 
1178     /**
1179      * Set the last completed phase.
1180      * 
1181      * @param completedPhase
1182      */
1183     public void setCompletedPhase( String completedPhase )
1184     {
1185         this.completedPhase = completedPhase;
1186     } //-- void setCompletedPhase( String )
1187 
1188     /**
1189      * Set the goals to execute in on completion of preparation for
1190      * the release.
1191      * 
1192      * @param completionGoals
1193      */
1194     public void setCompletionGoals( String completionGoals )
1195     {
1196         this.completionGoals = completionGoals;
1197     } //-- void setCompletionGoals( String )
1198 
1199     /**
1200      * Set default version to use for new working copy.
1201      * 
1202      * @param defaultDevelopmentVersion
1203      */
1204     public void setDefaultDevelopmentVersion( String defaultDevelopmentVersion )
1205     {
1206         this.defaultDevelopmentVersion = defaultDevelopmentVersion;
1207     } //-- void setDefaultDevelopmentVersion( String )
1208 
1209     /**
1210      * Set default version to use for the tagged release or the new
1211      * branch.
1212      * 
1213      * @param defaultReleaseVersion
1214      */
1215     public void setDefaultReleaseVersion( String defaultReleaseVersion )
1216     {
1217         this.defaultReleaseVersion = defaultReleaseVersion;
1218     } //-- void setDefaultReleaseVersion( String )
1219 
1220     /**
1221      * Set the description of this release configuration.
1222      * 
1223      * @param description
1224      */
1225     public void setDescription( String description )
1226     {
1227         this.description = description;
1228     } //-- void setDescription( String )
1229 
1230     /**
1231      * Set a map of projects to versions to use when moving the
1232      * given projects back into development after release.
1233      * 
1234      * @param developmentVersions
1235      */
1236     public void setDevelopmentVersions( java.util.Map developmentVersions )
1237     {
1238         this.developmentVersions = developmentVersions;
1239     } //-- void setDevelopmentVersions( java.util.Map )
1240 
1241     /**
1242      * Set whether to generate release POMs.
1243      * 
1244      * @param generateReleasePoms
1245      */
1246     public void setGenerateReleasePoms( boolean generateReleasePoms )
1247     {
1248         this.generateReleasePoms = generateReleasePoms;
1249     } //-- void setGenerateReleasePoms( boolean )
1250 
1251     /**
1252      * Set whether the release process is interactive and the
1253      * release manager should be prompted to
1254      *             confirm values, or whether the defaults are used
1255      * regardless.
1256      * 
1257      * @param interactive
1258      */
1259     public void setInteractive( boolean interactive )
1260     {
1261         this.interactive = interactive;
1262     } //-- void setInteractive( boolean )
1263 
1264     /**
1265      * Set if the scm provider should use local checkouts via
1266      * file://${basedir}
1267      *             instead of doing a clean checkout over the
1268      * network.
1269      *             This is very helpful for releasing large
1270      * projects!
1271      * 
1272      * @param localCheckout
1273      */
1274     public void setLocalCheckout( boolean localCheckout )
1275     {
1276         this.localCheckout = localCheckout;
1277     } //-- void setLocalCheckout( boolean )
1278 
1279     /**
1280      * Set the modelEncoding field.
1281      * 
1282      * @param modelEncoding
1283      */
1284     public void setModelEncoding( String modelEncoding )
1285     {
1286         this.modelEncoding = modelEncoding;
1287     } //-- void setModelEncoding( String )
1288 
1289     /**
1290      * Set the name of this release configuration.
1291      * 
1292      * @param name
1293      */
1294     public void setName( String name )
1295     {
1296         this.name = name;
1297     } //-- void setName( String )
1298 
1299     /**
1300      * Set a map of projects to original SCM information.
1301      * 
1302      * @param originalScmInfo
1303      */
1304     public void setOriginalScmInfo( java.util.Map originalScmInfo )
1305     {
1306         this.originalScmInfo = originalScmInfo;
1307     } //-- void setOriginalScmInfo( java.util.Map )
1308 
1309     /**
1310      * Set the goals to execute in perform phase for the release.
1311      * 
1312      * @param performGoals
1313      */
1314     public void setPerformGoals( String performGoals )
1315     {
1316         this.performGoals = performGoals;
1317     } //-- void setPerformGoals( String )
1318 
1319     /**
1320      * Set the file name of the POM to pass to any executed Maven
1321      * process.
1322      * 
1323      * @param pomFileName
1324      */
1325     public void setPomFileName( String pomFileName )
1326     {
1327         this.pomFileName = pomFileName;
1328     } //-- void setPomFileName( String )
1329 
1330     /**
1331      * Set the goals to execute in preparation for the release.
1332      * 
1333      * @param preparationGoals
1334      */
1335     public void setPreparationGoals( String preparationGoals )
1336     {
1337         this.preparationGoals = preparationGoals;
1338     } //-- void setPreparationGoals( String )
1339 
1340     /**
1341      * Set the role-hint for the VersionPolicy implementation used
1342      * to calculate the project versions.
1343      * 
1344      * @param projectVersionPolicyId
1345      */
1346     public void setProjectVersionPolicyId( String projectVersionPolicyId )
1347     {
1348         this.projectVersionPolicyId = projectVersionPolicyId;
1349     } //-- void setProjectVersionPolicyId( String )
1350 
1351     /**
1352      * Set should distributed changes be pushed to the central
1353      * repository?
1354      *             For many distributed SCMs like Git, a change
1355      * like a commit is only stored in your local copy of the
1356      * repository.
1357      *             Pushing the change allows your to more easily
1358      * share it with other users.
1359      * 
1360      * @param pushChanges
1361      */
1362     public void setPushChanges( boolean pushChanges )
1363     {
1364         this.pushChanges = pushChanges;
1365     } //-- void setPushChanges( boolean )
1366 
1367     /**
1368      * Set a map of projects to versions to use when releasing the
1369      * given projects.
1370      * 
1371      * @param releaseVersions
1372      */
1373     public void setReleaseVersions( java.util.Map releaseVersions )
1374     {
1375         this.releaseVersions = releaseVersions;
1376     } //-- void setReleaseVersions( java.util.Map )
1377 
1378     /**
1379      * Set nOTE : currently only implemented with svn scm. Enable a
1380      * workaround to prevent issue due to svn client > 1.5.0
1381      *             (http://jira.codehaus.org/browse/SCM-406).
1382      * 
1383      * @param remoteTagging
1384      */
1385     public void setRemoteTagging( boolean remoteTagging )
1386     {
1387         this.remoteTagging = remoteTagging;
1388     } //-- void setRemoteTagging( boolean )
1389 
1390     /**
1391      * Set a map of resolved snapshot dependencies versions.
1392      * 
1393      * @param resolvedSnapshotDependencies
1394      */
1395     public void setResolvedSnapshotDependencies( java.util.Map resolvedSnapshotDependencies )
1396     {
1397         this.resolvedSnapshotDependencies = resolvedSnapshotDependencies;
1398     } //-- void setResolvedSnapshotDependencies( java.util.Map )
1399 
1400     /**
1401      * Set where you are going to put your branched sources
1402      *             Example
1403      * https://svn.apache.org/repos/asf/maven/plugins/branches.
1404      * 
1405      * @param scmBranchBase
1406      */
1407     public void setScmBranchBase( String scmBranchBase )
1408     {
1409         this.scmBranchBase = scmBranchBase;
1410     } //-- void setScmBranchBase( String )
1411 
1412     /**
1413      * Set the prefix of SCM modification messages.
1414      * 
1415      * @param ScmCommentPrefix
1416      */
1417     public void setScmCommentPrefix( String ScmCommentPrefix )
1418     {
1419         this.ScmCommentPrefix = ScmCommentPrefix;
1420     } //-- void setScmCommentPrefix( String )
1421 
1422     /**
1423      * Set the id can be used to get the credentials by the
1424      * server-id from the settings.xml.
1425      * 
1426      * @param scmId
1427      */
1428     public void setScmId( String scmId )
1429     {
1430         this.scmId = scmId;
1431     } //-- void setScmId( String )
1432 
1433     /**
1434      * Set the password for the user interacting with the scm.
1435      * 
1436      * @param scmPassword
1437      */
1438     public void setScmPassword( String scmPassword )
1439     {
1440         this.scmPassword = scmPassword;
1441     } //-- void setScmPassword( String )
1442 
1443     /**
1444      * Set private key for an SSH based SCM repository.
1445      * 
1446      * @param scmPrivateKey
1447      */
1448     public void setScmPrivateKey( String scmPrivateKey )
1449     {
1450         this.scmPrivateKey = scmPrivateKey;
1451     } //-- void setScmPrivateKey( String )
1452 
1453     /**
1454      * Set pass phrase for the private key.
1455      * 
1456      * @param scmPrivateKeyPassPhrase
1457      */
1458     public void setScmPrivateKeyPassPhrase( String scmPrivateKeyPassPhrase )
1459     {
1460         this.scmPrivateKeyPassPhrase = scmPrivateKeyPassPhrase;
1461     } //-- void setScmPrivateKeyPassPhrase( String )
1462 
1463     /**
1464      * Set relative path of the project returned by the checkout
1465      * command.
1466      * 
1467      * @param scmRelativePathProjectDirectory
1468      */
1469     public void setScmRelativePathProjectDirectory( String scmRelativePathProjectDirectory )
1470     {
1471         this.scmRelativePathProjectDirectory = scmRelativePathProjectDirectory;
1472     } //-- void setScmRelativePathProjectDirectory( String )
1473 
1474     /**
1475      * Set tag or branch name: the identifier for the tag/branch.
1476      *             Example: maven-release-plugin-2.0.
1477      * 
1478      * @param scmReleaseLabel
1479      */
1480     public void setScmReleaseLabel( String scmReleaseLabel )
1481     {
1482         this.scmReleaseLabel = scmReleaseLabel;
1483     } //-- void setScmReleaseLabel( String )
1484 
1485     /**
1486      * Set nOTE : currently only implemented with svn scm. It
1487      * contains the revision of the committed released pom to
1488      * remotely tag
1489      *             the source code with this revision.
1490      * 
1491      * @param scmReleasedPomRevision
1492      */
1493     public void setScmReleasedPomRevision( String scmReleasedPomRevision )
1494     {
1495         this.scmReleasedPomRevision = scmReleasedPomRevision;
1496     } //-- void setScmReleasedPomRevision( String )
1497 
1498     /**
1499      * Set this is a MavenSCM of where you're going to get the
1500      * sources to make the release with.
1501      *             Example:
1502      * scm:svn:https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-release-plugin.
1503      * 
1504      * @param scmSourceUrl
1505      */
1506     public void setScmSourceUrl( String scmSourceUrl )
1507     {
1508         this.scmSourceUrl = scmSourceUrl;
1509     } //-- void setScmSourceUrl( String )
1510 
1511     /**
1512      * Set where you are going to put your tagged sources
1513      *             Example
1514      * https://svn.apache.org/repos/asf/maven/plugins/tags.
1515      * 
1516      * @param scmTagBase
1517      */
1518     public void setScmTagBase( String scmTagBase )
1519     {
1520         this.scmTagBase = scmTagBase;
1521     } //-- void setScmTagBase( String )
1522 
1523     /**
1524      * Set specifies the format for generating a tag name. Property
1525      * expansion is
1526      *             used with the optional prefix of project, where
1527      * properties are delimited
1528      *             with @{ and }.
1529      * 
1530      * @param scmTagNameFormat
1531      */
1532     public void setScmTagNameFormat( String scmTagNameFormat )
1533     {
1534         this.scmTagNameFormat = scmTagNameFormat;
1535     } //-- void setScmTagNameFormat( String )
1536 
1537     /**
1538      * Set whether to use edit mode when making SCM modifications.
1539      * This setting is disregarded
1540      *             if the SCM does not support edit mode, or if
1541      * edit mode is compulsory for the given SCM.
1542      * 
1543      * @param scmUseEditMode
1544      */
1545     public void setScmUseEditMode( boolean scmUseEditMode )
1546     {
1547         this.scmUseEditMode = scmUseEditMode;
1548     } //-- void setScmUseEditMode( boolean )
1549 
1550     /**
1551      * Set the user name to interact with the scm.
1552      * 
1553      * @param scmUsername
1554      */
1555     public void setScmUsername( String scmUsername )
1556     {
1557         this.scmUsername = scmUsername;
1558     } //-- void setScmUsername( String )
1559 
1560     /**
1561      * Set whether a SNAPSHOT of the release plugin is allowed.
1562      * 
1563      * @param snapshotReleasePluginAllowed
1564      */
1565     public void setSnapshotReleasePluginAllowed( boolean snapshotReleasePluginAllowed )
1566     {
1567         this.snapshotReleasePluginAllowed = snapshotReleasePluginAllowed;
1568     } //-- void setSnapshotReleasePluginAllowed( boolean )
1569 
1570     /**
1571      * Set whether to suppress a commit of changes to the working
1572      * copy before a tag or branch is created.
1573      * 
1574      * @param suppressCommitBeforeTagOrBranch
1575      */
1576     public void setSuppressCommitBeforeTagOrBranch( boolean suppressCommitBeforeTagOrBranch )
1577     {
1578         this.suppressCommitBeforeTagOrBranch = suppressCommitBeforeTagOrBranch;
1579     } //-- void setSuppressCommitBeforeTagOrBranch( boolean )
1580 
1581     /**
1582      * Set whether to update branch POM versions.
1583      * 
1584      * @param updateBranchVersions
1585      */
1586     public void setUpdateBranchVersions( boolean updateBranchVersions )
1587     {
1588         this.updateBranchVersions = updateBranchVersions;
1589     } //-- void setUpdateBranchVersions( boolean )
1590 
1591     /**
1592      * Set if updateDependencies is false, dependencies version
1593      * won't be updated to the next development version.
1594      * 
1595      * @param updateDependencies
1596      */
1597     public void setUpdateDependencies( boolean updateDependencies )
1598     {
1599         this.updateDependencies = updateDependencies;
1600     } //-- void setUpdateDependencies( boolean )
1601 
1602     /**
1603      * Set whether to update branch versions to SNAPSHOT.
1604      * 
1605      * @param updateVersionsToSnapshot
1606      */
1607     public void setUpdateVersionsToSnapshot( boolean updateVersionsToSnapshot )
1608     {
1609         this.updateVersionsToSnapshot = updateVersionsToSnapshot;
1610     } //-- void setUpdateVersionsToSnapshot( boolean )
1611 
1612     /**
1613      * Set whether to update working copy POM versions.
1614      * 
1615      * @param updateWorkingCopyVersions
1616      */
1617     public void setUpdateWorkingCopyVersions( boolean updateWorkingCopyVersions )
1618     {
1619         this.updateWorkingCopyVersions = updateWorkingCopyVersions;
1620     } //-- void setUpdateWorkingCopyVersions( boolean )
1621 
1622     /**
1623      * Set whether to use the release profile that adds sources and
1624      * javadocs to the released artifact, if appropriate.
1625      *             If set to true, this will set the property
1626      * "performRelease" to true.
1627      * 
1628      * @param useReleaseProfile
1629      */
1630     public void setUseReleaseProfile( boolean useReleaseProfile )
1631     {
1632         this.useReleaseProfile = useReleaseProfile;
1633     } //-- void setUseReleaseProfile( boolean )
1634 
1635     /**
1636      * Set wait the specified number of seconds before creating a
1637      * tag.
1638      * 
1639      * @param waitBeforeTagging
1640      */
1641     public void setWaitBeforeTagging( int waitBeforeTagging )
1642     {
1643         this.waitBeforeTagging = waitBeforeTagging;
1644     } //-- void setWaitBeforeTagging( int )
1645 
1646     /**
1647      * Set the directory where the release is performed.
1648      * 
1649      * @param workingDirectory
1650      */
1651     public void setWorkingDirectory( String workingDirectory )
1652     {
1653         this.workingDirectory = workingDirectory;
1654     } //-- void setWorkingDirectory( String )
1655 
1656     
1657     public static final String DEVELOPMENT_KEY = "dev";
1658 
1659     public static final String RELEASE_KEY = "rel";
1660 
1661     public static final String ORIGINAL_VERSION = "original";
1662 
1663     /**
1664      * Map a given snapshot dependency to a specified version from when it is released.
1665      *
1666      */
1667     public void mapResolvedSnapshotDependencies( String artifactName, String releaseVersion, String developmentVersion )
1668     {
1669         if ( resolvedSnapshotDependencies == null )
1670         {
1671             resolvedSnapshotDependencies = new java.util.HashMap();
1672         }
1673         else
1674         {
1675             assert !resolvedSnapshotDependencies.containsKey( artifactName );
1676         }
1677 
1678         java.util.Map versionsMap = new java.util.HashMap();
1679 
1680         versionsMap.put( DEVELOPMENT_KEY, developmentVersion );
1681         versionsMap.put( RELEASE_KEY, releaseVersion );
1682         resolvedSnapshotDependencies.put( artifactName, versionsMap );
1683     }
1684 
1685     /**
1686      * Map a given project to a specified version from when it is released.
1687      *
1688      * @param projectId   the project's group and artifact ID
1689      * @param nextVersion the version to map to
1690      */
1691     public void mapReleaseVersion( String projectId, String nextVersion )
1692     {
1693         if ( releaseVersions == null )
1694         {
1695             releaseVersions = new java.util.HashMap();
1696         }
1697 
1698         releaseVersions.put( projectId, nextVersion );
1699     }
1700 
1701     /**
1702      * Map a given project to a specified version from when it is incremented and placed back into development.
1703      *
1704      * @param projectId   the project's group and artifact ID
1705      * @param nextVersion the version to map to
1706      */
1707     public void mapDevelopmentVersion( String projectId, String nextVersion )
1708     {
1709         if ( developmentVersions == null )
1710         {
1711             developmentVersions = new java.util.HashMap();
1712         }
1713 
1714         developmentVersions.put( projectId, nextVersion );
1715     }
1716 
1717     /**
1718      * Map a given project to a specified set of SCM information.
1719      *
1720      * @param projectId the project's group and artifact ID
1721      * @param scm       the original SCM information to store
1722      */
1723     public void mapOriginalScmInfo( String projectId, org.apache.maven.model.Scm scm )
1724     {
1725         if ( originalScmInfo == null )
1726         {
1727             originalScmInfo = new java.util.HashMap();
1728         }
1729         else
1730         {
1731             assert !originalScmInfo.containsKey( projectId );
1732         }
1733 
1734         originalScmInfo.put( projectId, scm );
1735     }
1736 
1737     /**
1738      * A map of projects to original versions before any transformation.
1739      */
1740     private java.util.Map originalVersions;
1741 
1742     /**
1743      * Retrieve the original version map, before transformation, keyed by project's versionless identifier.
1744      *
1745      * @param reactorProjects The reactor projects.
1746      *
1747      * @return the map of project IDs to versions.
1748      */
1749     public synchronized java.util.Map<String, String> getOriginalVersions( java.util.List<org.apache.maven.project.MavenProject> reactorProjects )
1750     {
1751         if ( originalVersions == null )
1752         {
1753             originalVersions = new java.util.HashMap();
1754             for ( org.apache.maven.project.MavenProject project : reactorProjects )
1755             {
1756                 originalVersions.put( org.apache.maven.artifact.ArtifactUtils.versionlessKey( project.getGroupId(),
1757                                       project.getArtifactId() ), project.getVersion() );
1758             }
1759         }
1760         return originalVersions;
1761     }
1762 
1763     /**
1764      * Retrieve the release version for the resolved snapshot dependency.
1765      *
1766      */
1767     public String getDependencyDevelopmentVersion( String artifactConflictId )
1768     {
1769         if ( ( resolvedSnapshotDependencies == null ) && ( resolvedSnapshotDependencies.containsKey( artifactConflictId ) ) )
1770         {
1771             java.util.Map versionMap = ( java.util.Map ) resolvedSnapshotDependencies.get( artifactConflictId );
1772             return ( String ) versionMap.get( DEVELOPMENT_KEY );
1773         }
1774         return null;
1775     }
1776 
1777     /**
1778      * Retrieve the release version for the resolved snapshot dependency.
1779      *
1780      */
1781     public String getDependencyReleaseVersion( String artifactConflictId )
1782     {
1783         if ( ( resolvedSnapshotDependencies == null ) && ( resolvedSnapshotDependencies.containsKey( artifactConflictId ) ) )
1784         {
1785             java.util.Map versionMap = ( java.util.Map ) resolvedSnapshotDependencies.get( artifactConflictId );
1786             return ( String ) versionMap.get( RELEASE_KEY );
1787         }
1788         return null;
1789     }
1790 
1791     boolean safeEquals( String a, String b )
1792     {
1793         return a != null ? a.equals( b ) : b == null;
1794     }
1795 
1796     public boolean equals( Object obj )
1797     {
1798         if ( this == obj )
1799         {
1800             return true;
1801         }
1802         if ( obj == null || getClass() != obj.getClass() )
1803         {
1804             return false;
1805         }
1806 
1807         ReleaseDescriptor that = (ReleaseDescriptor) obj;
1808 
1809         if ( updateDependencies        != that.updateDependencies       ||
1810              useReleaseProfile         != that.useReleaseProfile        ||
1811              autoVersionSubmodules     != that.autoVersionSubmodules    ||
1812              snapshotReleasePluginAllowed != that.snapshotReleasePluginAllowed ||
1813              commitByProject           != that.commitByProject          ||
1814              branchCreation            != that.branchCreation           ||
1815              updateBranchVersions      != that.updateBranchVersions     ||
1816              updateWorkingCopyVersions != that.updateWorkingCopyVersions||
1817              suppressCommitBeforeTagOrBranch   != that.suppressCommitBeforeTagOrBranch  ||
1818              updateVersionsToSnapshot  != that.updateVersionsToSnapshot ||
1819              allowTimestampedSnapshots != that.allowTimestampedSnapshots||
1820              remoteTagging             != that.remoteTagging            ||
1821              localCheckout             != that.localCheckout            ||
1822              pushChanges               != that.pushChanges
1823            )
1824            {
1825                return false;
1826            }
1827 
1828         if ( !safeEquals( defaultDevelopmentVersion, that.defaultDevelopmentVersion ) ||
1829              !safeEquals( scmRelativePathProjectDirectory, that.scmRelativePathProjectDirectory ) ||
1830              !safeEquals( checkoutDirectory, that.checkoutDirectory ) ||
1831              !safeEquals( performGoals, that.performGoals ) ||
1832              !safeEquals( defaultReleaseVersion, that.defaultReleaseVersion ) ||
1833              !safeEquals( scmReleasedPomRevision, that.scmReleasedPomRevision )
1834            )
1835         {
1836             return false;
1837         }
1838 
1839         if ( addSchema != that.addSchema )
1840         {
1841             return false;
1842         }
1843         if ( generateReleasePoms != that.generateReleasePoms )
1844         {
1845             return false;
1846         }
1847         if ( interactive != that.interactive )
1848         {
1849             return false;
1850         }
1851         if ( scmUseEditMode != that.scmUseEditMode )
1852         {
1853             return false;
1854         }
1855         if ( !safeEquals( completedPhase, that.completedPhase ) )
1856         {
1857             return false;
1858         }
1859         if ( ( checkModificationExcludes == null || ( checkModificationExcludes != null && checkModificationExcludes.size() == 0) ) &&
1860             ( that.checkModificationExcludes == null || ( that.checkModificationExcludes != null && that.checkModificationExcludes.size() == 0) ) )
1861         {
1862             // Do nothing.  This is a Modello workaround
1863         }
1864         else
1865         {
1866             if ( checkModificationExcludes != null ? !checkModificationExcludes.equals( that.checkModificationExcludes )
1867                 : that.checkModificationExcludes != null )
1868             {
1869                 return false;
1870             }
1871         }
1872         if ( ( developmentVersions == null || ( developmentVersions != null && developmentVersions.size() == 0) ) &&
1873             ( that.developmentVersions == null || ( that.developmentVersions != null && that.developmentVersions.size() == 0) ) )
1874         {
1875             // Do nothing.  This is a Modello workaround
1876         }
1877         else
1878         {
1879             if ( developmentVersions != null ? !developmentVersions.equals( that.developmentVersions )
1880                 : that.developmentVersions != null )
1881             {
1882                 return false;
1883             }
1884         }
1885         if ( ( originalScmInfo == null || (originalScmInfo != null && originalScmInfo.size() == 0 ) ) &&
1886             ( that.originalScmInfo == null || ( that.originalScmInfo != null && that.originalScmInfo.size() == 0 ) ) )
1887         {
1888             // Do nothing.  This is a Modello workaround
1889         }
1890         else
1891         {
1892             if ( originalScmInfo != null ? !compareScmCollections( that.originalScmInfo ) : that.originalScmInfo != null )
1893             {
1894                 return false;
1895             }
1896         }
1897         if ( ( releaseVersions == null || ( releaseVersions != null && releaseVersions.size() == 0 ) ) &&
1898             ( that.releaseVersions == null || ( that.releaseVersions != null && that.releaseVersions.size() == 0 ) ) )
1899         {
1900             // Do nothing.  This is a Modello workaround
1901         }
1902         else
1903         {
1904             if ( releaseVersions != null ? !releaseVersions.equals( that.releaseVersions ) : that.releaseVersions != null )
1905             {
1906                 return false;
1907             }
1908         }
1909         if ( !safeEquals( additionalArguments, that.additionalArguments ) )
1910         {
1911             return false;
1912         }
1913         if ( !safeEquals( preparationGoals, that.preparationGoals ) )
1914         {
1915             return false;
1916         }
1917         if ( !safeEquals( completionGoals, that.completionGoals ) )
1918         {
1919             return false;
1920         }
1921         if ( !safeEquals( pomFileName, that.pomFileName ) )
1922         {
1923             return false;
1924         }
1925         if ( !safeEquals( scmPrivateKeyPassPhrase, that.scmPrivateKeyPassPhrase ) )
1926         {
1927             return false;
1928         }
1929         if ( !safeEquals( scmPassword, that.scmPassword ) )
1930         {
1931             return false;
1932         }
1933         if ( !safeEquals( scmPrivateKey, that.scmPrivateKey ) )
1934         {
1935             return false;
1936         }
1937         if ( !safeEquals( scmReleaseLabel, that.scmReleaseLabel ) )
1938         {
1939             return false;
1940         }
1941         if ( !safeEquals( scmTagBase, that.scmTagBase ) )
1942         {
1943             return false;
1944         }
1945         if ( !safeEquals( scmBranchBase, that.scmBranchBase ) )
1946         {
1947             return false;
1948         }
1949         if ( !safeEquals( scmId, that.scmId ) )
1950         {
1951             return false;
1952         }
1953         if ( !safeEquals( scmSourceUrl, that.scmSourceUrl ) )
1954         {
1955             return false;
1956         }
1957         if ( !safeEquals( scmUsername, that.scmUsername ) )
1958         {
1959             return false;
1960         }
1961         if ( !safeEquals( workingDirectory, that.workingDirectory ) )
1962         {
1963             return false;
1964         }
1965         if ( !safeEquals( scmTagNameFormat, that.scmTagNameFormat ) )
1966         {
1967             return false;
1968         }
1969 
1970         return true;
1971     }
1972 
1973     private boolean compareScmCollections( java.util.Map that )
1974     {
1975         // Must manually compare as Scm doesn't have an equals method
1976         if ( that == null && originalScmInfo == null )
1977         {
1978             return true;
1979         }
1980 
1981         if ( ( that == null && originalScmInfo != null ) || ( that != null && originalScmInfo == null ) )
1982         {
1983             return false;
1984         }
1985 
1986         if ( that.size() != originalScmInfo.size() )
1987         {
1988             return false;
1989         }
1990 
1991         for ( java.util.Iterator i = originalScmInfo.entrySet().iterator(); i.hasNext(); )
1992         {
1993             java.util.Map.Entry entry = (java.util.Map.Entry) i.next();
1994 
1995             org.apache.maven.model.Scm thatScm = (org.apache.maven.model.Scm) that.get( entry.getKey() );
1996 
1997             org.apache.maven.model.Scm thisScm = (org.apache.maven.model.Scm) entry.getValue();
1998             if ( thatScm == null && thisScm == null )
1999             {
2000                 return true;
2001             }
2002             else if ( thatScm == null )
2003             {
2004                 return false;
2005             }
2006             else if ( thisScm == null )
2007             {
2008                 return true;
2009             }
2010             
2011             if ( thisScm.getConnection() != null ? !thisScm.getConnection().equals( thatScm.getConnection() )
2012                 : thatScm.getConnection() != null )
2013             {
2014                 return false;
2015             }
2016             if ( thisScm.getDeveloperConnection() != null ? !thisScm.getDeveloperConnection().equals(
2017                 thatScm.getDeveloperConnection() ) : thatScm.getDeveloperConnection() != null )
2018             {
2019                 return false;
2020             }
2021             if ( thisScm.getUrl() != null ? !thisScm.getUrl().equals( thatScm.getUrl() ) : thatScm.getUrl() != null )
2022             {
2023                 return false;
2024             }
2025             if ( thisScm.getTag() != null ? !thisScm.getTag().equals( thatScm.getTag() ) : thatScm.getTag() != null )
2026             {
2027                 return false;
2028             }
2029             
2030             if ( thisScm instanceof org.apache.maven.shared.release.scm.IdentifiedScm && thatScm instanceof org.apache.maven.shared.release.scm.IdentifiedScm )
2031             {
2032             	org.apache.maven.shared.release.scm.IdentifiedScm thisIdentifiedScm = (org.apache.maven.shared.release.scm.IdentifiedScm) thisScm;
2033             	org.apache.maven.shared.release.scm.IdentifiedScm thatIdentifiedScm = (org.apache.maven.shared.release.scm.IdentifiedScm) thatScm;
2034             	if ( thisIdentifiedScm.getId() != null ? !thisIdentifiedScm.getId().equals( thatIdentifiedScm.getId() ) : thatIdentifiedScm.getId() != null )
2035             	{
2036                 	return false;
2037             	}
2038             }
2039         }
2040 
2041         return true;
2042     }
2043 
2044     public int hashCode()
2045     {
2046         int result = completedPhase != null ? completedPhase.hashCode() : 0;
2047         result = 29 * result + ( scmReleaseLabel != null ? scmReleaseLabel.hashCode() : 0 );
2048         result = 29 * result + ( additionalArguments != null ? additionalArguments.hashCode() : 0 );
2049         result = 29 * result + ( preparationGoals != null ? preparationGoals.hashCode() : 0 );
2050         result = 29 * result + ( completionGoals != null ? completionGoals.hashCode() : 0 );
2051         result = 29 * result + ( pomFileName != null ? pomFileName.hashCode() : 0 );
2052         result = 29 * result + ( checkModificationExcludes != null ? checkModificationExcludes.hashCode() : 0 );
2053         result = 29 * result + ( scmTagBase != null ? scmTagBase.hashCode() : 0 );
2054         result = 29 * result + ( scmBranchBase != null ? scmBranchBase.hashCode() : 0 );
2055         result = 29 * result + ( scmUsername != null ? scmUsername.hashCode() : 0 );
2056         result = 29 * result + ( scmPassword != null ? scmPassword.hashCode() : 0 );
2057         result = 29 * result + ( scmId != null ? scmId.hashCode() : 0 );
2058         result = 29 * result + ( scmSourceUrl != null ? scmSourceUrl.hashCode() : 0 );
2059         result = 29 * result + ( scmPrivateKey != null ? scmPrivateKey.hashCode() : 0 );
2060         result = 29 * result + ( scmPrivateKeyPassPhrase != null ? scmPrivateKeyPassPhrase.hashCode() : 0 );
2061         result = 29 * result + ( workingDirectory != null ? workingDirectory.hashCode() : 0 );
2062         result = 29 * result + ( scmUseEditMode ? 1 : 0 );
2063         result = 29 * result + ( addSchema ? 1 : 0 );
2064         result = 29 * result + ( generateReleasePoms ? 1 : 0 );
2065         result = 29 * result + ( interactive ? 1 : 0 );
2066         result = 29 * result + ( releaseVersions != null ? releaseVersions.hashCode() : 0 );
2067         result = 29 * result + ( developmentVersions != null ? developmentVersions.hashCode() : 0 );
2068         result = 29 * result + ( originalScmInfo != null ? originalScmInfo.hashCode() : 0 );
2069         result = 29 * result + ( updateDependencies ? 1 : 0 );
2070         result = 29 * result + ( useReleaseProfile ? 1 : 0 );
2071         result = 29 * result + ( autoVersionSubmodules ? 1 : 0 );
2072         result = 29 * result + ( snapshotReleasePluginAllowed ? 1 : 0 );
2073         result = 29 * result + ( commitByProject ? 1 : 0 );
2074         result = 29 * result + ( branchCreation ? 1 : 0 );
2075         result = 29 * result + ( updateBranchVersions ? 1 : 0 );
2076         result = 29 * result + ( updateWorkingCopyVersions ? 1 : 0 );
2077         result = 29 * result + ( suppressCommitBeforeTagOrBranch ? 1 : 0 );
2078         result = 29 * result + ( updateVersionsToSnapshot ? 1 : 0 );
2079         result = 29 * result + ( allowTimestampedSnapshots ? 1 : 0 );
2080         result = 29 * result + ( remoteTagging ? 1 : 0 );
2081         result = 29 * result + ( localCheckout ? 1 : 0 );
2082         result = 29 * result + ( pushChanges ? 1 : 0 );
2083         result = 29 * result + ( defaultDevelopmentVersion != null ? defaultDevelopmentVersion.hashCode() : 0 );
2084         result = 29 * result + ( scmRelativePathProjectDirectory != null ? scmRelativePathProjectDirectory.hashCode() : 0 );
2085         result = 29 * result + ( checkoutDirectory != null ? checkoutDirectory.hashCode() : 0 );
2086         result = 29 * result + ( performGoals != null ? performGoals.hashCode() : 0 );
2087         result = 29 * result + ( defaultReleaseVersion != null ? defaultReleaseVersion.hashCode() : 0 );
2088         result = 29 * result + ( scmReleasedPomRevision != null ? scmReleasedPomRevision.hashCode() : 0 );
2089 
2090         return result;
2091     }
2092 
2093 }