/**
* Alipay.com Inc.
* Copyright (c) 2004-2012 All Rights Reserved.
*/
package com.alipay.zdal.client.config.controller;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.log4j.Logger;
import com.alipay.zdal.client.config.ZdalConfigListener;
import com.alipay.zdal.common.Constants;
import com.alipay.zdal.common.lang.StringUtil;
/**
* zdal �ź���Դ��, ��ҪΪ����Ӧzdal�ܿ�ƽ̨�ܿض���,���ڶ�̬����failover��markdown��markup��.
* ��Ҫ����ɽ�����zookeeper���ж�̬����.
* @author ����
* @version $Id: ZdalSignalResource.java, v 0.1 2012-11-17 ����4:05:12 Exp $
*/
public class ZdalSignalResource {
private static final String DRM_ATT_KEY_WEIGHT = "keyWeight";
/** ר�Ŵ�ӡ���ͽ����log��Ϣ. */
private static final Logger log = Logger
.getLogger(Constants.CONFIG_LOG_NAME_LOGNAME);
private ZdalConfigListener configListener;
private Lock lock = new ReentrantLock();
public ZdalSignalResource(ZdalConfigListener configListener) {
this.configListener = configListener;
registerZk();
}
/**
* ע��zoonkeeper�Ŀͻ��ˣ����ж�̬�ܿ�.
*/
private void registerZk() {
}
/**
*
* @param key
* @param value
*/
public void updateResource(String key, Object value) {
lock.lock();
try {
if (key.equals(DRM_ATT_KEY_WEIGHT)) {
if (value == null || StringUtil.isBlank(value.toString())) {
log.warn("WARN ## the keyWeight is null,will ignore this drm pull");
return;
}
Map<String, String> groupInfos = convertKeyWeights(value.toString());
if (groupInfos == null || groupInfos.isEmpty()) {
log.warn("WARN ## the pull keyWeights = " + value + " is invalidate");
return;
}
configListener.resetWeight(groupInfos);
}
} catch (Exception e) {
log.error("ERROR ## ", e);
} finally {
lock.unlock();
}
}
/**
* ����zoonkeeper�ͻ���.
*/
public void close() {
//TODO
}
/**
* failover:
* group_00=10,0;group_01=10,0
* @param keyWeight
* @return
*/
private Map<String, String> convertKeyWeights(String keyWeight) {
String[] splits = keyWeight.split(";");
Map<String, String> results = new HashMap<String, String>();
for (int i = 0; i < splits.length; i++) {
String tmp = splits[i];
String[] groupInfos = tmp.split("=");
results.put(groupInfos[0], groupInfos[1]);
}
return results;
}
}