View Javadoc

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