KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > contact > search > ContactSearchProvider


1 package org.columba.contact.search;
2
3 import java.text.MessageFormat JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.ResourceBundle JavaDoc;
7 import java.util.Vector JavaDoc;
8
9 import javax.swing.ImageIcon JavaDoc;
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 JavaDoc CRITERIA_DISPLAYNAME_CONTAINS = "displayname_contains";
33
34     public static final String JavaDoc CRITERIA_EMAIL_CONTAINS = "email_contains";
35
36     private ResourceBundle JavaDoc 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 JavaDoc getTechnicalName() {
48         return "ContactSearchProvider";
49     }
50
51     public String JavaDoc getName() {
52         return bundle.getString("provider_title");
53     }
54
55     public String JavaDoc getDescription() {
56         return bundle.getString("provider_description");
57     }
58
59     public ImageIcon JavaDoc getIcon() {
60         return ImageLoader.getSmallIcon(IconKeys.ADDRESSBOOK);
61     }
62
63     public List JavaDoc<ISearchCriteria> getAllCriteria(String JavaDoc searchTerm) {
64
65         List JavaDoc<ISearchCriteria> list = new Vector JavaDoc<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 JavaDoc 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 JavaDoc technicalName, String JavaDoc searchTerm) {
86         String JavaDoc title = MessageFormat.format(bundle.getString(technicalName
87                 + "_title"), new Object JavaDoc[] { searchTerm });
88         String JavaDoc name = bundle.getString(technicalName + "_name");
89         String JavaDoc description = MessageFormat.format(bundle
90                 .getString(technicalName + "_description"),
91                 new Object JavaDoc[] { searchTerm });
92
93         return new SearchCriteria(technicalName, name, title, description);
94     }
95
96     public List JavaDoc<ISearchResult> query(String JavaDoc searchTerm,
97             String JavaDoc criteriaTechnicalName, boolean searchInside, int startIndex,
98             int resultCount) {
99         if (searchTerm == null)
100             throw new IllegalArgumentException JavaDoc("searchTerm == null");
101         if (criteriaTechnicalName == null)
102             throw new IllegalArgumentException JavaDoc("criteriaTechnicalName == null");
103
104         List JavaDoc<ISearchResult> result = new Vector JavaDoc<ISearchResult>();
105
106         // create list of contact folders
107
List JavaDoc<AddressbookFolder> v = SearchUtility.createContactFolderList();
108
109         virtualFolder = new VirtualFolder();
110         Iterator JavaDoc<AddressbookFolder> it = v.iterator();
111         while (it.hasNext()) {
112             AddressbookFolder f = it.next();
113             String JavaDoc 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                 // remember search result
131
virtualFolder.add(f, id);
132             }
133
134         }
135
136         totalResultCount = result.size();
137
138         return result;
139     }
140
141     public List JavaDoc<ISearchResult> query(List JavaDoc<ISearchRequest> list,
142             boolean matchAll, boolean searchInside, int startIndex,
143             int resultCount) {
144         Vector JavaDoc<ISearchResult> v = new Vector JavaDoc<ISearchResult>();
145         Iterator JavaDoc<ISearchRequest> it = list.listIterator();
146         while (it.hasNext()) {
147             ISearchRequest request = it.next();
148
149             List JavaDoc<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 JavaDoc searchTerm,
163             String JavaDoc searchCriteriaTechnicalName) {
164
165         // ensure that we are currently in the contact component
166
IFrameMediator newMediator = null;
167         try {
168             newMediator = FrameManager.getInstance().switchView(
169                     mediator.getContainer(), "Addressbook");
170         } catch (PluginLoadingFailedException e) {
171             e.printStackTrace();
172         }
173
174         // update folder selection
175
((AddressbookFrameMediator) newMediator).getTree().setSelectedFolder(
176                 virtualFolder);
177     }
178
179     public ICriteriaRenderer getCriteriaRenderer(String JavaDoc 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 JavaDoc searchTerm) {
196         return getCriteria(ContactSearchProvider.CRITERIA_EMAIL_CONTAINS,
197                 searchTerm);
198     }
199
200     public boolean hasSingleCriteriaSearchResult() {
201         // doesn't support search inside yet
202
return false;
203     }
204
205 }
206
Popular Tags