Skip to content

Commit f5371a4

Browse files
AS-2921: Add TopLevelEndpointsImpl.
1 parent ea1e331 commit f5371a4

File tree

8 files changed

+171
-0
lines changed

8 files changed

+171
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<artifactId>farms-api-rest-common</artifactId>
7+
<packaging>jar</packaging>
8+
<name>farms-api-rest-common</name>
9+
<parent>
10+
<artifactId>farms-api-parent</artifactId>
11+
<groupId>ca.bc.gov.farms</groupId>
12+
<version>1.0.0-SNAPSHOT</version>
13+
</parent>
14+
<dependencies>
15+
16+
<!-- NRS Common -->
17+
<dependency>
18+
<groupId>ca.bc.gov.nrs.wfone.common</groupId>
19+
<artifactId>wfone-common-rest-common</artifactId>
20+
</dependency>
21+
</dependencies>
22+
23+
</project>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package ca.bc.gov.farms.api.rest.v1.resource;
2+
3+
import javax.xml.bind.annotation.XmlRootElement;
4+
5+
import com.fasterxml.jackson.annotation.JsonSubTypes;
6+
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
7+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
8+
9+
import ca.bc.gov.mal.cirras.underwriting.api.rest.v1.resource.types.ResourceTypes;
10+
import ca.bc.gov.nrs.common.wfone.rest.resource.BaseResource;
11+
12+
@XmlRootElement(namespace = ResourceTypes.NAMESPACE, name = ResourceTypes.ENDPOINTS_NAME)
13+
@JsonSubTypes({ @Type(value = EndpointsRsrc.class, name = ResourceTypes.ENDPOINTS) })
14+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@type")
15+
public class EndpointsRsrc extends BaseResource {
16+
private static final long serialVersionUID = -7844824213085594025L;
17+
18+
private String releaseVersion;
19+
20+
public String getReleaseVersion() {
21+
return releaseVersion;
22+
}
23+
24+
public void setReleaseVersion(String releaseVersion) {
25+
this.releaseVersion = releaseVersion;
26+
}
27+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package ca.bc.gov.farms.api.rest.v1.resource.types;
2+
3+
import ca.bc.gov.nrs.common.wfone.rest.resource.types.BaseResourceTypes;
4+
5+
public class ResourceTypes extends BaseResourceTypes {
6+
7+
}

farms-api/farms-api-rest-endpoints/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
<artifactId>farms-service-api</artifactId>
2121
<version>${project.parent.version}</version>
2222
</dependency>
23+
<dependency>
24+
<groupId>ca.bc.gov.farms</groupId>
25+
<artifactId>farms-api-rest-common</artifactId>
26+
<version>${project.parent.version}</version>
27+
</dependency>
2328
<dependency>
2429
<groupId>ca.bc.gov.nrs.wfone.common</groupId>
2530
<artifactId>wfone-common-rest-endpoints</artifactId>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package ca.bc.gov.farms.api.rest.v1.endpoints;
2+
3+
import javax.ws.rs.GET;
4+
import javax.ws.rs.Path;
5+
import javax.ws.rs.Produces;
6+
import javax.ws.rs.core.MediaType;
7+
import javax.ws.rs.core.Response;
8+
9+
import ca.bc.gov.farms.api.rest.v1.resource.EndpointsRsrc;
10+
import ca.bc.gov.nrs.common.wfone.rest.resource.HeaderConstants;
11+
import ca.bc.gov.nrs.common.wfone.rest.resource.MessageListRsrc;
12+
import ca.bc.gov.nrs.wfone.common.rest.endpoints.BaseEndpoints;
13+
import io.swagger.v3.oas.annotations.Operation;
14+
import io.swagger.v3.oas.annotations.Parameter;
15+
import io.swagger.v3.oas.annotations.Parameters;
16+
import io.swagger.v3.oas.annotations.enums.ParameterIn;
17+
import io.swagger.v3.oas.annotations.extensions.Extension;
18+
import io.swagger.v3.oas.annotations.extensions.ExtensionProperty;
19+
import io.swagger.v3.oas.annotations.headers.Header;
20+
import io.swagger.v3.oas.annotations.media.Content;
21+
import io.swagger.v3.oas.annotations.media.Schema;
22+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
23+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
24+
25+
@Path("/")
26+
public interface TopLevelEndpoints extends BaseEndpoints {
27+
28+
@Operation(operationId = "Get Top Level Resources.", summary = "Get Top Level Resources", extensions = {
29+
@Extension(properties = { @ExtensionProperty(name = "auth-type", value = "#{wso2.x-auth-type.none}"),
30+
@ExtensionProperty(name = "throttling-tier", value = "Unlimited") }) })
31+
@Parameters({
32+
@Parameter(name = HeaderConstants.REQUEST_ID_HEADER, description = HeaderConstants.REQUEST_ID_HEADER_DESCRIPTION, required = false, schema = @Schema(implementation = String.class), in = ParameterIn.HEADER),
33+
@Parameter(name = HeaderConstants.VERSION_HEADER, description = HeaderConstants.VERSION_HEADER_DESCRIPTION, required = false, schema = @Schema(implementation = Integer.class), in = ParameterIn.HEADER),
34+
@Parameter(name = HeaderConstants.CACHE_CONTROL_HEADER, description = HeaderConstants.CACHE_CONTROL_DESCRIPTION, required = false, schema = @Schema(implementation = String.class), in = ParameterIn.HEADER),
35+
@Parameter(name = HeaderConstants.PRAGMA_HEADER, description = HeaderConstants.PRAGMA_HEADER_DESCRIPTION, required = false, schema = @Schema(implementation = String.class), in = ParameterIn.HEADER),
36+
@Parameter(name = HeaderConstants.AUTHORIZATION_HEADER, description = HeaderConstants.AUTHORIZATION_HEADER_DESCRIPTION, required = false, schema = @Schema(implementation = String.class), in = ParameterIn.HEADER)
37+
})
38+
@ApiResponses(value = {
39+
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = EndpointsRsrc.class)), headers = @Header(name = HeaderConstants.ETAG_HEADER, schema = @Schema(implementation = String.class), description = HeaderConstants.ETAG_DESCRIPTION)),
40+
@ApiResponse(responseCode = "500", description = "Internal Server Error", content = @Content(schema = @Schema(implementation = MessageListRsrc.class))) })
41+
@GET
42+
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
43+
Response getTopLevel();
44+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package ca.bc.gov.farms.api.rest.v1.endpoints.impl;
2+
3+
import java.net.URI;
4+
5+
import javax.ws.rs.GET;
6+
import javax.ws.rs.HttpMethod;
7+
import javax.ws.rs.Produces;
8+
import javax.ws.rs.core.GenericEntity;
9+
import javax.ws.rs.core.MediaType;
10+
import javax.ws.rs.core.Response;
11+
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
14+
15+
import ca.bc.gov.farms.api.rest.v1.endpoints.TopLevelEndpoints;
16+
import ca.bc.gov.farms.api.rest.v1.resource.EndpointsRsrc;
17+
import ca.bc.gov.farms.api.rest.v1.resource.types.ResourceTypes;
18+
import ca.bc.gov.nrs.common.wfone.rest.resource.RelLink;
19+
import ca.bc.gov.nrs.wfone.common.api.rest.code.resource.factory.CodeTableResourceFactory;
20+
import ca.bc.gov.nrs.wfone.common.rest.endpoints.BaseEndpointsImpl;
21+
22+
public class TopLevelEndpointsImpl extends BaseEndpointsImpl implements TopLevelEndpoints {
23+
/** Logger. */
24+
private static final Logger logger = LoggerFactory.getLogger(TopLevelEndpointsImpl.class);
25+
26+
@Override
27+
@GET
28+
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
29+
public Response getTopLevel() {
30+
Response response = null;
31+
32+
URI baseUri = this.getBaseUri();
33+
34+
EndpointsRsrc result = new EndpointsRsrc();
35+
36+
result.setReleaseVersion(this.getApplicationProperties().getProperty("application.version"));
37+
38+
try {
39+
40+
String selfURI = CodeTableResourceFactory.getCodeTablesSelfUri(null, baseUri);
41+
result.getLinks().add(new RelLink(ResourceTypes.CODE_TABLE_LIST, selfURI, HttpMethod.GET));
42+
43+
result.setETag(getEtag(result));
44+
45+
GenericEntity<EndpointsRsrc> entity = new GenericEntity<EndpointsRsrc>(result) {
46+
/* do nothing */
47+
};
48+
49+
response = Response.ok(entity).tag(result.getUnquotedETag()).build();
50+
51+
} catch (Throwable t) {
52+
response = getInternalServerErrorResponse(t);
53+
}
54+
55+
if (logger.isDebugEnabled()) {
56+
logger.debug("getTopLevel=" + response);
57+
}
58+
59+
return response;
60+
}
61+
}

farms-api/farms-api-rest-endpoints/src/main/java/ca/bc/gov/farms/api/rest/v1/jersey/JerseyApplication.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import org.slf4j.Logger;
77
import org.slf4j.LoggerFactory;
8+
9+
import ca.bc.gov.farms.api.rest.v1.endpoints.impl.TopLevelEndpointsImpl;
810
import ca.bc.gov.nrs.wfone.common.api.rest.code.endpoints.impl.CodeTableEndpointsImpl;
911
import ca.bc.gov.nrs.wfone.common.api.rest.code.endpoints.impl.CodeTableListEndpointsImpl;
1012
import ca.bc.gov.nrs.wfone.common.rest.endpoints.jersey.JerseyResourceConfig;
@@ -21,6 +23,7 @@ public JerseyApplication(@Context ServletConfig servletConfig) {
2123

2224
logger.debug("<JerseyApplication");
2325

26+
register(TopLevelEndpointsImpl.class);
2427
register(CodeTableEndpointsImpl.class);
2528
register(CodeTableListEndpointsImpl.class);
2629

farms-api/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
</properties>
2222
<modules>
2323
<module>farms-service-api</module>
24+
<module>farms-api-rest-common</module>
2425
<module>farms-api-rest-endpoints</module>
2526
<module>farms-persistence</module>
2627
</modules>

0 commit comments

Comments
 (0)