package controllers; import api.v1.*; import auth.modules.TokenAuthorize; import auth.types.PermissionType; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import compositions.*; import mapper.UserPrefsMapper; import models.UserPreferenceModel; import play.libs.Json; import play.mvc.Http; import play.mvc.Result; import service.UserPreferenceService; import java.io.IOException; @ResponseTimeLoggingComposition.ResponseTimeLogging @NoCacheComposition.NoCache @ErrorHandlingComposition.ErrorHandling @RequestLoggingComposition.RequestLogging @CorsComposition.Cors public class PreferenceControllerV1 extends PoseidonController { public Result getPreferences(){ UserPreferences preferences = currentApiUser().preferences; if ( preferences == null) { preferences = new UserPreferences(); preferences.coordinateFormat = CoordinateFormat.DEGREES_MINUTES_SECONDS; preferences.showGrid = true; } return ok(Json.toJson(preferences)); } @TokenAuthorize(requiredPermission = PermissionType.READ) public Result setPreferences(String callback){ JsonNode body = request().body().asJson(); ObjectMapper mapper = new ObjectMapper(); UserPreferences prefs; try { prefs = mapper.readValue(body.toString(),UserPreferences.class); } catch (IOException e) { return badRequest("json post parameter parsing failure: " + e.getMessage()); } if ( prefs != null){ User currentApiUser = currentApiUser(); UserPreferenceModel model = new UserPreferenceService(currentApiUser.username) .updatePreferences(currentApiUser,prefs); prefs = new UserPrefsMapper().mapToApi(model); currentApiUser.preferences = prefs; Http.Context.current().args.put(PoseidonController.USER,currentApiUser); } //UserPreferenceModel model = JsonNode jsonOut = Json.toJson(prefs); return ok(callback,jsonOut); } }