/* * Copyright 2015 Hewlett-Packard Development Company, L.P. * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. */ package com.hp.autonomy.frontend.find.hod.configuration; import com.hp.autonomy.frontend.configuration.ConfigException; import com.hp.autonomy.frontend.configuration.ConfigFileService; import com.hp.autonomy.frontend.configuration.ConfigResponse; import com.hp.autonomy.frontend.configuration.validation.ConfigValidationException; import com.hp.autonomy.frontend.logging.Markers; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import java.util.Collections; @Controller @RequestMapping({"/api/admin/config", "/api/config/config"}) @Slf4j // TODO have a think about this (maybe make it a generic type and instantiate in config class) public class HodConfigurationController { @Autowired private ConfigFileService<HodFindConfig> configService; @RequestMapping(value = "/config", method = RequestMethod.GET) @ResponseBody public ConfigResponse<HodFindConfig> config() { return configService.getConfigResponse(); } @SuppressWarnings("ProhibitedExceptionDeclared") @RequestMapping(value = "/config", method = {RequestMethod.POST, RequestMethod.PUT}) @ResponseBody public ResponseEntity<?> saveConfig(@RequestBody final ConfigResponse<HodFindConfig> configResponse) throws Exception { try { log.info(Markers.AUDIT, "REQUESTED CHANGE APPLICATION CONFIGURATION"); configService.updateConfig(configResponse.getConfig()); log.info(Markers.AUDIT, "CHANGED APPLICATION CONFIGURATION"); return new ResponseEntity<>(configService.getConfigResponse(), HttpStatus.OK); } catch (final ConfigException ce) { log.info(Markers.AUDIT, "CHANGE APPLICATION CONFIGURATION FAILED"); return new ResponseEntity<>(Collections.singletonMap("exception", ce.getMessage()), HttpStatus.NOT_ACCEPTABLE); } catch (final ConfigValidationException cve) { log.info(Markers.AUDIT, "CHANGE APPLICATION CONFIGURATION FAILED"); return new ResponseEntity<>(Collections.singletonMap("validation", cve.getValidationErrors()), HttpStatus.NOT_ACCEPTABLE); } } }