mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-08 22:45:45 +01:00
adds rest endpoint for namespace strategies
This commit is contained in:
@@ -59,6 +59,9 @@ public class IndexDtoGenerator extends HalAppenderMapper {
|
||||
builder.single(link("permissions", resourceLinks.permissions().self()));
|
||||
}
|
||||
builder.single(link("availableRepositoryPermissions", resourceLinks.availableRepositoryPermissions().self()));
|
||||
|
||||
builder.single(link("repositoryTypes", resourceLinks.repositoryTypeCollection().self()));
|
||||
builder.single(link("namespaceStrategies", resourceLinks.namespaceStrategies().self()));
|
||||
} else {
|
||||
builder.single(link("login", resourceLinks.authentication().jsonLogin()));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import de.otto.edison.hal.HalRepresentation;
|
||||
import de.otto.edison.hal.Links;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class NamespaceStrategiesDto extends HalRepresentation {
|
||||
|
||||
private String current;
|
||||
private List<String> available;
|
||||
|
||||
public NamespaceStrategiesDto(Links links) {
|
||||
super(links);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import de.otto.edison.hal.Links;
|
||||
import sonia.scm.repository.NamespaceStrategy;
|
||||
import sonia.scm.web.VndMediaType;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Provider;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* RESTFul WebService Endpoint for namespace strategies.
|
||||
*/
|
||||
@Path(NamespaceStrategyResource.PATH)
|
||||
public class NamespaceStrategyResource {
|
||||
|
||||
static final String PATH = "v2/namespaceStrategies";
|
||||
|
||||
private Set<NamespaceStrategy> namespaceStrategies;
|
||||
private Provider<NamespaceStrategy> namespaceStrategyProvider;
|
||||
|
||||
@Inject
|
||||
public NamespaceStrategyResource(Set<NamespaceStrategy> namespaceStrategies, Provider<NamespaceStrategy> namespaceStrategyProvider) {
|
||||
this.namespaceStrategies = namespaceStrategies;
|
||||
this.namespaceStrategyProvider = namespaceStrategyProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all available namespace strategies and the current selected.
|
||||
*
|
||||
* @param uriInfo uri info
|
||||
*
|
||||
* @return available and current namespace strategies
|
||||
*/
|
||||
@GET
|
||||
@Path("")
|
||||
@Produces(VndMediaType.NAMESPACE_STRATEGIES)
|
||||
public NamespaceStrategiesDto get(@Context UriInfo uriInfo) {
|
||||
NamespaceStrategiesDto dto = new NamespaceStrategiesDto(createLinks(uriInfo));
|
||||
|
||||
String currentStrategy = strategyAsString(namespaceStrategyProvider.get());
|
||||
dto.setCurrent(currentStrategy);
|
||||
|
||||
List<String> availableStrategies = collectStrategyNames();
|
||||
dto.setAvailable(availableStrategies);
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
private Links createLinks(@Context UriInfo uriInfo) {
|
||||
return Links.linkingTo().self(uriInfo.getAbsolutePath().toASCIIString()).build();
|
||||
}
|
||||
|
||||
private String strategyAsString(NamespaceStrategy namespaceStrategy) {
|
||||
return namespaceStrategy.getClass().getName();
|
||||
}
|
||||
|
||||
private List<String> collectStrategyNames() {
|
||||
return namespaceStrategies.stream().map(this::strategyAsString).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@@ -277,6 +277,23 @@ class ResourceLinks {
|
||||
}
|
||||
}
|
||||
|
||||
public NamespaceStrategiesLinks namespaceStrategies() {
|
||||
return new NamespaceStrategiesLinks(scmPathInfoStore.get());
|
||||
}
|
||||
|
||||
static class NamespaceStrategiesLinks {
|
||||
|
||||
private final LinkBuilder namespaceStrategiesLinkBuilder;
|
||||
|
||||
NamespaceStrategiesLinks(ScmPathInfo pathInfo) {
|
||||
namespaceStrategiesLinkBuilder = new LinkBuilder(pathInfo, NamespaceStrategyResource.class);
|
||||
}
|
||||
|
||||
String self() {
|
||||
return namespaceStrategiesLinkBuilder.method("get").parameters().href();
|
||||
}
|
||||
}
|
||||
|
||||
public RepositoryTypeLinks repositoryType() {
|
||||
return new RepositoryTypeLinks(scmPathInfoStore.get());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user