001/*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 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 */
020package org.sonar.core.plugins;
021
022import com.google.common.collect.Lists;
023import org.apache.commons.lang.StringUtils;
024import org.apache.commons.lang.builder.ToStringBuilder;
025import org.apache.commons.lang.builder.ToStringStyle;
026import org.sonar.api.platform.PluginMetadata;
027
028import java.io.File;
029import java.util.List;
030
031public 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}