001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2009 SonarSource SA
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
019 */
020 package org.sonar.api.platform;
021
022 import org.apache.commons.lang.StringUtils;
023 import org.apache.commons.lang.builder.ToStringBuilder;
024 import org.sonar.api.database.BaseIdentifiable;
025
026 import java.util.Date;
027 import javax.persistence.*;
028
029 /**
030 * Locally installed extension.
031 *
032 * @since 2.2
033 */
034 @Entity
035 @Table(name = "extensions")
036 public class LocalExtension extends BaseIdentifiable {
037
038 public static enum Type {
039 PLUGIN, PLUGIN_EXTENSION
040 }
041
042 @Column(name = "plugin_key", updatable = true, nullable = false, length = 100)
043 private String pluginKey;
044
045 @Column(name = "version", updatable = true, nullable = true, length = 100)
046 private String version;
047
048 @Enumerated(EnumType.STRING)
049 @Column(name = "extension_type", updatable = true, nullable = false)
050 private Type type = Type.PLUGIN;
051
052 @Column(name = "name", updatable = true, nullable = true, length = 100)
053 private String name;
054
055 @Column(name = "description", updatable = true, nullable = true, length = 3000)
056 private String description;
057
058 @Column(name = "organization", updatable = true, nullable = true, length = 100)
059 private String organization;
060
061 @Column(name = "organization_url", updatable = true, nullable = true, length = 500)
062 private String organizationUrl;
063
064 @Column(name = "license", updatable = true, nullable = true, length = 50)
065 private String license;
066
067 @Column(name = "checksum", updatable = true, nullable = true)
068 private long checksum;
069
070 @Column(name = "filename", updatable = true, nullable = false, length = 100)
071 private String filename;
072
073 @Column(name = "installation_date", updatable = true, nullable = true)
074 private Date installationDate;
075
076 @Column(name = "plugin_class", updatable = true, nullable = true, length = 100)
077 private String pluginClass;
078
079 @Column(name = "homepage", updatable = true, nullable = true, length = 500)
080 private String homepage;
081
082 @Column(name = "category", updatable = true, nullable = true, length = 100)
083 private String category;
084
085 public LocalExtension() {
086 }
087
088 public LocalExtension(Type type, String pluginKey) {
089 if (StringUtils.isBlank(pluginKey)) {
090 throw new IllegalArgumentException("LocalExtension.pluginKey can not be blank");
091 }
092 if (type == null) {
093 throw new IllegalArgumentException("LocalExtension.type can not be null");
094 }
095 this.pluginKey = pluginKey;
096 this.type = type;
097 }
098
099 public String getPluginKey() {
100 return pluginKey;
101 }
102
103 public LocalExtension setPluginKey(String s) {
104 this.pluginKey = s;
105 return this;
106 }
107
108 public Type getType() {
109 return type;
110 }
111
112 public LocalExtension setType(Type type) {
113 if (type == null) {
114 throw new IllegalArgumentException("LocalExtension.type can not be null");
115 }
116 this.type = type;
117 return this;
118 }
119
120 public String getFilename() {
121 return filename;
122 }
123
124 public LocalExtension setFilename(String filename) {
125 this.filename = filename;
126 return this;
127 }
128
129 public String getName() {
130 return name;
131 }
132
133 public LocalExtension setName(String name) {
134 this.name = name;
135 return this;
136 }
137
138 public String getDescription() {
139 return description;
140 }
141
142 public LocalExtension setDescription(String description) {
143 this.description = description;
144 return this;
145 }
146
147 public String getOrganization() {
148 return organization;
149 }
150
151 public LocalExtension setOrganization(String organization) {
152 this.organization = organization;
153 return this;
154 }
155
156 public String getOrganizationUrl() {
157 return organizationUrl;
158 }
159
160 public LocalExtension setOrganizationUrl(String organizationUrl) {
161 this.organizationUrl = organizationUrl;
162 return this;
163 }
164
165 public String getLicense() {
166 return license;
167 }
168
169 public LocalExtension setLicense(String license) {
170 this.license = license;
171 return this;
172 }
173
174 public String getVersion() {
175 return version;
176 }
177
178 public LocalExtension setVersion(String s) {
179 this.version = s;
180 return this;
181 }
182
183 public long getChecksum() {
184 return checksum;
185 }
186
187 public LocalExtension setChecksum(long l) {
188 this.checksum = l;
189 return this;
190 }
191
192 public Date getInstallationDate() {
193 return installationDate;
194 }
195
196 public LocalExtension setInstallationDate(Date installationDate) {
197 this.installationDate = installationDate;
198 return this;
199 }
200
201 public String getPluginClass() {
202 return pluginClass;
203 }
204
205 public LocalExtension setPluginClass(String s) {
206 this.pluginClass = s;
207 return this;
208 }
209
210 public String getHomepage() {
211 return homepage;
212 }
213
214 public LocalExtension setHomepage(String homepage) {
215 this.homepage = homepage;
216 return this;
217 }
218
219 public String getCategory() {
220 return category;
221 }
222
223 public LocalExtension setCategory(String category) {
224 this.category = category;
225 return this;
226 }
227
228 @Override
229 public boolean equals(Object o) {
230 if (this == o) {
231 return true;
232 }
233 if (o == null || getClass() != o.getClass()) {
234 return false;
235 }
236
237 LocalExtension extension = (LocalExtension) o;
238 if (!pluginKey.equals(extension.pluginKey)) {
239 return false;
240 }
241 if (type != extension.type) {
242 return false;
243 }
244 if (type == LocalExtension.Type.PLUGIN_EXTENSION) {
245 return StringUtils.equals(name, extension.name);
246 }
247 return true;
248 }
249
250 @Override
251 public int hashCode() {
252 int result = pluginKey.hashCode();
253 result = 31 * result + type.hashCode();
254 if (type == LocalExtension.Type.PLUGIN_EXTENSION) {
255 result = 31 * result + (name != null ? name.hashCode() : 0);
256 }
257 return result;
258 }
259
260 @Override
261 public String toString() {
262 return new ToStringBuilder(this)
263 .append("id", getId())
264 .append("type", type)
265 .append("pluginKey", pluginKey)
266 .append("version", version)
267 .append("checksum", checksum)
268 .append("homepage", homepage)
269 .append("category", category)
270 .append("installationDate", installationDate)
271 .toString();
272 }
273
274
275 public static LocalExtension createPlugin(String pluginKey) {
276 return new LocalExtension(Type.PLUGIN, pluginKey);
277 }
278
279 public static LocalExtension createPluginExtension(String pluginKey, String extensionName) {
280 return new LocalExtension(Type.PLUGIN_EXTENSION, pluginKey).setName(extensionName).setFilename(extensionName);
281 }
282 }