Include cloudogu plugins to plugin center (#1709)

Co-authored-by: René Pfeuffer <rene.pfeuffer@cloudogu.com>
This commit is contained in:
Eduard Heimbuch
2021-06-25 09:22:53 +02:00
committed by GitHub
parent d9d3547a22
commit 7a3db7ee3f
21 changed files with 188 additions and 104 deletions

View File

@@ -24,7 +24,6 @@
package sonia.scm.api.v2.resources;
import de.otto.edison.hal.HalRepresentation;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -98,6 +97,7 @@ public class AvailablePluginResource {
PluginPermissions.read().check();
List<InstalledPlugin> installed = pluginManager.getInstalled();
List<AvailablePlugin> available = pluginManager.getAvailable().stream().filter(a -> notInstalled(a, installed)).collect(Collectors.toList());
return Response.ok(collectionMapper.mapAvailable(available)).build();
}

View File

@@ -30,6 +30,7 @@ import de.otto.edison.hal.Links;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import sonia.scm.plugin.PluginInformation;
import java.util.Set;
@@ -48,6 +49,7 @@ public class PluginDto extends HalRepresentation {
private String author;
private String category;
private String avatarUrl;
private PluginInformation.PluginType type = PluginInformation.PluginType.SCM;
private boolean pending;
@JsonInclude(JsonInclude.Include.NON_NULL)
private Boolean core;

View File

@@ -36,7 +36,6 @@ import sonia.scm.plugin.PluginInformation;
import sonia.scm.plugin.PluginPermissions;
import javax.inject.Inject;
import java.util.List;
import java.util.Optional;
@@ -71,6 +70,9 @@ public abstract class PluginDtoMapper {
PluginDto dto = createDtoForAvailable(plugin);
map(dto, plugin);
dto.setPending(plugin.isPending());
if (dto.getType() == null) {
dto.setType(PluginInformation.PluginType.SCM);
}
return dto;
}
@@ -91,8 +93,14 @@ public abstract class PluginDtoMapper {
.self(information.getName()));
if (!plugin.isPending() && PluginPermissions.write().isPermitted()) {
String href = resourceLinks.availablePlugin().install(information.getName());
appendLink(links, "install", href);
boolean isCloudoguPlugin = plugin.getDescriptor().getInformation().getType() == PluginInformation.PluginType.CLOUDOGU;
if (isCloudoguPlugin) {
Optional<String> cloudoguInstallLink = plugin.getDescriptor().getInstallLink();
cloudoguInstallLink.ifPresent(link -> links.single(link("cloudoguInstall", link)));
} else {
String href = resourceLinks.availablePlugin().install(information.getName());
appendLink(links, "install", href);
}
}
return new PluginDto(links.build());

View File

@@ -37,9 +37,9 @@ import javax.ws.rs.Path;
@Path("v2/plugins")
public class PluginRootResource {
private Provider<InstalledPluginResource> installedPluginResourceProvider;
private Provider<AvailablePluginResource> availablePluginResourceProvider;
private Provider<PendingPluginResource> pendingPluginResourceProvider;
private final Provider<InstalledPluginResource> installedPluginResourceProvider;
private final Provider<AvailablePluginResource> availablePluginResourceProvider;
private final Provider<PendingPluginResource> pendingPluginResourceProvider;
@Inject
public PluginRootResource(Provider<InstalledPluginResource> installedPluginResourceProvider, Provider<AvailablePluginResource> availablePluginResourceProvider, Provider<PendingPluginResource> pendingPluginResourceProvider) {