/**
* =============================================================================
*
* ORCID (R) Open Source
* http://orcid.org
*
* Copyright (c) 2012-2014 ORCID, Inc.
* Licensed under an MIT-Style License (MIT)
* http://orcid.org/open-source-license
*
* This copyright and license information (including a link to the full license)
* shall be included in its entirety in all copies or substantial portion of
* the software.
*
* =============================================================================
*/
package org.orcid.api.publicV2.server;
import static org.orcid.core.api.OrcidApiConstants.ACTIVITIES;
import static org.orcid.core.api.OrcidApiConstants.EDUCATION;
import static org.orcid.core.api.OrcidApiConstants.EDUCATION_SUMMARY;
import static org.orcid.core.api.OrcidApiConstants.EMPLOYMENT;
import static org.orcid.core.api.OrcidApiConstants.EMPLOYMENT_SUMMARY;
import static org.orcid.core.api.OrcidApiConstants.FUNDING;
import static org.orcid.core.api.OrcidApiConstants.FUNDING_SUMMARY;
import static org.orcid.core.api.OrcidApiConstants.ORCID_JSON;
import static org.orcid.core.api.OrcidApiConstants.ORCID_XML;
import static org.orcid.core.api.OrcidApiConstants.PEER_REVIEW;
import static org.orcid.core.api.OrcidApiConstants.PEER_REVIEW_SUMMARY;
import static org.orcid.core.api.OrcidApiConstants.PUTCODE;
import static org.orcid.core.api.OrcidApiConstants.STATUS_PATH;
import static org.orcid.core.api.OrcidApiConstants.VND_ORCID_JSON;
import static org.orcid.core.api.OrcidApiConstants.VND_ORCID_XML;
import static org.orcid.core.api.OrcidApiConstants.WORK;
import static org.orcid.core.api.OrcidApiConstants.WORK_SUMMARY;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.orcid.api.common.swagger.SwaggerUIBuilder;
import org.orcid.api.publicV2.server.delegator.PublicV2ApiServiceDelegator;
import org.orcid.core.api.OrcidApiConstants;
import org.orcid.jaxb.model.groupid_rc1.GroupIdRecord;
import org.orcid.jaxb.model.record.summary_rc1.ActivitiesSummary;
import org.orcid.jaxb.model.record.summary_rc1.EducationSummary;
import org.orcid.jaxb.model.record.summary_rc1.EmploymentSummary;
import org.orcid.jaxb.model.record.summary_rc1.FundingSummary;
import org.orcid.jaxb.model.record.summary_rc1.PeerReviewSummary;
import org.orcid.jaxb.model.record.summary_rc1.WorkSummary;
import org.orcid.jaxb.model.record_rc1.Education;
import org.orcid.jaxb.model.record_rc1.Employment;
import org.orcid.jaxb.model.record_rc1.Funding;
import org.orcid.jaxb.model.record_rc1.PeerReview;
import org.orcid.jaxb.model.record_rc1.Work;
import org.springframework.beans.factory.annotation.Value;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
/**
*
* @author Angel Montenegro
*
*/
@Path("/v2.0_rc1")
public class PublicV2ApiServiceImplV2_0_rc1 {
protected PublicV2ApiServiceDelegator<Education, Employment, ?, Funding, GroupIdRecord, ?, PeerReview, ?, Work> serviceDelegator;
@Value("${org.orcid.core.baseUri}")
protected String baseUri;
@Value("${org.orcid.core.pubBaseUri}")
protected String pubBaseUri;
public void setServiceDelegator(
PublicV2ApiServiceDelegator<Education, Employment, ?, Funding, GroupIdRecord, ?, PeerReview, ?, Work> serviceDelegator) {
this.serviceDelegator = serviceDelegator;
}
/**
* Serves the Swagger UI HTML page
*
* @return a 200 response containing the HTML
*/
@GET
@Produces(value = { MediaType.TEXT_HTML })
@Path("/")
@ApiOperation(value = "Fetch the HTML swagger UI interface", hidden = true)
public Response viewSwagger() {
return new SwaggerUIBuilder().buildSwaggerHTML(baseUri, pubBaseUri, true);
}
@GET
@Produces(value = { MediaType.TEXT_PLAIN })
@Path(STATUS_PATH)
@ApiOperation(value = "Check the server status", response = String.class)
public Response viewStatusText() {
return serviceDelegator.viewStatusText();
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(ACTIVITIES)
@ApiOperation(value = "Fetch all Activities", response = ActivitiesSummary.class)
public Response viewActivities(@PathParam("orcid") String orcid, @Context HttpServletRequest httpRequest) {
return serviceDelegator.viewActivities(orcid);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON,
OrcidApiConstants.APPLICATION_CITEPROC })
@Path(WORK + PUTCODE)
@ApiOperation(value = "Fetch a Work", notes = "More notes about this method", response = Work.class)
public Response viewWork(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode, @Context HttpServletRequest httpRequest) {
if (OrcidApiConstants.APPLICATION_CITEPROC.equals(httpRequest.getHeader("Accept")))
return serviceDelegator.viewWorkCitation(orcid, putCode);
return serviceDelegator.viewWork(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(WORK_SUMMARY + PUTCODE)
@ApiOperation(value = "Fetch a Work Summary", response = WorkSummary.class)
public Response viewWorkSummary(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewWorkSummary(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(FUNDING + PUTCODE)
@ApiOperation(value = "Fetch a Funding", response = Funding.class)
public Response viewFunding(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewFunding(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(FUNDING_SUMMARY + PUTCODE)
@ApiOperation(value = "Fetch a Funding Summary", response = FundingSummary.class)
public Response viewFundingSummary(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewFundingSummary(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(EDUCATION + PUTCODE)
@ApiOperation(value = "Fetch an Education", response = Education.class)
public Response viewEducation(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewEducation(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(EDUCATION_SUMMARY + PUTCODE)
@ApiOperation(value = "Fetch an Education Summary", response = EducationSummary.class)
public Response viewEducationSummary(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewEducationSummary(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(EMPLOYMENT + PUTCODE)
@ApiOperation(value = "Fetch an Employment", notes = "Retrive a specific education representation", response = Employment.class)
@ApiResponses(value = { @ApiResponse(code = 200, message = "Employment found", response = Employment.class),
@ApiResponse(code = 404, message = "Employment not found") })
public Response viewEmployment(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewEmployment(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(EMPLOYMENT_SUMMARY + PUTCODE)
@ApiOperation(value = "Fetch an Employment Summary", response = EmploymentSummary.class)
public Response viewEmploymentSummary(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewEmploymentSummary(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(PEER_REVIEW + PUTCODE)
@ApiOperation(value = "Fetch a Peer Review", response = PeerReview.class)
public Response viewPeerReview(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewPeerReview(orcid, putCode);
}
@GET
@Produces(value = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON })
@Path(PEER_REVIEW_SUMMARY + PUTCODE)
@ApiOperation(value = "Fetch a Peer Review Summary", response = PeerReviewSummary.class)
public Response viewPeerReviewSummary(@PathParam("orcid") String orcid, @PathParam("putCode") Long putCode) {
return serviceDelegator.viewPeerReviewSummary(orcid, putCode);
}
}