]> source.dussan.org Git - sonarqube.git/blob
0043705db60d75ea16ed1ba071f164f2acc77a49
[sonarqube.git] /
1 /*
2  * Sonar, open source software quality management tool.
3  * Copyright (C) 2009 SonarSource SA
4  * mailto:contact AT sonarsource DOT com
5  *
6  * Sonar is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 3 of the License, or (at your option) any later version.
10  *
11  * Sonar is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with Sonar; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
19  */
20 package org.sonar.updatecenter.common;
21
22 import java.util.*;
23
24 public abstract class Artifact implements Comparable<Artifact> {
25
26   protected String key;
27   protected SortedSet<Release> releases = new TreeSet<Release>();
28
29   protected Artifact(String key) {
30     this.key = key;
31   }
32
33   public final String getKey() {
34     return key;
35   }
36
37   public final Artifact setKey(String key) {
38     this.key = key;
39     return this;
40   }
41
42   public final Artifact setReleases(Collection<Release> releases) {
43     this.releases.clear();
44     if (releases != null) {
45       for (Release release : releases) {
46         addRelease(release);
47       }
48     }
49     return this;
50   }
51
52   public final Release addRelease(Release release) {
53     releases.add(release);
54     return release;
55   }
56
57   public final Release addRelease(Version version) {
58     return addRelease(new Release(this, version));
59   }
60
61   public final Release getRelease(Version version) {
62     for (Release release : getReleases()) {
63       if (release.getVersion().equals(version)) {
64         return release;
65       }
66     }
67     return null;
68   }
69
70   public final SortedSet<Release> getReleases() {
71     return releases;
72   }
73
74   /**
75    * Shortcut for Ruby code 
76    */
77   public final SortedSet<Release> getReleasesGreaterThan(String version) {
78     return getReleasesGreaterThan(Version.create(version));
79   }
80
81   public final SortedSet<Release> getReleasesGreaterThan(Version version) {
82     TreeSet<Release> result = new TreeSet<Release>();
83     for (Release release : releases) {
84       if (release.getVersion().compareTo(version)>0) {
85         result.add(release);
86       }
87     }
88     return result;
89   }
90
91   public final SortedSet<Version> getVersions() {
92     SortedSet<Version> versions = new TreeSet<Version>();
93     for (Release release : releases) {
94       versions.add(release.getVersion());
95     }
96     return versions;
97   }
98
99   public final Release getLastRelease() {
100     return releases.isEmpty() ? null : releases.last();
101   }
102
103   public final Release getLastCompatibleRelease(Version sonarVersion) {
104     Release result = null;
105     for (Release r : releases) {
106       if (r.supportSonarVersion(sonarVersion)) {
107         result = r;
108       }
109     }
110     return result;
111   }
112
113   public final Release getLastCompatibleReleaseIfUpgrade(Version sonarVersion) {
114     Release result = null;
115     for (Release r : releases) {
116       if (r.getLastRequiredSonarVersion()!=null && r.getLastRequiredSonarVersion().compareTo(sonarVersion)>=0) {
117         result = r;
118       }
119     }
120     return result;
121   }
122
123   @Override
124   public final boolean equals(Object o) {
125     if (this == o) {
126       return true;
127     }
128     if (!(o instanceof Artifact)) {
129       return false;
130     }
131     Artifact artifact = (Artifact) o;
132     return key.equals(artifact.key);
133   }
134
135   @Override
136   public final int hashCode() {
137     return key.hashCode();
138   }
139
140   public final int compareTo(Artifact other) {
141     if (key == null) {
142       return -1;
143     }
144     return key.compareTo(other.key);
145   }
146 }