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.apache.commons.lang.builder.ToStringStyle;
025    import org.sonar.api.database.BaseIdentifiable;
026    
027    import javax.persistence.*;
028    import java.net.URI;
029    import java.util.Date;
030    
031    /**
032     * Locally installed extension.
033     *
034     * @since 2.2
035     */
036    @Entity
037    @Table(name = "extensions")
038    public class LocalExtension extends BaseIdentifiable {
039    
040      public static enum Type {
041        PLUGIN, PLUGIN_EXTENSION
042      }
043    
044      @Column(name = "plugin_key", updatable = true, nullable = false, length = 100)
045      private String pluginKey;
046    
047      @Column(name = "version", updatable = true, nullable = true, length = 100)
048      private String version;
049    
050      @Enumerated(EnumType.STRING)
051      @Column(name = "extension_type", updatable = true, nullable = false)
052      private Type type = Type.PLUGIN;
053    
054      @Column(name = "name", updatable = true, nullable = true, length = 100)
055      private String name;
056    
057      @Column(name = "description", updatable = true, nullable = true, length = 3000)
058      private String description;
059    
060      @Column(name = "organization", updatable = true, nullable = true, length = 100)
061      private String organization;
062    
063      @Column(name = "organization_url", updatable = true, nullable = true, length = 500)
064      private String organizationUrl;
065    
066      @Column(name = "license", updatable = true, nullable = true, length = 50)
067      private String license;
068    
069      @Column(name = "filename", updatable = true, nullable = false, length = 100)
070      private String filename;
071    
072      @Column(name = "installation_date", updatable = true, nullable = true)
073      private Date installationDate;
074    
075      @Column(name = "plugin_class", updatable = true, nullable = true, length = 100)
076      private String pluginClass;
077    
078      @Column(name = "homepage", updatable = true, nullable = true, length = 500)
079      private String homepage;
080    
081      @Column(name = "core", updatable = true, nullable = true)
082      private Boolean core;
083    
084      public LocalExtension() {
085      }
086    
087      public LocalExtension(Type type, String pluginKey) {
088        if (StringUtils.isBlank(pluginKey)) {
089          throw new IllegalArgumentException("LocalExtension.pluginKey can not be blank");
090        }
091        if (type == null) {
092          throw new IllegalArgumentException("LocalExtension.type can not be null");
093        }
094        this.pluginKey = pluginKey;
095        this.type = type;
096      }
097    
098      public String getPluginKey() {
099        return pluginKey;
100      }
101    
102      public LocalExtension setPluginKey(String s) {
103        this.pluginKey = s;
104        return this;
105      }
106    
107      public Type getType() {
108        return type;
109      }
110    
111      public LocalExtension setType(Type type) {
112        if (type == null) {
113          throw new IllegalArgumentException("LocalExtension.type can not be null");
114        }
115        this.type = type;
116        return this;
117      }
118    
119      public String getFilename() {
120        return filename;
121      }
122    
123      public LocalExtension setFilename(String filename) {
124        this.filename = filename;
125        return this;
126      }
127    
128      public String getName() {
129        return name;
130      }
131    
132      public LocalExtension setName(String name) {
133        this.name = name;
134        return this;
135      }
136    
137      public String getDescription() {
138        return description;
139      }
140    
141      public LocalExtension setDescription(String description) {
142        this.description = description;
143        return this;
144      }
145    
146      public String getOrganization() {
147        return organization;
148      }
149    
150      public LocalExtension setOrganization(String organization) {
151        this.organization = organization;
152        return this;
153      }
154    
155      public String getOrganizationUrl() {
156        return organizationUrl;
157      }
158    
159      public LocalExtension setOrganizationUrl(URI uri) {
160        this.organizationUrl = (uri != null ? uri.toString() : null);
161        return this;
162      }
163    
164      public LocalExtension setOrganizationUrl(String s) {
165        this.organizationUrl = s;
166        return this;
167      }
168    
169      public String getLicense() {
170        return license;
171      }
172    
173      public LocalExtension setLicense(String license) {
174        this.license = license;
175        return this;
176      }
177    
178      public String getVersion() {
179        return version;
180      }
181    
182      public LocalExtension setVersion(String s) {
183        this.version = s;
184        return this;
185      }
186    
187      public Date getInstallationDate() {
188        return installationDate;
189      }
190    
191      public LocalExtension setInstallationDate(Date installationDate) {
192        this.installationDate = installationDate;
193        return this;
194      }
195    
196      public String getPluginClass() {
197        return pluginClass;
198      }
199    
200      public LocalExtension setPluginClass(String s) {
201        this.pluginClass = s;
202        return this;
203      }
204    
205      public String getHomepage() {
206        return homepage;
207      }
208    
209      public LocalExtension setHomepage(URI uri) {
210        this.homepage = (uri != null ? uri.toString() : null);
211        return this;
212      }
213    
214      public LocalExtension setHomepage(String s) {
215        this.homepage = s;
216        return this;
217      }
218    
219      public Boolean isCore() {
220        return core;
221      }
222    
223      public LocalExtension setCore(Boolean b) {
224        this.core = b;
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, ToStringStyle.SHORT_PREFIX_STYLE)
263            .append("id", getId())
264            .append("type", type)
265            .append("pluginKey", pluginKey)
266            .append("version", version)
267            .append("homepage", homepage)
268            .append("installationDate", installationDate)
269            .toString();
270      }
271    
272    
273      public static LocalExtension createPlugin(String pluginKey) {
274        return new LocalExtension(Type.PLUGIN, pluginKey);
275      }
276    
277      public static LocalExtension createPluginExtension(String pluginKey, String extensionName) {
278        return new LocalExtension(Type.PLUGIN_EXTENSION, pluginKey).setName(extensionName).setFilename(extensionName);
279      }
280    }