KickJava   Java API By Example, From Geeks To Geeks.

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


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.apache.log4j.Logger;
11 import org.eclipse.swt.SWT;
12 import org.eclipse.swt.events.SelectionEvent;
13 import org.eclipse.swt.layout.GridData;
14 import org.eclipse.swt.layout.GridLayout;
15 import org.eclipse.swt.widgets.Button;
16 import org.eclipse.swt.widgets.Composite;
17 import org.eclipse.swt.widgets.Label;
18
19 import com.nightlabs.ipanema.base.login.Login;
20 import com.nightlabs.ipanema.person.PersonManager;
21 import com.nightlabs.ipanema.person.util.PersonSearchFilter;
22 import com.nightlabs.jdo.search.SearchFilter;
23 import com.nightlabs.jdo.search.SearchFilterProvider;
24 import com.nightlabs.jdo.search.SearchResultFetcher;
25 import com.nightlabs.rcp.composite.SelectableComposite;
26 import com.nightlabs.rcp.composite.TightWrapperComposite;
27
28 /**
29  * Basic SearchFilterProvider for persons that provides one Button
30  * in its Composite and takes a SearchResultFetcher as parameter
31  * for the constructor. This SearchResultFetcher will be
32  * called when the user hits the button.
33  * {@link #getSearchFilter()} will return an instance of
34  * {@link com.nightlabs.ipanema.person.util.PersonSearchFilter}
35  *
36  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
37  */

38 public class PersonQuickSearch implements SearchFilterProvider {
39     private static final Logger LOGGER = Logger.getLogger(PersonQuickSearch.class);
40
41     
42     private TightWrapperComposite wrapperComposite;
43     private Button quickButton;
44     private String JavaDoc buttonText;
45     private PersonSearchFilter personSearchFilter;
46     private SearchResultFetcher resultFetcher;
47     
48     protected PersonManager personManager;
49     
50     /**
51      * Construct a PersonQuickSearch with buttonText as label for the Button,
52      * @param buttonText
53      */

54     public PersonQuickSearch(String JavaDoc buttonText) {
55         this.buttonText = buttonText;
56     }
57     
58     /**
59      * Construct a PersonQuickSearch with button-text and an optional (null possible)
60      * PersonSearchResultFetcher for callback on user interaction.
61      *
62      * @param buttonText
63      * @param resultFetcher
64      */

65     public PersonQuickSearch(String JavaDoc buttonText, SearchResultFetcher resultFetcher) {
66         this.buttonText = buttonText;
67         this.resultFetcher = resultFetcher;
68     }
69
70     /**
71      * Default implementation creates a wrapper Composite with a Button.
72      *
73      * @see com.nightlabs.jdo.search.SearchFilterProvider#createComposite(org.eclipse.swt.widgets.Composite)
74      */

75     public Composite createComposite(Composite parent) {
76         wrapperComposite = new TightWrapperComposite(parent,SWT.NONE,true);
77 // quickButton = new Button(wrapperComposite,SWT.TOGGLE);
78
// quickButton.setText(buttonText);
79
// GridData gd = new GridData(GridData.FILL_HORIZONTAL);
80
// gd.heightHint = 25;
81
// quickButton.setLayoutData(gd);
82
//
83
// quickButton.addSelectionListener(
84
// new SelectionListener() {
85
// public void widgetSelected(SelectionEvent evt) {
86
// quickSearchButtonPressed(evt);
87
// }
88
// public void widgetDefaultSelected(SelectionEvent evt) {
89
// quickSearchButtonPressed(evt);
90
// }
91
// }
92
// );
93
SelectableComposite comp = new SelectableComposite(wrapperComposite,SWT.BORDER);
94         GridLayout layout = new GridLayout();
95         layout.horizontalSpacing = 0;
96         layout.verticalSpacing = 0;
97         layout.marginHeight = 0;
98         layout.marginWidth = 0;
99         comp.setLayout(layout);
100         Label label = new Label(comp,SWT.NONE);
101         label.setText(buttonText);
102         GridData gd = new GridData(GridData.FILL_HORIZONTAL);
103         gd.heightHint = 15;
104         comp.setLayoutData(gd);
105         return wrapperComposite;
106     }
107     
108     public Composite getComposite() {
109         return wrapperComposite;
110     }
111
112     /**
113      * Returns and optionally recreates a the PersonSearchFilter.
114      *
115      * @param refresh
116      * @return
117      */

118     protected PersonSearchFilter getPersonSearchFilter(boolean refresh) {
119         if (refresh || (personSearchFilter == null)) {
120             personSearchFilter = new PersonSearchFilter();
121         }
122         return personSearchFilter;
123     }
124     
125     /**
126      * Calls the PersonSearchResultFetcher.
127      *
128      * @param evt
129      */

130     protected void quickSearchButtonPressed(SelectionEvent evt) {
131         if (resultFetcher == null)
132             return;
133         
134         Login login;
135         try {
136             login = Login.getLogin();
137         } catch (LoginException JavaDoc e) {
138             LOGGER.error("Could not log in, fetcher will not be triggered!",e);
139             return;
140         }
141         
142         resultFetcher.searchTriggered(this,login);
143     }
144     
145     /**
146      * Set the buttonText. Has no affect to the Button
147      * when {@link #getComposite(Composite)} was called before.
148      *
149      * @param txt
150      */

151     public void setButtonText(String JavaDoc txt) {
152         this.buttonText = txt;
153     }
154
155     /**
156      * Return the buttonText.
157      *
158      * @return
159      */

160     public String JavaDoc getButtonText() {
161         return buttonText;
162     }
163
164     /**
165      * Default implementation will always return a fresh and empty
166      * PersonSearchFilter.
167      *
168      * @see com.nightlabs.jdo.search.SearchFilterProvider#getSearchFilter()
169      */

170     public SearchFilter getSearchFilter() {
171         return getPersonSearchFilter(true);
172     }
173     
174
175 }
176
Popular Tags