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 */
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 }