/**
* <p>Copyright: Copyright (c) 2012</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.jres.basicdata.core.basicdata.validate.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
/**
* @author lvgao
*
*/
public class InfoTableItemLocator implements IKeyTableLocator{
String[] keyAttrs;
List<EObject> items;
Map<String, List<EObject>> cacheMap;
public InfoTableItemLocator(String[] keyAttrs){
this.keyAttrs = keyAttrs;
}
/**
* ��ʼ��
* @throws Exception
*/
public void setInput(List<EObject> items) {
this.items = items;
}
public void init() throws Exception{
if(null == cacheMap){
cacheMap = new HashMap<String, List<EObject>>();
}
cacheMap.clear(); //��ջ���
if(items.size() == 0 || keyAttrs.length == 0){
return ;
}
for(EObject item:items){
String key = getKeyStr(item);
if(!cacheMap.containsKey(key)){
cacheMap.put(key, new ArrayList<EObject>());
}
cacheMap.get(key).add(item);
}
}
private String getKeyStr(EObject obj) throws Exception{
StringBuffer buffer = new StringBuffer();
for(String attr:keyAttrs){
String str = "";
EStructuralFeature feature = obj.eClass().getEStructuralFeature(attr);
if(null == feature){
throw new Exception(String.format("������[%s]����", attr));
}
Object tobj = obj.eGet(feature);
if(null == str){
str = "";
}else if(tobj!=null){
str = tobj.toString().trim();
}
buffer.append(str + "\r\n");
}
return buffer.toString();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.basicdata.core.basicdata.validate.util.IKeyTableLocator#getLinkObject(org.eclipse.emf.ecore.EObject)
*/
@Override
public EObject getLinkObject(EObject obj) throws Exception{
if(null ==cacheMap ){
init(); //��ʼ��
}
String key = getKeyStr(obj);
if(cacheMap.containsKey(key)){
return cacheMap.get(key).get(0);
}
return null;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.basicdata.core.basicdata.validate.util.IKeyTableLocator#getLinkObjectCount(org.eclipse.emf.ecore.EObject)
*/
@Override
public int getLinkObjectCount(EObject obj)throws Exception{
if(null ==cacheMap ){
init(); //��ʼ��
}
String key = getKeyStr(obj);
if(cacheMap.containsKey(key)){
return cacheMap.get(key).size();
}
return 0;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.basicdata.core.basicdata.validate.util.IKeyTableLocator#clear()
*/
@Override
public void reset() {
if(null != cacheMap){
cacheMap.clear();
}
cacheMap = null;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.basicdata.core.basicdata.validate.util.IKeyTableLocator#isReady()
*/
@Override
public boolean isReady() {
return null != cacheMap;
}
}