package com.baidu.disconf.web.web.config.validator;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baidu.disconf.core.common.constants.DisConfigTypeEnum;
import com.baidu.disconf.web.service.app.bo.App;
import com.baidu.disconf.web.service.app.service.AppMgr;
import com.baidu.disconf.web.service.config.bo.Config;
import com.baidu.disconf.web.service.config.form.ConfNewForm;
import com.baidu.disconf.web.service.config.form.ConfNewItemForm;
import com.baidu.disconf.web.service.config.service.ConfigFetchMgr;
import com.baidu.disconf.web.service.config.service.ConfigMgr;
import com.baidu.disconf.web.service.env.bo.Env;
import com.baidu.disconf.web.service.env.service.EnvMgr;
import com.baidu.disconf.web.service.user.service.AuthMgr;
import com.baidu.dsp.common.exception.FieldException;
/**
* @author liaoqiqi
* @version 2014-6-16
*/
@Service
public class ConfigValidator {
@Autowired
private AppMgr appMgr;
@Autowired
private EnvMgr envMgr;
@Autowired
private ConfigMgr configMgr;
@Autowired
private ConfigFetchMgr configFetchMgr;
@Autowired
private AuthMgr authMgr;
/**
* 校验
*
* @param id
*
* @return
*/
public Config valideConfigExist(Long id) {
//
// config
//
Config config = configMgr.getConfigById(id);
if (config == null) {
throw new FieldException("configId", "config.id.not.exist", null);
}
//
// validate app
//
validateAppAuth(config.getAppId());
return config;
}
/**
* 校验更新 配置值
*
* @param configId
* @param value
*/
public void validateUpdateItem(Long configId, String value) {
//
// config
//
valideConfigExist(configId);
//
// value
//
try {
if (StringUtils.isEmpty(value)) {
throw new Exception();
}
} catch (Exception e) {
throw new FieldException("value", "conf.item.value.null", e);
}
}
/**
* 校验更新 配置文件
*
* @param configId
* @param fileName
*/
public void validateUpdateFile(Long configId, String fileName) {
//
// config
//
Config config = valideConfigExist(configId);
//
// value
//
try {
if (!config.getName().equals(fileName)) {
throw new Exception();
}
} catch (Exception e) {
throw new FieldException("value", "conf.file.name.not.equal", e);
}
}
/**
* 判断配置是否更新
*
* @return
*/
public boolean isValueUpdate(Long configId, String newValue) {
//
// 判断值有没有更新
//
String oldValue = configMgr.getValue(configId);
if (newValue.equals(oldValue)) {
return false;
}
return true;
}
/**
* @param appId
*/
private void validateAppAuth(long appId) {
boolean ret = authMgr.verifyApp4CurrentUser(appId);
if (ret == false) {
throw new FieldException(ConfNewForm.APPID, "app.auth.noright", null);
}
}
/**
* 校验新建 配置
*
* @param confNewForm
* @param disConfigTypeEnum
*/
public void validateNew(ConfNewItemForm confNewForm, DisConfigTypeEnum disConfigTypeEnum) {
//
// app
//
App app = appMgr.getById(confNewForm.getAppId());
if (app == null) {
throw new FieldException(ConfNewForm.APPID, "app.not.exist", null);
}
//
validateAppAuth(app.getId());
//
// env
//
Env env = envMgr.getById(confNewForm.getEnvId());
if (env == null) {
throw new FieldException(ConfNewForm.ENVID, "env.not.exist", null);
}
//
// key
//
Config config = configFetchMgr.getConfByParameter(app.getId(), env.getId(), confNewForm.getVersion(),
confNewForm.getKey(), disConfigTypeEnum);
if (config != null) {
throw new FieldException(ConfNewItemForm.KEY, "key.exist", null);
}
}
/**
* 验证删除
*/
public void validateDelete(Long configId) {
Config config = configMgr.getConfigById(configId);
if (config == null) {
throw new FieldException("configId", "config.not.exist", null);
}
//
validateAppAuth(config.getAppId());
}
}