package controllers; import api.v1.Position; import api.v1.PositionSearch; import auth.modules.TokenAuthorize; import auth.types.PermissionType; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import compositions.*; import mapper.PositionMapper; import models.PositionModel; import play.libs.Json; import play.mvc.Result; import service.CoordinateConversionService; import service.PositionService; import java.io.IOException; import java.util.List; @ResponseTimeLoggingComposition.ResponseTimeLogging @RequestLoggingComposition.RequestLogging @NoCacheComposition.NoCache @ErrorHandlingComposition.ErrorHandling @CorsComposition.Cors public class PositionControllerV1 extends PoseidonController { @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getAll() { PositionService service = new PositionService(currentApiUser().username); List<PositionModel> positionModels = service.findAll(); List<Position> positions = new PositionMapper().mapToApi(positionModels); return ok(Json.toJson(positions)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result get(Long id) { PositionService service = new PositionService(currentApiUser().username); PositionModel positionModel = service.getById(id); if ( positionModel == null ){ return notFound("Posisjon med id " + id + " ble ikke funnet"); } Position position = new PositionMapper().mapToApi(positionModel); return ok(Json.toJson(position)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result getByName(String name) { PositionService service = new PositionService(currentApiUser().username); PositionModel positionModel = service.findByName(name); if ( positionModel == null ){ return notFound("Posisjon med navn " + name + " ble ikke funnet"); } Position position = new PositionMapper().mapToApi(positionModel); return ok(Json.toJson(position)); } @TokenAuthorize(requiredPermission = PermissionType.WRITE) public Result createOrUpdate(String callback) { JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); Position apiPosition; try { apiPosition = mapper.readValue(body.toString(),Position.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } PositionModel model = new PositionService(currentApiUser().username).createOrUpdate(apiPosition); Position newPosition = new PositionMapper().mapToApi(model); JsonNode jsonOut = Json.toJson(newPosition); return ok(callback,jsonOut); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result search(String callback){ JsonNode body = request().body().asJson(); PositionSearch apiSearch; ObjectMapper mapper = new ObjectMapper(); try { apiSearch = body == null ? new PositionSearch() : mapper.readValue(body.toString(), PositionSearch.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } List<PositionModel>positionModels = new PositionService(currentApiUser().username).search(apiSearch); List<Position> searchResults = new PositionMapper().mapToApi(positionModels); JsonNode jsonOut = Json.toJson(searchResults); return ok(callback,jsonOut); } /* Update the other coordinate fields based on the value in the field selected by the coordinateFormat enum */ @TokenAuthorize(requiredPermission = PermissionType.READ) public Result coord ( String callback){ JsonNode body = request().body().asJson(); Position apiPosition; ObjectMapper mapper = new ObjectMapper(); try { apiPosition = body == null ? new Position() : mapper.readValue(body.toString(), Position.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } apiPosition = new CoordinateConversionService(currentApiUser().username).convertCoordinates(apiPosition); JsonNode jsonOut = Json.toJson(apiPosition); return ok(callback,jsonOut); } public Result deletePosition(Long id) { PositionService positionService = new PositionService(currentApiUser().username); PositionModel position = positionService.getById(id); position = positionService.deletePosition(position); Position newPosition = new PositionMapper().mapToApi(position); JsonNode jsonOut = Json.toJson(newPosition); return ok(jsonOut); } }