package org.sonar.server.plugins.ws;
import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import javax.annotation.Nullable;
+import java.util.Objects;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
public class InstallAction implements PluginsWsAction {
private static final String PARAM_KEY = "key";
- private static final PluginUpdate MISSING_PLUGIN = null;
private final UpdateCenterMatrixFactory updateCenterFactory;
private final PluginDownloader pluginDownloader;
}
private PluginUpdate findAvailablePluginByKey(String key) {
- PluginUpdate pluginUpdate = MISSING_PLUGIN;
+ PluginUpdate pluginUpdate = null;
Optional<UpdateCenter> updateCenter = updateCenterFactory.getUpdateCenter(false);
if (updateCenter.isPresent()) {
- pluginUpdate = Iterables.find(
- updateCenter.get().findAvailablePlugins(),
- hasKey(key),
- MISSING_PLUGIN);
+ pluginUpdate = updateCenter.get().findAvailablePlugins()
+ .stream()
+ .filter(Objects::nonNull)
+ .filter(u -> key.equals(u.getPlugin().getKey()))
+ .findFirst()
+ .orElse(null);
}
- if (pluginUpdate == MISSING_PLUGIN) {
+ if (pluginUpdate == null) {
throw new IllegalArgumentException(
format("No plugin with key '%s' or plugin '%s' is already installed in latest version", key, key));
}
return pluginUpdate;
}
-
- private static PluginKeyPredicate hasKey(String key) {
- return new PluginKeyPredicate(key);
- }
-
- private static class PluginKeyPredicate implements Predicate<PluginUpdate> {
- private final String key;
-
- public PluginKeyPredicate(String key) {
- this.key = key;
- }
-
- @Override
- public boolean apply(@Nullable PluginUpdate input) {
- return input != null && key.equals(input.getPlugin().getKey());
- }
- }
}
package org.sonar.server.plugins.ws;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import org.sonar.updatecenter.common.Plugin;
-import org.sonar.updatecenter.common.PluginUpdate;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import javax.annotation.Nullable;
+import org.sonar.updatecenter.common.Plugin;
+import org.sonar.updatecenter.common.PluginUpdate;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
builder.add(pluginUpdate);
}
- return Lists.newArrayList(transform(builders.values(), BuilderToPluginUpdateAggregate.INSTANCE));
- }
-
- private enum BuilderToPluginUpdateAggregate implements Function<PluginUpdateAggregateBuilder, PluginUpdateAggregate> {
- INSTANCE;
-
- @Override
- public PluginUpdateAggregate apply(@Nonnull PluginUpdateAggregateBuilder input) {
- return input.build();
- }
+ return Lists.newArrayList(transform(builders.values(), PluginUpdateAggregateBuilder::build));
}
@VisibleForTesting
package org.sonar.server.plugins.ws;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import java.util.Comparator;
import java.util.List;
import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.platform.PluginInfo;
.comparing((java.util.function.Function<InstalledPlugin, String>) installedPluginFile -> installedPluginFile.getPluginInfo().getName())
.thenComparing(f -> f.getPluginInfo().getKey());
public static final Comparator<Plugin> NAME_KEY_PLUGIN_ORDERING = Ordering.from(CASE_INSENSITIVE_ORDER)
- .onResultOf(PluginToName.INSTANCE)
+ .onResultOf(Plugin::getName)
.compound(
- Ordering.from(CASE_INSENSITIVE_ORDER).onResultOf(PluginToKeyFunction.INSTANCE));
+ Ordering.from(CASE_INSENSITIVE_ORDER).onResultOf(Artifact::getKey));
public static final Comparator<PluginUpdate> NAME_KEY_PLUGIN_UPDATE_ORDERING = Ordering.from(NAME_KEY_PLUGIN_ORDERING)
- .onResultOf(PluginUpdateToPlugin.INSTANCE);
+ .onResultOf(PluginUpdate::getPlugin);
private PluginWSCommons() {
// prevent instantiation
jsonWriter.name(ARRAY_REQUIRES).beginArray();
Release release = pluginUpdate.getRelease();
- for (Plugin child : filter(transform(release.getOutgoingDependencies(), ReleaseToArtifact.INSTANCE), Plugin.class)) {
+ for (Plugin child : filter(transform(release.getOutgoingDependencies(), Release::getArtifact), Plugin.class)) {
jsonWriter.beginObject();
jsonWriter.prop(PROPERTY_KEY, child.getKey());
jsonWriter.prop(PROPERTY_NAME, child.getName());
}
}
- enum PluginToKeyFunction implements Function<Plugin, String> {
- INSTANCE;
-
- @Override
- public String apply(@Nonnull Plugin input) {
- return input.getKey();
- }
- }
-
- private enum ReleaseToArtifact implements Function<Release, Artifact> {
- INSTANCE;
- @Override
- public Artifact apply(@Nonnull Release input) {
- return input.getArtifact();
- }
-
- }
-
- private enum PluginUpdateToPlugin implements Function<PluginUpdate, Plugin> {
- INSTANCE;
- @Override
- public Plugin apply(@Nonnull PluginUpdate input) {
- return input.getPlugin();
- }
- }
-
- private enum PluginToName implements Function<Plugin, String> {
- INSTANCE;
- @Override
- public String apply(@Nonnull Plugin input) {
- return input.getName();
- }
- }
-
@CheckForNull
static String categoryOrNull(@Nullable Plugin plugin) {
return plugin != null ? plugin.getCategory() : null;
static ImmutableMap<String, Plugin> compatiblePluginsByKey(UpdateCenterMatrixFactory updateCenterMatrixFactory) {
List<Plugin> compatiblePlugins = compatiblePlugins(updateCenterMatrixFactory);
- return Maps.uniqueIndex(compatiblePlugins, PluginToKeyFunction.INSTANCE);
+ return Maps.uniqueIndex(compatiblePlugins, Artifact::getKey);
}
}
*/
package org.sonar.server.plugins.ws;
-import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Ordering;
import com.google.common.io.Resources;
import java.util.Collection;
import java.util.List;
-import javax.annotation.Nonnull;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
private static final String ARRAY_UPDATES = "updates";
private static final Ordering<PluginUpdateAggregate> NAME_KEY_PLUGIN_UPGRADE_AGGREGATE_ORDERING = Ordering.from(PluginWSCommons.NAME_KEY_PLUGIN_ORDERING)
- .onResultOf(PluginUpdateAggregateToPlugin.INSTANCE);
+ .onResultOf(PluginUpdateAggregate::getPlugin);
private static final Ordering<PluginUpdate> PLUGIN_UPDATE_BY_VERSION_ORDERING = Ordering.natural()
.onResultOf(input -> input.getRelease().getVersion().toString());
NAME_KEY_PLUGIN_UPGRADE_AGGREGATE_ORDERING,
aggregator.aggregate(pluginUpdates));
}
-
- private enum PluginUpdateAggregateToPlugin implements Function<PluginUpdateAggregate, Plugin> {
- INSTANCE;
-
- @Override
- public Plugin apply(@Nonnull PluginUpdateAggregate input) {
- return input.getPlugin();
- }
- }
}