diff --git a/src/main/java/org/gitlab4j/api/GitLabApi.java b/src/main/java/org/gitlab4j/api/GitLabApi.java index c03defb7b..1ec4d1ad6 100644 --- a/src/main/java/org/gitlab4j/api/GitLabApi.java +++ b/src/main/java/org/gitlab4j/api/GitLabApi.java @@ -99,6 +99,7 @@ public String getApiNamespace() { private UserApi userApi; private WikisApi wikisApi; private KeysApi keysApi; + private MetadataApi metadataApi; /** * Get the GitLab4J shared Logger instance. @@ -1463,7 +1464,7 @@ public ReleaseLinksApi getReleaseLinksApi() { return releaseLinksApi; } - + /** * Gets the ReleasesApi instance owned by this GitLabApi instance. The ReleasesApi is used * to perform all release related API calls. @@ -1739,6 +1740,21 @@ public KeysApi getKeysAPI() { return keysApi; } + /** + * Gets the MetadataApi instance owned by this GitlabApi instance. The MetadataApi is used to + * retrieve metadata information for this GitLab instance + * + * @return the MetadataApi instance owned by this GitlabApi instance + */ + public MetadataApi getMetadataApi() { + synchronized (this) { + if (metadataApi == null) { + metadataApi = new MetadataApi(this); + } + } + return metadataApi; + } + /** * Create and return an Optional instance associated with a GitLabApiException. diff --git a/src/main/java/org/gitlab4j/api/MetadataApi.java b/src/main/java/org/gitlab4j/api/MetadataApi.java new file mode 100644 index 000000000..fd46372d5 --- /dev/null +++ b/src/main/java/org/gitlab4j/api/MetadataApi.java @@ -0,0 +1,31 @@ +package org.gitlab4j.api; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import org.gitlab4j.api.models.Metadata; + +/** + * This class implements the client side API for the Gitlab metadata call. + * + * @see Metadata API at Gitlab + */ +public class MetadataApi extends AbstractApi { + + public MetadataApi(GitLabApi gitLabApi) { + super(gitLabApi); + } + + /** + * Get Gitlab metadata + * + *
Gitlab Endpoint: GET /metadata
+ * + * @return Gitlab metadata + * @throws GitLabApiException if any exception occurs + */ + public Metadata getMetadata() throws GitLabApiException { + Response response = get(Status.OK, null, "metadata"); + return (response.readEntity(Metadata.class)); + } + +} diff --git a/src/main/java/org/gitlab4j/api/models/Metadata.java b/src/main/java/org/gitlab4j/api/models/Metadata.java new file mode 100644 index 000000000..2b91dd4c3 --- /dev/null +++ b/src/main/java/org/gitlab4j/api/models/Metadata.java @@ -0,0 +1,89 @@ +package org.gitlab4j.api.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.gitlab4j.api.utils.JacksonJson; + +public class Metadata { + + private String version; + private String revision; + private Kas kas; + private Boolean enterprise; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getRevision() { + return revision; + } + + public void setRevision(String revision) { + this.revision = revision; + } + + public Kas getKas() { + return kas; + } + + public void setKas(Kas kas) { + this.kas = kas; + } + + public Boolean getEnterprise() { + return enterprise; + } + + public void setEnterprise(Boolean enterprise) { + this.enterprise = enterprise; + } + + @Override + public String toString() { + return (JacksonJson.toJsonString(this)); + } + + private static class Kas { + + private Boolean enabled; + @JsonProperty("externalUrl") + private String externalUrl; + private String version; + + public Boolean getEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + + public String getExternalUrl() { + return externalUrl; + } + + public void setExternalUrl(String externalUrl) { + this.externalUrl = externalUrl; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + @Override + public String toString() { + return (JacksonJson.toJsonString(this)); + } + } + + + +} diff --git a/src/test/java/org/gitlab4j/api/TestGitLabApiBeans.java b/src/test/java/org/gitlab4j/api/TestGitLabApiBeans.java index 508a1f6d8..474cfeed8 100644 --- a/src/test/java/org/gitlab4j/api/TestGitLabApiBeans.java +++ b/src/test/java/org/gitlab4j/api/TestGitLabApiBeans.java @@ -87,6 +87,7 @@ import org.gitlab4j.api.models.MergeRequest; import org.gitlab4j.api.models.MergeRequestDiff; import org.gitlab4j.api.models.MergeRequestVersion; +import org.gitlab4j.api.models.Metadata; import org.gitlab4j.api.models.Milestone; import org.gitlab4j.api.models.Note; import org.gitlab4j.api.models.NotificationSettings; @@ -790,4 +791,10 @@ public void testProjectAccessToken() throws Exception { ProjectAccessToken token = unmarshalResource(ProjectAccessToken.class, "project-access-token.json"); assertTrue(compareJson(token, "project-access-token.json")); } + + @Test + public void testMetadata() throws Exception { + Metadata metadata = unmarshalResource(Metadata.class, "metadata.json"); + assertTrue(compareJson(metadata, "metadata.json")); + } } diff --git a/src/test/java/org/gitlab4j/api/TestMetadataApi.java b/src/test/java/org/gitlab4j/api/TestMetadataApi.java new file mode 100644 index 000000000..957093fe3 --- /dev/null +++ b/src/test/java/org/gitlab4j/api/TestMetadataApi.java @@ -0,0 +1,47 @@ +package org.gitlab4j.api; + +import static org.junit.jupiter.api.Assumptions.assumeTrue; + +import org.gitlab4j.api.models.Metadata; +import org.gitlab4j.api.models.Project; +import org.gitlab4j.api.models.User; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +@Tag("integration") +@ExtendWith(SetupIntegrationTestExtension.class) +@Disabled("Required Gitlab version not less then 15.6") +public class TestMetadataApi extends AbstractIntegrationTest { + + private static GitLabApi gitLabApi; + private static Project testProject; + private static User currentUser; + + public TestMetadataApi() { + super(); + } + + @BeforeAll + public static void setup() { + gitLabApi = baseTestSetup(); + testProject = getTestProject(); + currentUser = getCurrentUser(); + } + + @BeforeEach + public void beforeMethod() { + assumeTrue(gitLabApi != null); + } + + @Test + public void testGetMetadata() throws GitLabApiException { + Metadata metadata = gitLabApi.getMetadataApi().getMetadata(); + System.out.println("METADATA +\n" + metadata); + } + + +} diff --git a/src/test/resources/org/gitlab4j/api/metadata.json b/src/test/resources/org/gitlab4j/api/metadata.json new file mode 100644 index 000000000..e77dd049d --- /dev/null +++ b/src/test/resources/org/gitlab4j/api/metadata.json @@ -0,0 +1,10 @@ +{ + "version": "15.11.13", + "revision": "cc3748fcd2d", + "kas": { + "enabled": true, + "externalUrl": "ws://820bd8a8b4f6/-/kubernetes-agent/", + "version": "v15.11.0" + }, + "enterprise": false +}