Use abstract base class for json enrichment

This commit is contained in:
René Pfeuffer
2018-12-14 17:25:42 +01:00
parent a9c5df1403
commit 5cb1a2e0cd

View File

@@ -6,18 +6,13 @@ import sonia.scm.plugin.Extension;
import sonia.scm.repository.GitRepositoryHandler;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.web.JsonEnricherBase;
import sonia.scm.web.JsonEnricherContext;
import sonia.scm.web.AbstractRepositoryJsonEnricher;
import javax.inject.Inject;
import javax.inject.Provider;
import static java.util.Collections.singletonMap;
import static sonia.scm.web.VndMediaType.REPOSITORY;
import static sonia.scm.web.VndMediaType.REPOSITORY_COLLECTION;
@Extension
public class GitRepositoryConfigEnricher extends JsonEnricherBase {
public class GitRepositoryConfigEnricher extends AbstractRepositoryJsonEnricher {
private final Provider<ScmPathInfoStore> scmPathInfoStore;
private final RepositoryManager manager;
@@ -30,29 +25,13 @@ public class GitRepositoryConfigEnricher extends JsonEnricherBase {
}
@Override
public void enrich(JsonEnricherContext context) {
if (resultHasMediaType(REPOSITORY, context)) {
JsonNode repositoryNode = context.getResponseEntity();
enrichRepositoryNode(repositoryNode);
} else if (resultHasMediaType(REPOSITORY_COLLECTION, context)) {
JsonNode repositoryCollectionNode = context.getResponseEntity().get("_embedded").withArray("repositories");
repositoryCollectionNode.elements().forEachRemaining(this::enrichRepositoryNode);
}
}
private void enrichRepositoryNode(JsonNode repositoryNode) {
String namespace = repositoryNode.get("namespace").asText();
String name = repositoryNode.get("name").asText();
protected void enrichRepositoryNode(JsonNode repositoryNode, String namespace, String name) {
if (GitRepositoryHandler.TYPE_NAME.equals(manager.get(new NamespaceAndName(namespace, name)).getType())) {
String repositoryConfigLink = new LinkBuilder(scmPathInfoStore.get().get(), GitConfigResource.class)
.method("getRepositoryConfig")
.parameters(namespace, name)
.href();
JsonNode newPullRequestNode = createObject(singletonMap("href", value(repositoryConfigLink)));
addPropertyNode(repositoryNode.get("_links"), "configuration", newPullRequestNode);
addLink(repositoryNode, "configuration", repositoryConfigLink);
}
}
}