import com.google.common.annotations.VisibleForTesting;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
-import org.sonar.api.Plugin;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.core.platform.PluginRepository;
response.noContent();
}
- // FIXME should be moved to {@link ServerPluginRepository#uninstall(String)}
+ // FIXME should be moved to ServerPluginRepository#uninstall(String)
private void ensurePluginIsInstalled(String key) {
if (!pluginRepository.hasPlugin(key)) {
throw new IllegalArgumentException(format("Plugin [%s] is not installed", key));
*/
package org.sonar.server.startup;
+import org.apache.commons.io.Charsets;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.CharUtils;
import org.sonar.server.platform.DefaultServerFileSystem;
import java.io.File;
-import java.io.FileWriter;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStreamWriter;
import java.io.Writer;
public final class GeneratePluginIndex implements ServerComponent {
void writeIndex(File indexFile) throws IOException {
FileUtils.forceMkdir(indexFile.getParentFile());
- Writer writer = new FileWriter(indexFile, false);
+ Writer writer = new OutputStreamWriter(new FileOutputStream(indexFile), Charsets.UTF_8);
try {
for (PluginInfo pluginInfo : repository.getPluginInfos()) {
writer.append(RemotePlugin.create(pluginInfo).marshal());
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
-import java.util.HashMap;
import org.picocontainer.Startable;
import org.sonar.api.Plugin;
import org.sonar.core.platform.PluginInfo;
import com.google.common.base.Joiner;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Ordering;
import org.apache.commons.lang.StringUtils;
import org.sonar.updatecenter.common.PluginManifest;
import org.sonar.updatecenter.common.Version;
}
}
- private String key;
+ private final String key;
private String name;
@CheckForNull
private final Set<RequiredPlugin> requiredPlugins = new HashSet<>();
public PluginInfo(String key) {
+ Preconditions.checkNotNull(key);
this.key = key;
this.name = key;
}
}
@CheckForNull
- public File getJarFile2() {
+ public File getJarFile() {
return jarFile;
}
}
@Override
- public int compareTo(PluginInfo other) {
- int cmp = name.compareTo(other.name);
- if (cmp != 0) {
- return cmp;
+ public boolean equals(@Nullable Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ PluginInfo info = (PluginInfo) o;
+ if (!key.equals(info.key)) {
+ return false;
}
- return version.compareTo(other.version);
+ return !(version != null ? !version.equals(info.version) : info.version != null);
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = key.hashCode();
+ result = 31 * result + (version != null ? version.hashCode() : 0);
+ return result;
+ }
+
+ @Override
+ public int compareTo(PluginInfo that) {
+ return ComparisonChain.start()
+ .compare(this.name, that.name)
+ .compare(this.version, that.version, Ordering.natural().nullsFirst())
+ .result();
}
public static PluginInfo create(File jarFile) {
}
}
- public static Function<File, PluginInfo> jarToPluginInfo() {
+ public static Function<File, PluginInfo> jarToPluginInfo() {
return JarToPluginInfo.INSTANCE;
}
}
} catch (UnsupportedClassVersionError e) {
throw new IllegalStateException(String.format("The plugin [%s] does not support Java %s",
pluginKey, SystemUtils.JAVA_VERSION_TRIMMED), e);
- } catch (Exception e) {
+ } catch (ClassNotFoundException|IllegalAccessException|InstantiationException e) {
throw new IllegalStateException(String.format(
"Fail to instantiate class [%s] of plugin [%s]", mainClass, pluginKey), e);
}
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import static com.google.common.collect.Ordering.natural;
}
@Test
- public void test_comparison() {
+ public void test_comparison() {
PluginInfo java1 = new PluginInfo("java").setVersion(Version.create("1.0"));
PluginInfo java2 = new PluginInfo("java").setVersion(Version.create("2.0"));
+ PluginInfo javaNoVersion = new PluginInfo("java");
PluginInfo cobol = new PluginInfo("cobol").setVersion(Version.create("1.0"));
PluginInfo noVersion = new PluginInfo("noVersion");
- List<PluginInfo> plugins = Arrays.asList(java1, java2, cobol, noVersion);
- Collections.shuffle(plugins);
+ List<PluginInfo> plugins = Arrays.asList(java1, cobol, javaNoVersion, noVersion, java2);
List<PluginInfo> ordered = natural().sortedCopy(plugins);
assertThat(ordered.get(0)).isSameAs(cobol);
- assertThat(ordered.get(1)).isSameAs(java1);
- assertThat(ordered.get(2)).isSameAs(java2);
- assertThat(ordered.get(3)).isSameAs(noVersion);
+ assertThat(ordered.get(1)).isSameAs(javaNoVersion);
+ assertThat(ordered.get(2)).isSameAs(java1);
+ assertThat(ordered.get(3)).isSameAs(java2);
+ assertThat(ordered.get(4)).isSameAs(noVersion);
+ }
+
+ @Test
+ public void test_equals() {
+ PluginInfo java1 = new PluginInfo("java").setVersion(Version.create("1.0"));
+ PluginInfo java2 = new PluginInfo("java").setVersion(Version.create("2.0"));
+ PluginInfo javaNoVersion = new PluginInfo("java");
+ PluginInfo cobol = new PluginInfo("cobol").setVersion(Version.create("1.0"));
+
+ assertThat(java1.equals(java1)).isTrue();
+ assertThat(java1.equals(java2)).isFalse();
+ assertThat(java1.equals(javaNoVersion)).isFalse();
+ assertThat(java1.equals(cobol)).isFalse();
+ assertThat(java1.equals("java:1.0")).isFalse();
+ assertThat(java1.equals(null)).isFalse();
+ assertThat(javaNoVersion.equals(javaNoVersion)).isTrue();
+
+ assertThat(java1.hashCode()).isEqualTo(java1.hashCode());
+ assertThat(javaNoVersion.hashCode()).isEqualTo(javaNoVersion.hashCode());
}
@Test
assertThat(pluginInfo.getKey()).isEqualTo("java");
assertThat(pluginInfo.getName()).isEqualTo("Java");
assertThat(pluginInfo.getVersion().getName()).isEqualTo("1.0");
- assertThat(pluginInfo.getJarFile2()).isSameAs(jarFile);
+ assertThat(pluginInfo.getJarFile()).isSameAs(jarFile);
assertThat(pluginInfo.getMainClass()).isEqualTo("org.foo.FooPlugin");
assertThat(pluginInfo.isCore()).isFalse();
assertThat(pluginInfo.getBasePlugin()).isNull();