001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2011 SonarSource
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.core.plugin;
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.hibernate.annotations.Cascade;
026    import org.sonar.api.database.BaseIdentifiable;
027    
028    import java.net.URI;
029    import java.util.ArrayList;
030    import java.util.Date;
031    import java.util.List;
032    
033    import javax.persistence.CascadeType;
034    import javax.persistence.Column;
035    import javax.persistence.Entity;
036    import javax.persistence.FetchType;
037    import javax.persistence.OneToMany;
038    import javax.persistence.Table;
039    
040    /**
041     * Installed plugins
042     * 
043     * @since 2.2
044     */
045    @Entity
046    @Table(name = "plugins")
047    public class JpaPlugin extends BaseIdentifiable {
048    
049      @Column(name = "plugin_key", updatable = true, nullable = false, length = 100)
050      private String key;
051    
052      @Column(name = "version", updatable = true, nullable = true, length = 100)
053      private String version;
054    
055      @Column(name = "name", updatable = true, nullable = true, length = 100)
056      private String name;
057    
058      @Column(name = "description", updatable = true, nullable = true, length = 3000)
059      private String description;
060    
061      @Column(name = "organization", updatable = true, nullable = true, length = 100)
062      private String organization;
063    
064      @Column(name = "organization_url", updatable = true, nullable = true, length = 500)
065      private String organizationUrl;
066    
067      @Column(name = "license", updatable = true, nullable = true, length = 50)
068      private String license;
069    
070      @Column(name = "installation_date", updatable = true, nullable = true)
071      private Date installationDate;
072    
073      @Column(name = "plugin_class", updatable = true, nullable = true, length = 100)
074      private String pluginClass;
075    
076      @Column(name = "homepage", updatable = true, nullable = true, length = 500)
077      private String homepage;
078    
079      @Column(name = "core", updatable = true, nullable = true)
080      private Boolean core;
081    
082      @Column(name = "child_first_classloader", updatable = true, nullable = true)
083      private Boolean childFirstClassLoader = Boolean.FALSE;
084    
085      @Column(name = "base_plugin", updatable = true, nullable = true)
086      private String basePlugin;
087    
088      @Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE,
089                org.hibernate.annotations.CascadeType.DELETE,
090                org.hibernate.annotations.CascadeType.MERGE,
091                org.hibernate.annotations.CascadeType.PERSIST,
092                org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
093      @OneToMany(mappedBy = "plugin", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
094      private List<JpaPluginFile> files = new ArrayList<JpaPluginFile>();
095    
096      public JpaPlugin() {
097      }
098    
099      public JpaPlugin(String pluginKey) {
100        if (StringUtils.isBlank(pluginKey)) {
101          throw new IllegalArgumentException("LocalExtension.pluginKey can not be blank");
102        }
103        this.key = pluginKey;
104      }
105    
106      public String getKey() {
107        return key;
108      }
109    
110      public JpaPlugin setKey(String s) {
111        this.key = s;
112        return this;
113      }
114    
115      public String getName() {
116        return name;
117      }
118    
119      public JpaPlugin setName(String name) {
120        this.name = name;
121        return this;
122      }
123    
124      public String getDescription() {
125        return description;
126      }
127    
128      public JpaPlugin setDescription(String description) {
129        this.description = description;
130        return this;
131      }
132    
133      public String getOrganization() {
134        return organization;
135      }
136    
137      public JpaPlugin setOrganization(String organization) {
138        this.organization = organization;
139        return this;
140      }
141    
142      public String getOrganizationUrl() {
143        return organizationUrl;
144      }
145    
146      public JpaPlugin setOrganizationUrl(URI uri) {
147        this.organizationUrl = (uri != null ? uri.toString() : null);
148        return this;
149      }
150    
151      public JpaPlugin setOrganizationUrl(String s) {
152        this.organizationUrl = s;
153        return this;
154      }
155    
156      public String getLicense() {
157        return license;
158      }
159    
160      public JpaPlugin setLicense(String license) {
161        this.license = license;
162        return this;
163      }
164    
165      public String getVersion() {
166        return version;
167      }
168    
169      public JpaPlugin setVersion(String s) {
170        this.version = s;
171        return this;
172      }
173    
174      public Date getInstallationDate() {
175        return installationDate;
176      }
177    
178      public JpaPlugin setInstallationDate(Date installationDate) {
179        this.installationDate = installationDate;
180        return this;
181      }
182    
183      public String getPluginClass() {
184        return pluginClass;
185      }
186    
187      public JpaPlugin setPluginClass(String s) {
188        this.pluginClass = s;
189        return this;
190      }
191    
192      public String getHomepage() {
193        return homepage;
194      }
195    
196      public JpaPlugin setHomepage(URI uri) {
197        this.homepage = (uri != null ? uri.toString() : null);
198        return this;
199      }
200    
201      public JpaPlugin setHomepage(String s) {
202        this.homepage = s;
203        return this;
204      }
205    
206      public Boolean isCore() {
207        return core;
208      }
209    
210      public JpaPlugin setCore(Boolean b) {
211        this.core = b;
212        return this;
213      }
214    
215      public Boolean isUseChildFirstClassLoader() {
216        return childFirstClassLoader;
217      }
218    
219      public JpaPlugin setUseChildFirstClassLoader(boolean use) {
220        this.childFirstClassLoader = use;
221        return this;
222      }
223    
224      public String getBasePlugin() {
225        return basePlugin;
226      }
227    
228      public void setBasePlugin(String basePlugin) {
229        this.basePlugin = basePlugin;
230      }
231    
232      public void createFile(String filename) {
233        JpaPluginFile file = new JpaPluginFile(this, filename);
234        this.files.add(file);
235      }
236    
237      public List<JpaPluginFile> getFiles() {
238        return files;
239      }
240    
241      public void removeFiles() {
242        files.clear();
243      }
244    
245      @Override
246      public boolean equals(Object o) {
247        if (this == o) {
248          return true;
249        }
250        if (o == null || getClass() != o.getClass()) {
251          return false;
252        }
253        JpaPlugin other = (JpaPlugin) o;
254        return key.equals(other.key);
255      }
256    
257      @Override
258      public int hashCode() {
259        return key.hashCode();
260      }
261    
262      @Override
263      public String toString() {
264        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
265            .append("id", getId())
266            .append("key", key)
267            .append("version", version)
268            .append("homepage", homepage)
269            .append("installationDate", installationDate)
270            .toString();
271      }
272    
273      public static JpaPlugin create(String pluginKey) {
274        return new JpaPlugin(pluginKey);
275      }
276    
277    }