package com.baidu.disconf.web.web.config.controller;
import javax.validation.constraints.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.baidu.disconf.web.service.config.service.ConfigMgr;
import com.baidu.disconf.web.web.config.validator.ConfigValidator;
import com.baidu.disconf.web.web.config.validator.FileUploadValidator;
import com.baidu.dsp.common.constant.WebConstants;
import com.baidu.dsp.common.controller.BaseController;
import com.baidu.dsp.common.exception.FileUploadException;
import com.baidu.dsp.common.vo.JsonObjectBase;
/**
* 专用于配置更新、删除
*
* @author liaoqiqi
* @version 2014-6-24
*/
@Controller
@RequestMapping(WebConstants.API_PREFIX + "/web/config")
public class ConfigUpdateController extends BaseController {
protected static final Logger LOG = LoggerFactory.getLogger(ConfigUpdateController.class);
@Autowired
private ConfigMgr configMgr;
@Autowired
private ConfigValidator configValidator;
@Autowired
private FileUploadValidator fileUploadValidator;
/**
* 配置项的更新
*
* @param configId
* @param value
*
* @return
*/
@RequestMapping(value = "/item/{configId}", method = RequestMethod.PUT)
@ResponseBody
public JsonObjectBase updateItem(@PathVariable long configId, String value) {
// 业务校验
configValidator.validateUpdateItem(configId, value);
LOG.info("start to update config: " + configId);
//
// 更新, 并写入数据库
//
String emailNotification = "";
emailNotification = configMgr.updateItemValue(configId, value);
//
// 通知ZK
//
configMgr.notifyZookeeper(configId);
return buildSuccess(emailNotification);
}
/**
* 配置文件的更新
*
* @param configId
* @param file
*
* @return
*/
@ResponseBody
@RequestMapping(value = "/file/{configId}", method = RequestMethod.POST)
public JsonObjectBase updateFile(@PathVariable long configId, @RequestParam("myfilerar") MultipartFile file) {
//
// 校验
//
int fileSize = 1024 * 1024 * 4;
String[] allowExtName = {".properties", ".xml"};
fileUploadValidator.validateFile(file, fileSize, allowExtName);
// 业务校验
configValidator.validateUpdateFile(configId, file.getOriginalFilename());
//
// 更新
//
String emailNotification = "";
try {
String str = new String(file.getBytes(), "UTF-8");
LOG.info("receive file: " + str);
emailNotification = configMgr.updateItemValue(configId, str);
LOG.info("update " + configId + " ok");
} catch (Exception e) {
LOG.error(e.toString());
throw new FileUploadException("upload file error", e);
}
//
// 通知ZK
//
configMgr.notifyZookeeper(configId);
return buildSuccess(emailNotification);
}
/**
* 配置文件的更新(文本修改)
*
* @param configId
* @param fileContent
*
* @return
*/
@ResponseBody
@RequestMapping(value = "/filetext/{configId}", method = RequestMethod.PUT)
public JsonObjectBase updateFileWithText(@PathVariable long configId, @NotNull String fileContent) {
//
// 更新
//
String emailNotification = "";
try {
String str = new String(fileContent.getBytes(), "UTF-8");
LOG.info("receive file: " + str);
emailNotification = configMgr.updateItemValue(configId, str);
LOG.info("update " + configId + " ok");
} catch (Exception e) {
throw new FileUploadException("upload.file.error", e);
}
//
// 通知ZK
//
configMgr.notifyZookeeper(configId);
return buildSuccess(emailNotification);
}
/**
* delete
*
* @return
*/
@RequestMapping(value = "/{configId}", method = RequestMethod.DELETE)
@ResponseBody
public JsonObjectBase delete(@PathVariable long configId) {
configValidator.validateDelete(configId);
configMgr.delete(configId);
return buildSuccess("删除成功");
}
}