1 6 package com.nightlabs.ipanema.person.search; 7 8 import javax.security.auth.login.LoginException ; 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 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 le) { 40 throw new RuntimeException (le); 41 } 42 } 43 } 44 public void widgetDefaultSelected(SelectionEvent e) { 45 } 46 }; 47 48 53 public StaticPersonSearchFilterProvider(SearchResultFetcher resultFetcher) { 54 this.resultFetcher = resultFetcher; 55 } 56 57 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 75 public SearchFilter getSearchFilter() { 76 return buildPersonSearchFilter(); 77 } 78 79 public static class ParsedNameCriteria { 80 public String company; 81 public String name; 82 public String firstName; 83 public long personID = -1; 84 public String completeString; 85 } 86 87 public static ParsedNameCriteria parseNameNeedle(String needle) { 88 ParsedNameCriteria result = new ParsedNameCriteria(); 91 String [] 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 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 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 } 142 143 protected PersonSearchFilter buildPersonSearchFilter() { 144 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 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.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 |