/**
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.cres.text.assistant;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.text.IDocument;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType;
import com.hundsun.ares.studio.jres.model.metadata.DictionaryItem;
import com.hundsun.ares.studio.jres.model.metadata.DictionaryType;
import com.hundsun.ares.studio.jres.model.metadata.StandardField;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
/**
* @author wangxh
* ��ʾ���ֶ�
*/
public class StdFieldAssistantLoader extends AbstractAssistantLoader {
private final static String PREFIX = "@";
private final static String SPLIT = " - ";
IARESResource resource;
public StdFieldAssistantLoader(IARESResource resource){
this.resource = resource;
}
@Override
public List<String> loadAssitant(String text,IDocument doc,int offset) {
List<String> allproposals = new ArrayList<String>();
if(text.startsWith(PREFIX)){
//��ʾ���еı��ֶ�
List<ReferenceInfo> refers = ReferenceManager.getInstance().getReferenceInfos(resource.getARESProject(), IMetadataRefType.StdField, true);
for(ReferenceInfo info : refers){
if(info != null){
Object obj = info.getObject();
if(obj instanceof StandardField){
StandardField field = (StandardField)obj;
allproposals.add(PREFIX + info.getRefName() + SPLIT + field.getChineseName());
}
}
}
}
return allproposals;
}
@Override
public String getReplacement(String display) {
int index = display.indexOf(SPLIT);
if(index > 0){
display = display.substring(0,index);
}
return display;
}
@Override
public String getDescription(String display) {
if(display.startsWith(PREFIX)){
display = display.substring(1);
}
ReferenceInfo info = ReferenceManager.getInstance().getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.StdField, getReplacement(display), true);
if(info == null){
return null;
}
Object obj = info.getObject();
if(obj instanceof StandardField){
StandardField field = (StandardField)obj;
return getStdDesc(field);
}
return null;
}
//���ֶ�˵����Ϣ�������ֵ���Ϣ+˵����
private String getStdDesc(StandardField field){
StringBuffer text = new StringBuffer();
String dictTypeStr = field.getDictionaryType();
if(StringUtils.isNotBlank(dictTypeStr)){
ReferenceInfo dictReferenceInfo = ReferenceManager.getInstance().getFirstReferenceInfo(resource.getARESProject(),IMetadataRefType.Dict,dictTypeStr,true);
if(dictReferenceInfo != null){
DictionaryType objDictionaryType = (DictionaryType) dictReferenceInfo.getObject();
if(objDictionaryType!=null){
for(DictionaryItem item : objDictionaryType.getItems()){
String value = StringUtils.defaultString(item.getValue());
String chineseName = StringUtils.defaultString(item.getChineseName());
text.append(objDictionaryType.getName());
text.append(":");
text.append(objDictionaryType.getChineseName());
text.append("-");
text.append(value);
text.append(":");
text.append(chineseName);
text.append("\r\n");
}
}
}
}
if(StringUtils.isNotBlank(text.toString()) && StringUtils.isNotBlank(field.getDescription())){
text.append("\r\n");
text.append(field.getDescription());
}
return StringUtils.defaultString(StringUtils.defaultIfBlank(text.toString(), field.getDescription())) ;
}
}