/**
* Alipay.com Inc.
* Copyright (c) 2004-2012 All Rights Reserved.
*/
package com.alipay.zdal.rule.config.beans;
import java.util.HashMap;
import java.util.Map;
/**
* һ�������ķֿ�ֱ�������ã�һ��һ��
*
*/
public class ShardRule implements Cloneable {
private Map<String/*������*/, TableRule> tableRules;
private String defaultDbIndex;
/**
* ������getter/setter
*/
public Map<String, TableRule> getTableRules() {
return tableRules;
}
public void setTableRules(Map<String, TableRule> tableRules) {
this.tableRules = tableRules;
}
public String getDefaultDbIndex() {
return defaultDbIndex;
}
public void setDefaultDbIndex(String defaultDbIndex) {
this.defaultDbIndex = defaultDbIndex;
}
/**
* tableRules�´���map��ÿ��TableRule�����е�DbIndex��clone
*/
@Override
public ShardRule clone() throws CloneNotSupportedException {
ShardRule r = (ShardRule) super.clone();
Map<String, TableRule> tbrs = new HashMap<String, TableRule>(tableRules.size());
for (Map.Entry<String, TableRule> e : tableRules.entrySet()) {
TableRule tbr = e.getValue().clone();
String[] oldIndexes = tbr.getDbIndexArray();
String[] newIndexes = new String[oldIndexes.length];
System.arraycopy(oldIndexes, 0, newIndexes, 0, oldIndexes.length);
tbr.setDbIndexArray(newIndexes);
tbrs.put(e.getKey(), tbr);
}
r.setDefaultDbIndex(defaultDbIndex);
r.setTableRules(tbrs);
return r;
}
/* public boolean equals(Object obj) {
if (readwriteRule != null) {
return false;
}
AppRule appRule = (AppRule) obj;
ShardRule masterRule = ((AppRule) appRule).getMasterRule();
ShardRule slaveRule = appRule.getSlaveRule();
if (!this.masterRule.equals(masterRule)) {
return false;
}
if (!this.slaveRule.equals(slaveRule)) {
return false;
}
return true;
}*/
public boolean equals(Object obj) {
// tableRules
ShardRule shardRule = (ShardRule) obj;
Map<String/*������*/, TableRule> tableRules = shardRule.getTableRules();
if (tableRules == null || this.tableRules == null
|| tableRules.size() != this.tableRules.size()) {
return false;
}
for (Map.Entry<String, TableRule> entry : tableRules.entrySet()) {
String key = entry.getKey();
TableRule tr = entry.getValue();
TableRule tr2 = this.tableRules.get(key);
if (tr2 == null) {
return false;
}
if (tr2 != tr) {
return false;
}
}
return true;
}
}