/**
* Դ�������ƣ�MetadataContentProposalProvider.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui
* ����˵����Ԫ�����û��༭��UIչ����ع���
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.metadata.ui.editors.editingsupport;
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.metadata.MetadataItem;
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;
/**
* ��ʾԪ�������õ�ʱ��ʹ�õ�ProposalContentProvider
* @author sundl
*/
public class MetadataContentProposalProvider extends JresResourceRefConentProposalPovider {
public MetadataContentProposalProvider(IContentProposalProviderHelper helper, String resType, IARESProject project) {
super(helper, resType, project);
}
@Override
protected boolean filter(Object inputItem, Object element) {
if (inputItem instanceof Map && element instanceof MetadataItem) {
@SuppressWarnings("rawtypes")
Map map = (Map) inputItem;
IARESResource res = (IARESResource) map.get(IResourceTable.TARGET_RESOURCE);
MetadataItem item = (MetadataItem) map.get(IResourceTable.TARGET_OWNER);
MetadataItem elementItem = (MetadataItem) element;
if (res.getARESProject().equals(project) && item.getName().equals(elementItem.getName())
&& item.getParent().getFullyQualifiedName().equals(elementItem.getParent().getFullyQualifiedName())) { //ͬ��Դ����Ҫ����
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 MetadataItem) {
MetadataItem item = (MetadataItem) 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());
}
if(helper instanceof MetadataContentProposalHelper){
((MetadataContentProposalHelper)helper).initDuplicateList(input);
}
}
}