1 package org.columba.contact.search; 2 3 import java.text.MessageFormat ; 4 import java.util.Iterator ; 5 import java.util.List ; 6 import java.util.ResourceBundle ; 7 import java.util.Vector ; 8 9 import javax.swing.ImageIcon ; 10 11 import org.columba.addressbook.folder.AddressbookFolder; 12 import org.columba.addressbook.folder.virtual.VirtualFolder; 13 import org.columba.addressbook.gui.frame.AddressbookFrameMediator; 14 import org.columba.addressbook.gui.search.BasicResultPanel; 15 import org.columba.addressbook.gui.search.ComplexResultPanel; 16 import org.columba.addressbook.model.IContactModel; 17 import org.columba.api.gui.frame.IFrameMediator; 18 import org.columba.api.plugin.PluginLoadingFailedException; 19 import org.columba.core.gui.frame.FrameManager; 20 import org.columba.core.gui.search.StringCriteriaRenderer; 21 import org.columba.core.gui.search.api.ICriteriaRenderer; 22 import org.columba.core.gui.search.api.IResultPanel; 23 import org.columba.core.resourceloader.IconKeys; 24 import org.columba.core.resourceloader.ImageLoader; 25 import org.columba.core.search.SearchCriteria; 26 import org.columba.core.search.api.ISearchCriteria; 27 import org.columba.core.search.api.ISearchProvider; 28 import org.columba.core.search.api.ISearchRequest; 29 import org.columba.core.search.api.ISearchResult; 30 31 public class ContactSearchProvider implements ISearchProvider { 32 public static final String CRITERIA_DISPLAYNAME_CONTAINS = "displayname_contains"; 33 34 public static final String CRITERIA_EMAIL_CONTAINS = "email_contains"; 35 36 private ResourceBundle bundle; 37 38 private int totalResultCount = 0; 39 40 private VirtualFolder virtualFolder; 41 42 public ContactSearchProvider() { 43 bundle = ResourceBundle 44 .getBundle("org.columba.addressbook.i18n.search"); 45 } 46 47 public String getTechnicalName() { 48 return "ContactSearchProvider"; 49 } 50 51 public String getName() { 52 return bundle.getString("provider_title"); 53 } 54 55 public String getDescription() { 56 return bundle.getString("provider_description"); 57 } 58 59 public ImageIcon getIcon() { 60 return ImageLoader.getSmallIcon(IconKeys.ADDRESSBOOK); 61 } 62 63 public List <ISearchCriteria> getAllCriteria(String searchTerm) { 64 65 List <ISearchCriteria> list = new Vector <ISearchCriteria>(); 66 67 list.add(getCriteria(ContactSearchProvider.CRITERIA_EMAIL_CONTAINS, 68 searchTerm)); 69 list 70 .add(getCriteria( 71 ContactSearchProvider.CRITERIA_DISPLAYNAME_CONTAINS, 72 searchTerm)); 73 return list; 74 } 75 76 public IResultPanel getResultPanel(String searchCriteriaTechnicalName) { 77 return new BasicResultPanel(getTechnicalName(), 78 searchCriteriaTechnicalName); 79 } 80 81 public IResultPanel getComplexResultPanel() { 82 return new ComplexResultPanel(getTechnicalName()); 83 } 84 85 public ISearchCriteria getCriteria(String technicalName, String searchTerm) { 86 String title = MessageFormat.format(bundle.getString(technicalName 87 + "_title"), new Object [] { searchTerm }); 88 String name = bundle.getString(technicalName + "_name"); 89 String description = MessageFormat.format(bundle 90 .getString(technicalName + "_description"), 91 new Object [] { searchTerm }); 92 93 return new SearchCriteria(technicalName, name, title, description); 94 } 95 96 public List <ISearchResult> query(String searchTerm, 97 String criteriaTechnicalName, boolean searchInside, int startIndex, 98 int resultCount) { 99 if (searchTerm == null) 100 throw new IllegalArgumentException ("searchTerm == null"); 101 if (criteriaTechnicalName == null) 102 throw new IllegalArgumentException ("criteriaTechnicalName == null"); 103 104 List <ISearchResult> result = new Vector <ISearchResult>(); 105 106 List <AddressbookFolder> v = SearchUtility.createContactFolderList(); 108 109 virtualFolder = new VirtualFolder(); 110 Iterator <AddressbookFolder> it = v.iterator(); 111 while (it.hasNext()) { 112 AddressbookFolder f = it.next(); 113 String id = null; 114 115 if (criteriaTechnicalName 116 .equals(ContactSearchProvider.CRITERIA_DISPLAYNAME_CONTAINS)) { 117 id = f.findByName(searchTerm); 118 } else if (criteriaTechnicalName 119 .equals(ContactSearchProvider.CRITERIA_EMAIL_CONTAINS)) { 120 id = f.findByEmailAddress(searchTerm); 121 } 122 123 if (id != null) { 124 IContactModel model = f.get(id); 125 126 result.add(new ContactSearchResult(model.getSortString(), model 127 .getPreferredEmail(), SearchResultBuilder.createURI(f 128 .getId(), id), model)); 129 130 virtualFolder.add(f, id); 132 } 133 134 } 135 136 totalResultCount = result.size(); 137 138 return result; 139 } 140 141 public List <ISearchResult> query(List <ISearchRequest> list, 142 boolean matchAll, boolean searchInside, int startIndex, 143 int resultCount) { 144 Vector <ISearchResult> v = new Vector <ISearchResult>(); 145 Iterator <ISearchRequest> it = list.listIterator(); 146 while (it.hasNext()) { 147 ISearchRequest request = it.next(); 148 149 List <ISearchResult> result = query(request.getSearchTerm(), request 150 .getCriteria(), searchInside, startIndex, resultCount); 151 152 v.addAll(result); 153 } 154 155 return v; 156 } 157 158 public int getTotalResultCount() { 159 return totalResultCount; 160 } 161 162 public void showAllResults(IFrameMediator mediator, String searchTerm, 163 String searchCriteriaTechnicalName) { 164 165 IFrameMediator newMediator = null; 167 try { 168 newMediator = FrameManager.getInstance().switchView( 169 mediator.getContainer(), "Addressbook"); 170 } catch (PluginLoadingFailedException e) { 171 e.printStackTrace(); 172 } 173 174 ((AddressbookFrameMediator) newMediator).getTree().setSelectedFolder( 176 virtualFolder); 177 } 178 179 public ICriteriaRenderer getCriteriaRenderer(String criteriaTechnicalName) { 180 ICriteriaRenderer r = null; 181 if (criteriaTechnicalName 182 .equals(ContactSearchProvider.CRITERIA_DISPLAYNAME_CONTAINS)) { 183 r = new StringCriteriaRenderer(getCriteria( 184 ContactSearchProvider.CRITERIA_DISPLAYNAME_CONTAINS, ""), 185 this); 186 } else if (criteriaTechnicalName 187 .equals(ContactSearchProvider.CRITERIA_EMAIL_CONTAINS)) { 188 r = new StringCriteriaRenderer(getCriteria( 189 ContactSearchProvider.CRITERIA_EMAIL_CONTAINS, ""), this); 190 } 191 192 return r; 193 } 194 195 public ISearchCriteria getDefaultCriteria(String searchTerm) { 196 return getCriteria(ContactSearchProvider.CRITERIA_EMAIL_CONTAINS, 197 searchTerm); 198 } 199 200 public boolean hasSingleCriteriaSearchResult() { 201 return false; 203 } 204 205 } 206 | Popular Tags |