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}