/**
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.procedure.ui.support;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.context.statistic.IResourceTable;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
import com.hundsun.ares.studio.ui.assist.JresResourceRefConentProposalPovider;
import com.hundsun.ares.studio.ui.cellEditor.IContentProposalProviderHelper;
/**
* @author qinyuan
*
*/
public class ProcedureRelatedTableInfoContentProposalProvider extends JresResourceRefConentProposalPovider {
public ProcedureRelatedTableInfoContentProposalProvider(IContentProposalProviderHelper helper, String resType, IARESProject project) {
super(helper, resType, project);
}
@Override
protected boolean filter(Object inputItem, Object element) {
if (inputItem instanceof Map && element instanceof TableResourceData) {
@SuppressWarnings("rawtypes")
Map map = (Map) inputItem;
IARESResource res = (IARESResource) map.get(IResourceTable.TARGET_RESOURCE);
TableResourceData item = (TableResourceData) map.get(IResourceTable.TARGET_OWNER);
TableResourceData elementItem = (TableResourceData) element;
if (res.getARESProject().equals(project) && item.getName().equals(elementItem.getName()) ) {
return false;
}
}
return true;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.contentassist.JresResourceRefConentProposalPovider#updateContent(java.lang.Object)
*/
@Override
public void updateContent(Object element) {
List<ReferenceInfo> referenceInfoList =ReferenceManager.getInstance().getReferenceInfos(project,resType,true);
if (referenceInfoList==null || referenceInfoList.size()==0) {
setInput(new Object[0]);
} else{
// ���˵��ظ��ı��ֶζ���
Set<String> errorSet = new HashSet<String>();
Set<String> processedSet = new HashSet<String>();
Map<String, Object> processedObjects = new HashMap<String, Object>();
for (ReferenceInfo refInfo : referenceInfoList) {
Object object =refInfo.getObject();
if (object instanceof TableResourceData) {
TableResourceData item = (TableResourceData) object;
if (!errorSet.contains(item.getName())) {
if (processedSet.contains(item.getName())) {
processedSet.remove(item.getName());
errorSet.add(item.getName());
processedObjects.remove(item.getName());
} else {
processedSet.add(item.getName());
processedObjects.put(item.getName(), refInfo);
}
}
}
}
// ��ΪcreateProposal()�ò���element��������ʾԪ�صĹ��˱���������ʹ����
List<Object> inputItems = new ArrayList<Object>();
for (Object inputItem : processedObjects.values().toArray()) {
if (filter(inputItem, element))
inputItems.add(inputItem);
}
setInput(inputItems.toArray());
}
}
}