CMSgov/dpc-app

View on GitHub
dpc-api/src/main/java/gov/cms/dpc/api/resources/v1/BaseResource.java

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package gov.cms.dpc.api.resources.v1;

import gov.cms.dpc.api.auth.annotations.Public;
import gov.cms.dpc.api.core.Capabilities;
import gov.cms.dpc.api.resources.*;
import gov.cms.dpc.common.annotations.APIV1;
import gov.cms.dpc.common.utils.PropertiesProvider;
import io.swagger.annotations.*;
import org.hl7.fhir.dstu3.model.CapabilityStatement;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;


@Api(value = "Metadata")
@Path("/v1")
public class BaseResource extends AbstractBaseResource {

    private final AbstractKeyResource kr;
    private final AbstractTokenResource tr;
    private final AbstractGroupResource gr;
    private final AbstractJobResource jr;
    private final AbstractDataResource dr;
    private final AbstractEndpointResource er;
    private final AbstractOrganizationResource or;
    private final AbstractPatientResource par;
    private final AbstractPractitionerResource pr;
    private final AbstractDefinitionResource sdr;
    private final AbstractAdminResource ar;
    private final PropertiesProvider pp;
    private final AbstractIpAddressResource ip;
    private final String baseURL;
    @Inject
    public BaseResource(KeyResource kr,
                        TokenResource tr,
                        GroupResource gr,
                        JobResource jr,
                        DataResource dr,
                        EndpointResource er,
                        OrganizationResource or,
                        PatientResource par,
                        PractitionerResource pr,
                        DefinitionResource sdr,
                        AdminResource ar,
                        IpAddressResource ip,
                        @APIV1 String baseURL) {
        this.kr = kr;
        this.tr = tr;
        this.gr = gr;
        this.jr = jr;
        this.dr = dr;
        this.er = er;
        this.or = or;
        this.par = par;
        this.pr = pr;
        this.sdr = sdr;
        this.ar = ar;
        this.pp = new PropertiesProvider();
        this.ip = ip;
        this.baseURL = baseURL;
    }

    @Override
    @Public
    @GET
    @Path("/version")
    @ApiOperation(value = "Return the application build version")
    @Consumes(value = "*/*")
    @Produces(MediaType.TEXT_PLAIN)
    public String version() {
        return this.pp.getBuildVersion();
    }

    @Override
    @GET
    @Path("/metadata")
    @Public
    @ApiOperation(value = "Get FHIR Metadata", notes = "Returns the FHIR Capabilities statement for the application", response = CapabilityStatement.class)
    @ApiResponses(@ApiResponse(code = 200, message = "Successful operation", examples = @Example(@ExampleProperty(value = ""))))
    public CapabilityStatement metadata() {
        return Capabilities.getCapabilities(baseURL);
    }

    @Override
    public AbstractKeyResource keyOperations() {
        return this.kr;
    }

    @Override
    public AbstractTokenResource tokenOperations() {
        return this.tr;
    }

    @Override
    public AbstractGroupResource groupOperations() {
        return this.gr;
    }

    @Override
    public AbstractJobResource jobOperations() {
        return this.jr;
    }

    @Override
    public AbstractDefinitionResource definitionResourceOperations() {
        return this.sdr;
    }

    @Override
    public AbstractDataResource dataOperations() {
        return this.dr;
    }

    @Override
    public AbstractEndpointResource endpointOperations() {
        return this.er;
    }

    @Override
    public AbstractOrganizationResource organizationOperations() {
        return this.or;
    }

    @Override
    public AbstractAdminResource adminOperations() {
        return this.ar;
    }

    @Override
    public AbstractPatientResource patientOperations() {
        return this.par;
    }

    @Override
    public AbstractPractitionerResource practitionerOperations() {
        return this.pr;
    }

    @Override
    public AbstractIpAddressResource ipAddressOperations() {
        return this.ip;
    }
}