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.plugins;
021    
022    import com.google.common.collect.Lists;
023    import org.apache.commons.lang.StringUtils;
024    import org.apache.commons.lang.builder.ToStringBuilder;
025    import org.apache.commons.lang.builder.ToStringStyle;
026    import org.sonar.api.platform.PluginMetadata;
027    
028    import java.io.File;
029    import java.util.List;
030    
031    public class DefaultPluginMetadata implements PluginMetadata, Comparable<PluginMetadata> {
032      private File file;
033      private List<File> deployedFiles = Lists.newArrayList();
034      private List<File> deprecatedExtensions = Lists.newArrayList();
035      private String[] pathsToInternalDeps = new String[0];
036      private String key;
037      private String version;
038      private String name;
039      private String mainClass;
040      private String description;
041      private String organization;
042      private String organizationUrl;
043      private String license;
044      private String homepage;
045      private boolean useChildFirstClassLoader;
046      private String basePlugin;
047      private boolean core;
048    
049      private DefaultPluginMetadata() {
050      }
051    
052      public static DefaultPluginMetadata create(File file) {
053        return new DefaultPluginMetadata().setFile(file);
054      }
055    
056      public File getFile() {
057        return file;
058      }
059    
060      public DefaultPluginMetadata setFile(File file) {
061        this.file = file;
062        return this;
063      }
064    
065      public List<File> getDeployedFiles() {
066        return deployedFiles;
067      }
068    
069      public DefaultPluginMetadata addDeployedFile(File f) {
070        this.deployedFiles.add(f);
071        return this;
072      }
073    
074      public List<File> getDeprecatedExtensions() {
075        return deprecatedExtensions;
076      }
077    
078      public DefaultPluginMetadata addDeprecatedExtension(File f) {
079        this.deprecatedExtensions.add(f);
080        return this;
081      }
082    
083      public DefaultPluginMetadata setDeprecatedExtensions(List<File> files) {
084        this.deprecatedExtensions = (files==null ? Lists.<File>newArrayList() : files);
085        return this;
086      }
087    
088      public String[] getPathsToInternalDeps() {
089        return pathsToInternalDeps;
090      }
091    
092      public DefaultPluginMetadata setPathsToInternalDeps(String[] pathsToInternalDeps) {
093        this.pathsToInternalDeps = pathsToInternalDeps;
094        return this;
095      }
096    
097      public String getKey() {
098        return key;
099      }
100    
101      public DefaultPluginMetadata setKey(String key) {
102        this.key = key;
103        return this;
104      }
105    
106      public String getName() {
107        return name;
108      }
109    
110      public DefaultPluginMetadata setName(String name) {
111        this.name = name;
112        return this;
113      }
114    
115      public String getMainClass() {
116        return mainClass;
117      }
118    
119      public DefaultPluginMetadata setMainClass(String mainClass) {
120        this.mainClass = mainClass;
121        return this;
122      }
123    
124      public String getDescription() {
125        return description;
126      }
127    
128      public DefaultPluginMetadata setDescription(String description) {
129        this.description = description;
130        return this;
131      }
132    
133      public String getOrganization() {
134        return organization;
135      }
136    
137      public DefaultPluginMetadata setOrganization(String organization) {
138        this.organization = organization;
139        return this;
140      }
141    
142      public String getOrganizationUrl() {
143        return organizationUrl;
144      }
145    
146      public DefaultPluginMetadata setOrganizationUrl(String organizationUrl) {
147        this.organizationUrl = organizationUrl;
148        return this;
149      }
150    
151      public String getLicense() {
152        return license;
153      }
154    
155      public DefaultPluginMetadata setLicense(String license) {
156        this.license = license;
157        return this;
158      }
159    
160      public String getVersion() {
161        return version;
162      }
163    
164      public DefaultPluginMetadata setVersion(String version) {
165        this.version = version;
166        return this;
167      }
168    
169      public String getHomepage() {
170        return homepage;
171      }
172    
173      public DefaultPluginMetadata setHomepage(String homepage) {
174        this.homepage = homepage;
175        return this;
176      }
177    
178      public boolean hasKey() {
179        return StringUtils.isNotBlank(key);
180      }
181    
182      public boolean hasMainClass() {
183        return StringUtils.isNotBlank(mainClass);
184      }
185    
186      public DefaultPluginMetadata setUseChildFirstClassLoader(boolean use) {
187        this.useChildFirstClassLoader = use;
188        return this;
189      }
190    
191      public boolean isUseChildFirstClassLoader() {
192        return useChildFirstClassLoader;
193      }
194    
195      public DefaultPluginMetadata setBasePlugin(String key) {
196        this.basePlugin = key;
197        return this;
198      }
199    
200      public String getBasePlugin() {
201        return basePlugin;
202      }
203    
204      public boolean isCore() {
205        return core;
206      }
207    
208      public DefaultPluginMetadata setCore(boolean b) {
209        this.core = b;
210        return this;
211      }
212    
213      public boolean isOldManifest() {
214        return !hasKey() && hasMainClass();
215      }
216    
217      @Override
218      public boolean equals(Object o) {
219        if (this == o) {
220          return true;
221        }
222        if (o == null || getClass() != o.getClass()) {
223          return false;
224        }
225        DefaultPluginMetadata that = (DefaultPluginMetadata) o;
226        return !(key != null ? !key.equals(that.key) : that.key != null);
227    
228      }
229    
230      @Override
231      public int hashCode() {
232        return key != null ? key.hashCode() : 0;
233      }
234    
235      @Override
236      public String toString() {
237        return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
238            .append("key", key)
239            .append("version", StringUtils.defaultIfEmpty(version, "-"))
240            .toString();
241      }
242    
243      public int compareTo(PluginMetadata other) {
244        return name.compareTo(other.getName());
245      }
246    }