package com.bitmonlab.osiris.api.map.rest.impl;
import javax.inject.Inject;
import javax.inject.Named;
import javax.validation.constraints.NotNull;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.hibernate.validator.constraints.NotBlank;
import com.bitmonlab.osiris.core.validations.rest.violationProcessor.RestViolationProcessor;
import com.bitmonlab.osiris.api.core.map.assemblers.MetaDataAssemblerImpl;
import com.bitmonlab.osiris.api.core.map.exceptions.MetaDataNotExistsException;
import com.bitmonlab.osiris.api.core.map.managers.impl.MetaDataManagerImpl;
import com.bitmonlab.osiris.api.core.map.transferobject.MetaDataDTO;
import com.bitmonlab.osiris.api.map.rest.api.MetaDataResource;
import com.bitmonlab.osiris.commons.map.model.geojson.MetaData;
import com.bitmonlab.osiris.commons.model.security.BasicAuth;
import com.bitmonlab.osiris.core.assembler.AssemblyException;
import com.bitmonlab.osiris.core.validations.validator.Validations;
import com.bitmonlab.osiris.core.validations.annotations.ValidationRequired;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiParam;
import com.wordnik.swagger.annotations.ApiResponse;
import com.wordnik.swagger.annotations.ApiResponses;
import com.yammer.dropwizard.auth.Auth;
@Api("/osiris/geolocation/territory/map/metadata")
@Path("/osiris/geolocation/territory/map/metadata")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Named
public class MetaDataResourceImpl implements MetaDataResource {
@Inject
private MetaDataManagerImpl metaDataManagerImpl;
@Inject
private MetaDataAssemblerImpl metaDataAssemblerImpl;
@Inject
@Named("validationsOsirisMap")
private Validations validations;
@Override
@GET
@ValidationRequired(processor = RestViolationProcessor.class)
@ApiOperation(value = "Get metadata of map", httpMethod="GET", response=MetaDataDTO.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Metadata of map was found", response=MetaDataDTO.class),
@ApiResponse(code = 400, message = "Invalid input parameter (header)"),
@ApiResponse(code = 400, message = "Metadata of map was not found")})
public Response getMetaData(@Auth BasicAuth principal,
@ApiParam(value = "Application identifier", required = true) @NotBlank @NotNull @HeaderParam("api_key") String appIdentifier) throws AssemblyException, MetaDataNotExistsException {
// TODO Auto-generated method stub
validations.checkIsNotNullAndNotBlank(appIdentifier);
MetaData metaData = metaDataManagerImpl.getMetaData(appIdentifier);
MetaDataDTO metaDataDTO=metaDataAssemblerImpl.createDataTransferObject(metaData);
return Response.ok(metaDataDTO).build();
}
}