KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > person > search > StaticPersonSearchFilterProvider


1 /*
2  * Created on Dec 15, 2004
3  * by alex
4  *
5  */

6 package com.nightlabs.ipanema.person.search;
7
8 import javax.security.auth.login.LoginException JavaDoc;
9
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.events.SelectionEvent;
12 import org.eclipse.swt.events.SelectionListener;
13 import org.eclipse.swt.widgets.Composite;
14
15 import com.nightlabs.ipanema.base.login.Login;
16 import com.nightlabs.ipanema.person.PersonStruct;
17 import com.nightlabs.ipanema.person.id.PersonStructFieldID;
18 import com.nightlabs.ipanema.person.util.PersonSearchFilter;
19 import com.nightlabs.ipanema.person.util.TextPersonSearchFilterItem;
20 import com.nightlabs.jdo.search.SearchFilter;
21 import com.nightlabs.jdo.search.SearchFilterItem;
22 import com.nightlabs.jdo.search.SearchFilterProvider;
23 import com.nightlabs.jdo.search.SearchResultFetcher;
24
25 /**
26  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
27  */

28 public class StaticPersonSearchFilterProvider implements
29         SearchFilterProvider {
30
31     private StaticPersonSearchFilterProviderComposite criteriaBuilderComposite;
32     private SearchResultFetcher resultFetcher;
33     
34     private SelectionListener searchListener = new SelectionListener() {
35         public void widgetSelected(SelectionEvent e) {
36             if (resultFetcher != null) {
37                 try {
38                     resultFetcher.searchTriggered(StaticPersonSearchFilterProvider.this, Login.getLogin());
39                 } catch (LoginException JavaDoc le) {
40                     throw new RuntimeException JavaDoc(le);
41                 }
42             }
43         }
44         public void widgetDefaultSelected(SelectionEvent e) {
45         }
46     };
47     
48     /**
49      * Create a new static person SearchFilterProvider.
50      *
51      * @param resultFetcher A ResultFetcher to be triggered on search.
52      */

53     public StaticPersonSearchFilterProvider(SearchResultFetcher resultFetcher) {
54         this.resultFetcher = resultFetcher;
55     }
56     
57     /**
58      * @see com.nightlabs.jdo.search.SearchFilterProvider#getComposite(org.eclipse.swt.widgets.Composite)
59      */

60     public Composite createComposite(Composite parent) {
61         if (criteriaBuilderComposite == null) {
62             criteriaBuilderComposite = new StaticPersonSearchFilterProviderComposite(parent,SWT.NONE);
63             criteriaBuilderComposite.getSearchButton().addSelectionListener(searchListener);
64         }
65         return criteriaBuilderComposite;
66     }
67     
68     public Composite getComposite() {
69         return criteriaBuilderComposite;
70     }
71
72     /**
73      * @see com.nightlabs.jdo.search.SearchFilterProvider#getPersonSearchFilter()
74      */

75     public SearchFilter getSearchFilter() {
76         return buildPersonSearchFilter();
77     }
78     
79     public static class ParsedNameCriteria {
80         public String JavaDoc company;
81         public String JavaDoc name;
82         public String JavaDoc firstName;
83         public long personID = -1;
84         public String JavaDoc completeString;
85     }
86     
87     public static ParsedNameCriteria parseNameNeedle(String JavaDoc needle) {
88 // String text = criteriaBuilderComposite.getControlName().getTextControl().getText();
89
// sTok will return Delims
90
ParsedNameCriteria result = new ParsedNameCriteria();
91         String JavaDoc[] toks = needle.split("[:;,. ]+");
92         result.completeString = needle;
93         for (int i = 0; i < toks.length; i++) {
94             try {
95                 long tmpLong = Long.parseLong(toks[i]);
96                 result.personID = tmpLong;
97                 result.completeString.replace(toks[i], "");
98             } catch (NumberFormatException JavaDoc e) {}
99         }
100         switch (toks.length) {
101             case 3:
102                 result.company = toks[0];
103                 result.name = toks[1];
104                 result.firstName = toks[2];
105                 break;
106             case 2:
107                 result.company = "";
108                 result.name = toks[0];
109                 result.firstName = toks[1];
110                 break;
111             case 1:
112                 if (needle.indexOf(":") > 0 || needle.indexOf(";") > 0) {
113                     result.company = toks[0];
114                     result.name = "";
115                 }
116                 else {
117                     result.company = "";
118                     result.name = toks[0];
119                 }
120                 result.firstName = "";
121                 break;
122             default:
123                 if (toks.length != 0) {
124                     // TODO: think about this
125
result.company = toks[0];
126                     result.name = toks[1];
127                     result.firstName = toks[toks.length-1];
128                 }
129                 break;
130         }
131         return result;
132     }
133     
134     protected PersonSearchFilter createPersonSearchFilter() {
135         return new PersonSearchFilter();
136     }
137     
138     public void setQuickSearchText(ParsedNameCriteria nameCriteria) {
139         criteriaBuilderComposite.getControlName().getTextControl().setText(nameCriteria.completeString);
140         // TODO: add personID criteria
141
}
142     
143     protected PersonSearchFilter buildPersonSearchFilter() {
144         // new filter
145
PersonSearchFilter filter = createPersonSearchFilter();
146         
147         ParsedNameCriteria nameCriteria = parseNameNeedle(criteriaBuilderComposite.getControlName().getTextControl().getText());
148         
149         PersonStructFieldID[] nameCriteriaFieldIDs = new PersonStructFieldID[] {
150             PersonStruct.PERSONALDATA_COMPANY,
151             PersonStruct.PERSONALDATA_NAME,
152             PersonStruct.PERSONALDATA_FIRSTNAME
153         };
154         
155         if (nameCriteria.company != null || !"".equals(nameCriteria.company))
156             filter.addSearchFilterItem(new TextPersonSearchFilterItem(nameCriteriaFieldIDs, SearchFilterItem.MATCHTYPE_CONTAINS, nameCriteria.company));
157         if (nameCriteria.name != null || !"".equals(nameCriteria.name))
158             filter.addSearchFilterItem(new TextPersonSearchFilterItem(nameCriteriaFieldIDs, SearchFilterItem.MATCHTYPE_CONTAINS, nameCriteria.name));
159         if (nameCriteria.firstName != null || !"".equals(nameCriteria.firstName))
160             filter.addSearchFilterItem(new TextPersonSearchFilterItem(nameCriteriaFieldIDs, SearchFilterItem.MATCHTYPE_CONTAINS, nameCriteria.firstName));
161         
162         // add items if neccessary
163
// if (!criteriaBuilderComposite.getControlName().getTextControl().getText().equals("")) {
164
//// TextPersonSearchFilterItem nameSearchFilterItem = new TextPersonSearchFilterItem();
165
// filter.addSearchFilterItem(new TextPersonSearchFilterItem(PersonStruct.PERSONALDATA_NAME,SearchFilterItem.MATCHTYPE_CONTAINS,criteriaBuilderComposite.getControlName().getTextControl().getText()));
166
// }
167
// if (!criteriaBuilderComposite.getControlCompany().getTextControl().getText().equals(""))
168
// filter.addSearchFilterItem(new TextPersonSearchFilterItem(PersonStruct.PERSONALDATA_COMPANY,SearchFilterItem.MATCHTYPE_CONTAINS,criteriaBuilderComposite.getControlCompany().getTextControl().getText()));
169
if (!criteriaBuilderComposite.getControlAddress().getTextControl().getText().equals(""))
170             filter.addSearchFilterItem(new TextPersonSearchFilterItem(PersonStruct.POSTADDRESS_ADDRESS,SearchFilterItem.MATCHTYPE_CONTAINS,criteriaBuilderComposite.getControlAddress().getTextControl().getText()));
171         if (!criteriaBuilderComposite.getControlCity().getTextControl().getText().equals(""))
172             filter.addSearchFilterItem(new TextPersonSearchFilterItem(PersonStruct.POSTADDRESS_CITY,SearchFilterItem.MATCHTYPE_CONTAINS,criteriaBuilderComposite.getControlCity().getTextControl().getText()));
173         if (!criteriaBuilderComposite.getControlPostCode().getTextControl().getText().equals(""))
174             filter.addSearchFilterItem(new TextPersonSearchFilterItem(PersonStruct.POSTADDRESS_POSTCODE,SearchFilterItem.MATCHTYPE_CONTAINS,criteriaBuilderComposite.getControlPostCode().getTextControl().getText()));
175 // if (!criteriaBuilderComposite.getControlPhonePre().getTextControl().getText().equals(""))
176
// filter.addSearchFilterItem(new TextPersonSearchFilterItem(PersonStruct.PHONE_AREACODE,SearchFilterItem.MATCHTYPE_CONTAINS,criteriaBuilderComposite.getControlPhonePre().getTextControl().getText()));
177
if (!criteriaBuilderComposite.getControlPhone().getTextControl().getText().equals(""))
178             filter.addSearchFilterItem(new TextPersonSearchFilterItem(PersonStruct.PHONE_LOCALNUMBER,SearchFilterItem.MATCHTYPE_CONTAINS,criteriaBuilderComposite.getControlPhone().getTextControl().getText()));
179         
180         return filter;
181     }
182     
183 }
184
Popular Tags