Skip to content

Commit

Permalink
config file content support unicode to utf8
Browse files Browse the repository at this point in the history
  • Loading branch information
knightliao committed Jan 7, 2015
1 parent 2e38933 commit a186854
Show file tree
Hide file tree
Showing 5 changed files with 194 additions and 49 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (C) 2015 KNIGHT, Inc. All Rights Reserved.
*/
package com.example.disconf.demo.config;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import com.baidu.disconf.client.common.annotations.DisconfFile;
import com.baidu.disconf.client.common.annotations.DisconfFileItem;

/**
* Created by knightliao on 15/1/7.
*/
@Service
@Scope("singleton")
@DisconfFile(filename = "code.properties")
public class CodeConfig {

private String codeError = "";

@DisconfFileItem(name = "syserror.paramtype", associateField = "codeError")
public String getCodeError() {
return codeError;
}

public void setCodeError(String codeError) {
this.codeError = codeError;
}
}
7 changes: 6 additions & 1 deletion disconf-web/sql/20141226/disconf.sql
Original file line number Diff line number Diff line change
Expand Up @@ -139,4 +139,9 @@ INSERT INTO `role_resource` (`role_id`, `url_pattern`, `url_description`, `metho
INSERT INTO `role_resource` (`role_id`, `url_pattern`, `url_description`, `method_mask`) VALUES
(1,'/api/web/config/filetext/{configId}' , 'update' , '0100'),
(2,'/api/web/config/filetext/{configId}' , 'update' , '0100'),
(3,'/api/web/config/filetext/{configId}' , 'update' , '0000');
(3,'/api/web/config/filetext/{configId}' , 'update' , '0000');


INSERT INTO `config` (`config_id`, `type`, `name`, `value`, `app_id`, `version`, `env_id`, `create_time`, `update_time`)
VALUES
(146, 0, 'code.properties', 'syserror.paramtype=\\u8bf7\\u6c42\\u53c2\\u6570\\u89e3\\u6790\\u9519\" + \"\\u8bef', 2, '1_0_0_0', 1, '20150107115835', '20150107115835');
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import com.baidu.disconf.web.service.zookeeper.dto.ZkDisconfData;
import com.baidu.disconf.web.service.zookeeper.dto.ZkDisconfData.ZkDisconfDataItem;
import com.baidu.disconf.web.service.zookeeper.service.ZkDeployMgr;
import com.baidu.disconf.web.utils.CodeUtils;
import com.baidu.disconf.web.utils.DiffUtils;
import com.baidu.dsp.common.constant.DataFormatConstants;
import com.baidu.dsp.common.utils.DataTransfer;
Expand All @@ -48,7 +49,6 @@
import com.github.knightliao.apollo.utils.time.DateUtils;

/**
*
* @author liaoqiqi
* @version 2014-6-16
*/
Expand Down Expand Up @@ -103,14 +103,15 @@ public List<String> getVersionListByAppEnv(Long appId, Long envId) {

/**
* 配置文件的整合
*
*
* @param confListForm
*
* @return
*/
public List<File> getDisonfFileList(ConfListForm confListForm) {

List<Config> configList =
configDao.getConfigList(confListForm.getAppId(), confListForm.getEnvId(), confListForm.getVersion());
configDao.getConfigList(confListForm.getAppId(), confListForm.getEnvId(), confListForm.getVersion());

// 时间作为当前文件夹
String curTime = DateUtils.format(new Date(), DataFormatConstants.COMMON_TIME_FORMAT);
Expand Down Expand Up @@ -141,14 +142,14 @@ public List<File> getDisonfFileList(ConfListForm confListForm) {
*/
@Override
public DaoPageResult<ConfListVo> getConfigList(ConfListForm confListForm, boolean fetchZk,
final boolean getErrorMessage) {
final boolean getErrorMessage) {

//
// 数据据结果
//
DaoPageResult<Config> configList =
configDao.getConfigList(confListForm.getAppId(), confListForm.getEnvId(), confListForm.getVersion(),
confListForm.getPage());
DaoPageResult<Config> configList = configDao.getConfigList(confListForm.getAppId(), confListForm.getEnvId(),
confListForm.getVersion(),
confListForm.getPage());

//
//
Expand All @@ -171,40 +172,40 @@ public DaoPageResult<ConfListVo> getConfigList(ConfListForm confListForm, boolea
// 进行转换
//
DaoPageResult<ConfListVo> configListVo =
ServiceUtil.getResult(configList, new DataTransfer<Config, ConfListVo>() {
ServiceUtil.getResult(configList, new DataTransfer<Config, ConfListVo>() {

@Override
public ConfListVo transfer(Config input) {
@Override
public ConfListVo transfer(Config input) {

String appNameString = app.getName();
String envName = env.getName();
String appNameString = app.getName();
String envName = env.getName();

ZkDisconfData zkDisconfData = null;
if (myzkDataMap != null && myzkDataMap.keySet().contains(input.getName())) {
zkDisconfData = myzkDataMap.get(input.getName());
}
ConfListVo configListVo = convert(input, appNameString, envName, zkDisconfData);
ZkDisconfData zkDisconfData = null;
if (myzkDataMap != null && myzkDataMap.keySet().contains(input.getName())) {
zkDisconfData = myzkDataMap.get(input.getName());
}
ConfListVo configListVo = convert(input, appNameString, envName, zkDisconfData);

// 列表操作不要显示值, 为了前端显示快速(只是内存里操作)
if (myFetchZk && getErrorMessage) {
// 列表操作不要显示值, 为了前端显示快速(只是内存里操作)
if (myFetchZk && getErrorMessage) {

if (getErrorMessage) {
} else {
// 列表 value 设置为 ""
configListVo.setValue("");
configListVo.setMachineList(new ArrayList<ZkDisconfData.ZkDisconfDataItem>());
}
if (getErrorMessage) {
} else {
// 列表 value 设置为 ""
configListVo.setValue("");
configListVo.setMachineList(new ArrayList<ZkDisconfData.ZkDisconfDataItem>());
}

return configListVo;
}
});

return configListVo;
}
});

return configListVo;
}

/**
*
*
*/
private MachineListVo getZkData(List<ZkDisconfDataItem> datalist, Config config) {

Expand Down Expand Up @@ -246,8 +247,9 @@ private MachineListVo getZkData(List<ZkDisconfDataItem> datalist, Config config)

/**
* 转换成配置返回
*
*
* @param config
*
* @return
*/
private ConfListVo convert(Config config, String appNameString, String envName, ZkDisconfData zkDisconfData) {
Expand All @@ -263,7 +265,7 @@ private ConfListVo convert(Config config, String appNameString, String envName,
confListVo.setModifyTime(config.getUpdateTime().substring(0, 12));
confListVo.setKey(config.getName());
// StringEscapeUtils.escapeHtml escape
confListVo.setValue(config.getValue());
confListVo.setValue(CodeUtils.unicodeToUtf8(config.getValue()));
confListVo.setVersion(config.getVersion());
confListVo.setType(DisConfigTypeEnum.getByType(config.getType()).getModelName());
confListVo.setTypeId(config.getType());
Expand All @@ -288,7 +290,7 @@ private ConfListVo convert(Config config, String appNameString, String envName,
}

/**
*
*
*/
private List<String> compareConifg(String zkData, String dbData) {

Expand Down Expand Up @@ -317,8 +319,8 @@ private List<String> compareConifg(String zkData, String dbData) {
} else {

if (!zkDataStr.equals(valueInDb.toString().trim())) {
errorKeyList.add(keyInZk + "\t"
+ DiffUtils.getDiffSimple(zkDataStr, valueInDb.toString().trim()));
errorKeyList
.add(keyInZk + "\t" + DiffUtils.getDiffSimple(zkDataStr, valueInDb.toString().trim()));
}
}

Expand Down Expand Up @@ -364,9 +366,8 @@ public MachineListVo getConfVoWithZk(Long configId) {
disConfigTypeEnum = DisConfigTypeEnum.ITEM;
}

ZkDisconfData zkDisconfData =
zkDeployMgr.getZkDisconfData(app.getName(), env.getName(), config.getVersion(), disConfigTypeEnum,
config.getName());
ZkDisconfData zkDisconfData = zkDeployMgr.getZkDisconfData(app.getName(), env.getName(), config.getVersion(),
disConfigTypeEnum, config.getName());

MachineListVo machineListVo = getZkData(zkDisconfData.getData(), config);

Expand Down Expand Up @@ -403,9 +404,11 @@ public String updateItemValue(Long configId, String value) {
String toEmails = appMgr.getEmails(config.getAppId());

if (applicationPropertyConfig.isEmailMonitorOn() == true) {
boolean isSendSuccess =
logMailBean.sendHtmlEmail(toEmails, " config update",
DiffUtils.getDiff(oldValue, value, config.toString(), getConfigUrlHtml(config)));
boolean isSendSuccess = logMailBean.sendHtmlEmail(toEmails, " config update", DiffUtils
.getDiff(oldValue, value,
config
.toString(),
getConfigUrlHtml(config)));
if (isSendSuccess) {
return "修改成功,邮件通知成功";
} else {
Expand All @@ -417,19 +420,18 @@ public String updateItemValue(Long configId, String value) {
}

/**
*
* @return
*/
private String getConfigUrlHtml(Config config) {

return "<br/>点击<a href='http://" + applicationPropertyConfig.getDomain() + "/modifyFile.html?configId="
+ config.getId() + "'> 这里 </a> 进入查看<br/>";
return "<br/>点击<a href='http://" + applicationPropertyConfig.getDomain() + "/modifyFile.html?configId=" +
config.getId() + "'> 这里 </a> 进入查看<br/>";
}

/**
*
* @param newValue
* @param identify
*
* @return
*/
private String getNewValue(String newValue, String identify, String htmlClick) {
Expand All @@ -453,12 +455,13 @@ public void notifyZookeeper(Long configId) {
if (confListVo.getTypeId().equals(DisConfigTypeEnum.FILE.getType())) {

zooKeeperDriver.notifyNodeUpdate(confListVo.getAppName(), confListVo.getEnvName(), confListVo.getVersion(),
confListVo.getKey(), GsonUtils.toJson(confListVo.getValue()), DisConfigTypeEnum.FILE);
confListVo.getKey(), GsonUtils.toJson(confListVo.getValue()),
DisConfigTypeEnum.FILE);

} else {

zooKeeperDriver.notifyNodeUpdate(confListVo.getAppName(), confListVo.getEnvName(), confListVo.getVersion(),
confListVo.getKey(), confListVo.getValue(), DisConfigTypeEnum.ITEM);
confListVo.getKey(), confListVo.getValue(), DisConfigTypeEnum.ITEM);
}

}
Expand Down Expand Up @@ -498,8 +501,8 @@ public void newConfig(ConfNewItemForm confNewForm, DisConfigTypeEnum disConfigTy
String toEmails = appMgr.getEmails(config.getAppId());

if (applicationPropertyConfig.isEmailMonitorOn() == true) {
logMailBean.sendHtmlEmail(toEmails, " config new",
getNewValue(confNewForm.getValue(), config.toString(), getConfigUrlHtml(config)));
logMailBean.sendHtmlEmail(toEmails, " config new", getNewValue(confNewForm.getValue(), config.toString(),
getConfigUrlHtml(config)));
}

}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/*
* Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
*/
package com.baidu.disconf.web.utils;

/**
* Created by knightliao on 15/1/7.
*/
public class CodeUtils {

/**
* unicode 转换成 utf-8
*
* @param theString
*
* @return
*
* @author fanhui
* 2007-3-15
*/
public static String unicodeToUtf8(String theString) {
char aChar;
int len = theString.length();
StringBuffer outBuffer = new StringBuffer(len);
for (int x = 0; x < len; ) {
aChar = theString.charAt(x++);
if (aChar == '\\') {
aChar = theString.charAt(x++);
if (aChar == 'u') {
// Read the xxxx
int value = 0;
for (int i = 0; i < 4; i++) {
aChar = theString.charAt(x++);
switch (aChar) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value << 4) + aChar - '0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value << 4) + 10 + aChar - 'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value << 4) + 10 + aChar - 'A';
break;
default:
throw new IllegalArgumentException("Malformed \\uxxxx encoding.");
}
}
outBuffer.append((char) value);
} else {
if (aChar == 't') {
aChar = '\t';
} else if (aChar == 'r') {
aChar = '\r';
} else if (aChar == 'n') {
aChar = '\n';
} else if (aChar == 'f') {
aChar = '\f';
}
outBuffer.append(aChar);
}
} else {
outBuffer.append(aChar);
}
}
return outBuffer.toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.baidu.disconf.web.test.utils;

import org.junit.Assert;
import org.junit.Test;

import com.baidu.disconf.web.utils.CodeUtils;

/**
* Created by knightliao on 15/1/7.
*/
public class CodeUtilsTestCase {

@Test
public void unicodeToUtf8Test() {

String code =
CodeUtils.unicodeToUtf8("syserror.paramtype=\\u8bf7\\u6c42\\u53c2\\u6570\\u89e3\\u6790\\u9519" + "\\u8bef");

Assert.assertEquals("syserror.paramtype=请求参数解析错误", code);
}
}

0 comments on commit a186854

Please sign in to comment.