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.GitRepositoryHandler;
import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import sonia.scm.web.JsonEnricherBase; import sonia.scm.web.AbstractRepositoryJsonEnricher;
import sonia.scm.web.JsonEnricherContext;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider; 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 @Extension
public class GitRepositoryConfigEnricher extends JsonEnricherBase { public class GitRepositoryConfigEnricher extends AbstractRepositoryJsonEnricher {
private final Provider<ScmPathInfoStore> scmPathInfoStore; private final Provider<ScmPathInfoStore> scmPathInfoStore;
private final RepositoryManager manager; private final RepositoryManager manager;
@@ -30,29 +25,13 @@ public class GitRepositoryConfigEnricher extends JsonEnricherBase {
} }
@Override @Override
public void enrich(JsonEnricherContext context) { protected void enrichRepositoryNode(JsonNode repositoryNode, String namespace, String name) {
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();
if (GitRepositoryHandler.TYPE_NAME.equals(manager.get(new NamespaceAndName(namespace, name)).getType())) { if (GitRepositoryHandler.TYPE_NAME.equals(manager.get(new NamespaceAndName(namespace, name)).getType())) {
String repositoryConfigLink = new LinkBuilder(scmPathInfoStore.get().get(), GitConfigResource.class) String repositoryConfigLink = new LinkBuilder(scmPathInfoStore.get().get(), GitConfigResource.class)
.method("getRepositoryConfig") .method("getRepositoryConfig")
.parameters(namespace, name) .parameters(namespace, name)
.href(); .href();
addLink(repositoryNode, "configuration", repositoryConfigLink);
JsonNode newPullRequestNode = createObject(singletonMap("href", value(repositoryConfigLink)));
addPropertyNode(repositoryNode.get("_links"), "configuration", newPullRequestNode);
} }
} }
} }