1 11 12 package org.eclipse.pde.internal.ui.editor.contentassist; 13 14 import java.util.ArrayList ; 15 import java.util.Arrays ; 16 import java.util.Collection ; 17 import java.util.Comparator ; 18 import java.util.ListIterator ; 19 20 import org.eclipse.core.resources.IProject; 21 import org.eclipse.jface.fieldassist.IContentProposal; 22 import org.eclipse.jface.fieldassist.IContentProposalProvider; 23 import org.eclipse.swt.graphics.Image; 24 25 29 public class TypeContentProposalProvider extends TypePackageCompletionProcessor 30 implements IContentProposalProvider { 31 32 public static final char F_DOT = '.'; 33 34 private IProject fProject; 35 36 private int fTypeScope; 37 38 private ArrayList fInitialContentProposals; 39 40 private String fInitialContent; 41 42 private Comparator fComparator; 43 44 47 public TypeContentProposalProvider(IProject project, int scope) { 48 fProject = project; 49 fTypeScope = scope; 50 fComparator = new TypeComparator(); 51 52 reset(); 53 } 54 55 59 private static class TypeComparator implements Comparator { 60 61 64 public TypeComparator() { 65 } 67 68 71 public int compare(Object arg0, Object arg1) { 72 String proposalSortKey1 = ((IContentProposal)arg0).getLabel(); 73 String proposalSortKey2 = ((IContentProposal)arg1).getLabel(); 74 return proposalSortKey1.compareToIgnoreCase(proposalSortKey2); 75 } 76 } 77 78 81 public IContentProposal[] getProposals(String contents, int position) { 82 ArrayList currentContentProposals = null; 84 if (position == 0) { 86 currentContentProposals = null; 91 } else if ( 92 (fInitialContentProposals == null) || 93 (contents.length() < fInitialContent.length()) || 94 (endsWithDot(contents))) { 95 currentContentProposals = generateContentProposals(contents); 104 } else { 105 currentContentProposals = filterContentProposals(contents); 110 } 111 112 return convertResultsToSortedProposals(currentContentProposals); 113 } 114 115 118 public void reset() { 119 fInitialContentProposals = null; 120 } 121 122 125 protected void addProposalToCollection(Collection collection, int startOffset, 126 int length, String label, String content, Image image) { 127 IContentProposal proposal = 130 new TypeContentProposal(label, content, null, image); 131 collection.add(proposal); 133 } 134 135 139 private boolean endsWithDot(String string) { 140 int index = string.lastIndexOf(F_DOT); 141 if ((index + 1) == string.length()) { 142 return true; 143 } 144 return false; 145 } 146 147 151 private ArrayList generateContentProposals(String currentContent) { 152 fInitialContentProposals = new ArrayList (); 153 fInitialContent = currentContent; 156 generateTypePackageProposals(currentContent, fProject, 157 fInitialContentProposals, 0, fTypeScope, true); 158 return fInitialContentProposals; 159 } 160 161 165 private IContentProposal[] convertResultsToSortedProposals(ArrayList list) { 166 IContentProposal[] proposals = null; 167 if ((list != null) && 168 (list.size() != 0)) { 169 proposals = (IContentProposal[]) list.toArray(new IContentProposal[list.size()]); 172 Arrays.sort(proposals, fComparator); 174 } else { 175 proposals = new IContentProposal[0]; 176 } 177 return proposals; 178 } 179 180 184 private ArrayList filterContentProposals(String currentContent) { 185 String lowerCaseCurrentContent = currentContent.toLowerCase(); 186 ListIterator iterator = fInitialContentProposals.listIterator(); 187 ArrayList filteredContentProposals = new ArrayList (); 189 while (iterator.hasNext()) { 191 Object object = iterator.next(); 192 IContentProposal proposal = (IContentProposal)object; 193 String compareString = null; 194 if (lowerCaseCurrentContent.indexOf(F_DOT) == -1) { 195 compareString = proposal.getLabel().toLowerCase(); 197 } else { 198 compareString = proposal.getContent().toLowerCase(); 200 } 201 if (compareString.startsWith(lowerCaseCurrentContent, 0)) { 205 filteredContentProposals.add(proposal); 206 } 207 } 208 return filteredContentProposals; 209 } 210 211 } 212 | Popular Tags |