Enable plugin management via CLI (#2087)

Co-authored-by: Konstantin Schaper <konstantin.schaper@cloudogu.com>
This commit is contained in:
Eduard Heimbuch
2022-07-19 09:02:00 +02:00
committed by GitHub
parent 67c083ee54
commit fc28da90b3
27 changed files with 1718 additions and 74 deletions

View File

@@ -41,6 +41,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
@@ -87,15 +88,11 @@ public class DefaultPluginManager implements PluginManager {
this.eventBus = eventBus;
this.pluginSetConfigStore = pluginSetConfigStore;
if (contextFactory != null) {
this.contextFactory = contextFactory;
} else {
this.contextFactory = (plugins -> {
List<AvailablePlugin> pendingPlugins = new ArrayList<>(plugins);
pendingInstallQueue.stream().map(PendingPluginInstallation::getPlugin).forEach(pendingPlugins::add);
return PluginInstallationContext.from(getInstalled(), pendingPlugins);
});
}
this.contextFactory = Objects.requireNonNullElseGet(contextFactory, () -> (plugins -> {
List<AvailablePlugin> pendingPlugins = new ArrayList<>(plugins);
pendingInstallQueue.stream().map(PendingPluginInstallation::getPlugin).forEach(pendingPlugins::add);
return PluginInstallationContext.from(getInstalled(), pendingPlugins);
}));
this.computeInstallationDependencies();
}
@@ -192,6 +189,7 @@ public class DefaultPluginManager implements PluginManager {
@Override
public List<InstalledPlugin> getUpdatable() {
PluginPermissions.read().check();
return getInstalled()
.stream()
.filter(p -> isUpdatable(p.getDescriptor().getInformation().getName()))
@@ -199,6 +197,12 @@ public class DefaultPluginManager implements PluginManager {
.collect(Collectors.toList());
}
@Override
public PendingPlugins getPending() {
PluginPermissions.read().check();
return new PendingPlugins(getAvailable(), getInstalled());
}
private <T extends Plugin> Predicate<T> filterByName(String name) {
return plugin -> name.equals(plugin.getDescriptor().getInformation().getName());
}
@@ -361,7 +365,7 @@ public class DefaultPluginManager implements PluginManager {
}
private boolean isUpdatable(String name) {
return getAvailable(name).isPresent() && !getPending(name).isPresent();
return getAvailable(name).isPresent() && getPending(name).isEmpty();
}
@Override