/** * <p>Copyright: Copyright (c) 2013</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.cres.text.assistant; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.contentassist.CompletionProposal; import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.contentassist.IContentAssistProcessor; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.text.contentassist.IContextInformationValidator; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.ui.editor.text.TextUtil; /** * @author wangxh * ������ʾ�� */ public class TextAssistant implements IContentAssistProcessor{ //����������ʾ������� private List<IAssistantLoader> loaders = new ArrayList<IAssistantLoader>(); IARESResource resource; public TextAssistant(IARESResource resource) { this.resource = resource; createAssistantLoader(); } @Override public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) { IDocument document = viewer.getDocument(); String prefix = TextUtil.getGeneralPrefix(document, offset); IRegion pre_Region = TextUtil.getGeneralPrefixRegion(document, offset); if (prefix == null || pre_Region == null) return null; List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>(); Map<String, IAssistantLoader> map = new HashMap<String, IAssistantLoader>(); List<String> assistList = new ArrayList<String>(); //����������ʾ�� for(IAssistantLoader loader : loaders){ for(String proposal :loader.loadAssitant(prefix,document,offset)){ map.put(proposal, loader); assistList.add(proposal); } } //���� Collections.sort(assistList, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareToIgnoreCase(o2); } }); // ����������� List<String> allproposals = TextUtil.filter(assistList, prefix); for (String proposal : allproposals) { IAssistantLoader loader = map.get(proposal); String replacement = loader.getReplacement(proposal); String desc = loader.getDescription(proposal); proposals.add(new CompletionProposal(replacement, pre_Region .getOffset(), prefix.length(), replacement.length(), null, proposal, null, desc)); } return proposals.toArray(new ICompletionProposal[proposals.size()]); } @Override public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) { return null; } @Override public char[] getCompletionProposalAutoActivationCharacters() { return new char[]{'@','[','>'}; } @Override public char[] getContextInformationAutoActivationCharacters() { return null; } @Override public String getErrorMessage() { return null; } @Override public IContextInformationValidator getContextInformationValidator() { return null; } /** * ��ʼ��������ʾ������ */ protected void createAssistantLoader() { } public List<IAssistantLoader> getLoaders() { return loaders; } public IARESResource getResource() { return resource; } }