package com.bitmonlab.osiris.api.map.rest.impl;
import java.io.InputStream;
import javax.inject.Inject;
import javax.inject.Named;
import javax.validation.constraints.NotNull;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import org.hibernate.validator.constraints.NotBlank;
import com.bitmonlab.osiris.core.validations.validator.Validations;
import com.bitmonlab.osiris.core.validations.annotations.ValidationRequired;
import com.bitmonlab.osiris.core.validations.rest.violationProcessor.RestViolationProcessor;
import com.bitmonlab.osiris.api.core.map.exceptions.MapFileNotExistsException;
import com.bitmonlab.osiris.api.core.map.managers.api.MapFileManager;
import com.bitmonlab.osiris.api.map.rest.api.MapFileResource;
import com.bitmonlab.osiris.commons.model.security.BasicAuth;
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/file")
@Path("/osiris/geolocation/territory/map/file")
@Named
public class MapFileResourceImpl implements MapFileResource{
@Inject
private MapFileManager mapFileManager;
@Inject
@Named("validationsOsirisMap")
private Validations validations;
@Override
@GET
@ValidationRequired(processor = RestViolationProcessor.class)
@ApiOperation(value = "Get .map file", httpMethod="GET", response=InputStream.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = ".map file was found", response=InputStream.class),
@ApiResponse(code = 400, message = "Invalid input parameter (header)"),
@ApiResponse(code = 404, message = ".map file was not found")})
public Response getMapFile(@Auth BasicAuth principal,
@ApiParam(value = "Application identifier", required = true) @NotBlank @NotNull @HeaderParam("api_key") String appIdentifier) throws MapFileNotExistsException{
validations.checkIsNotNullAndNotBlank(appIdentifier);
InputStream mapFile=mapFileManager.getMapFile(appIdentifier);
return Response.ok(mapFile).build();
}
}