KickJava   Java API By Example, From Geeks To Geeks.

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


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

6 package com.nightlabs.ipanema.person.search;
7
8 import java.util.Collection JavaDoc;
9
10 import javax.jdo.FetchPlan;
11 import javax.security.auth.login.LoginException JavaDoc;
12
13 import org.apache.log4j.Logger;
14 import org.eclipse.jface.dialogs.Dialog;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.layout.GridData;
17 import org.eclipse.swt.widgets.Composite;
18 import org.eclipse.swt.widgets.Control;
19 import org.eclipse.swt.widgets.Shell;
20
21 import com.nightlabs.ipanema.base.login.Login;
22 import com.nightlabs.ipanema.person.PersonManager;
23 import com.nightlabs.ipanema.person.PersonManagerHome;
24 import com.nightlabs.ipanema.person.PersonManagerUtil;
25 import com.nightlabs.ipanema.person.PersonStruct;
26 import com.nightlabs.ipanema.person.TextPersonDataField;
27 import com.nightlabs.ipanema.person.util.PersonSearchFilter;
28 import com.nightlabs.j2ee.InitialContextProvider;
29 import com.nightlabs.jdo.search.SearchFilterProvider;
30 import com.nightlabs.jdo.search.SearchResultFetcher;
31 import com.nightlabs.rcp.composite.TightWrapperComposite;
32
33 /**
34  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
35  */

36 public class PersonSearchDialog extends Dialog implements SearchResultFetcher{
37
38     private static final Logger LOGGER = Logger.getLogger(PersonSearchDialog.class);
39     /**
40      * @param parentShell
41      */

42     public PersonSearchDialog(Shell parentShell) {
43         super(parentShell);
44         setShellStyle(SWT.RESIZE);
45     }
46     
47     
48     private DynamicPersonSearchFilterProvider filterProvider;
49     private PersonSearchResultTable resultTable;
50
51     protected Control createDialogArea(Composite parent) {
52         
53         TightWrapperComposite wrapper = new TightWrapperComposite(parent,SWT.NONE,true);
54         
55         filterProvider = new DynamicPersonSearchFilterProvider(new PersonSearchFilterItemListMutator());
56         try {
57             filterProvider.setSearchResultFetcher(this,Login.getLogin());
58         } catch (LoginException JavaDoc e) {
59             LOGGER.error("Error logging in ",e);
60             throw new RuntimeException JavaDoc(e);
61         }
62         Composite providerComp = filterProvider.createComposite(wrapper);
63         GridData gd = new GridData(GridData.FILL_BOTH);
64         gd.widthHint = 550;
65         gd.heightHint = 200;
66         providerComp.setLayoutData(gd);
67         
68         resultTable = new PersonSearchResultTable(wrapper,SWT.NONE );
69         GridData tgd = new GridData(GridData.FILL_BOTH);
70         tgd.heightHint = 300;
71         resultTable.setLayoutData(tgd);
72         
73         return wrapper;
74     }
75
76     /**
77      * @see com.nightlabs.jdo.search.SearchResultFetcher#searchTriggered(com.nightlabs.jdo.search.SearchFilterProvider, com.nightlabs.j2ee.InitialContextProvider)
78      */

79     public void searchTriggered(SearchFilterProvider filterProvider, InitialContextProvider login) {
80         LOGGER.debug("Search triggered, getting PersonManager");
81     PersonManagerHome home = null;
82     PersonManager personManager = null;
83     try {
84         // TODO: find reason of IncompatibleClassChangeError when accessing login
85
// home = PersonManagerUtil.getHome(login.getInitialContextProperties());
86
home = PersonManagerUtil.getHome(Login.getLogin().getInitialContextProperties());
87       personManager = home.create();
88     } catch (Exception JavaDoc e) {
89         LOGGER.error("Error creating PersonManagerUtil.",e);
90         throw new RuntimeException JavaDoc(e);
91     }
92         LOGGER.debug("Have PersonManager searching");
93         
94         PersonSearchFilter searchFilter = (PersonSearchFilter)filterProvider.getSearchFilter();
95         searchFilter.clearResultFields();
96         searchFilter.addResultPersonStructFieldID(TextPersonDataField.class, PersonStruct.PERSONALDATA_COMPANY);
97         searchFilter.addResultPersonStructFieldID(TextPersonDataField.class, PersonStruct.PERSONALDATA_NAME);
98         searchFilter.addResultPersonStructFieldID(TextPersonDataField.class, PersonStruct.PERSONALDATA_FIRSTNAME);
99         searchFilter.addResultPersonStructFieldID(TextPersonDataField.class, PersonStruct.PHONE_LOCALNUMBER);
100         
101         try {
102             long start = System.currentTimeMillis();
103             Collection JavaDoc persons = personManager.searchPerson(searchFilter, new String JavaDoc[] {FetchPlan.ALL});
104             LOGGER.debug("Person search for "+persons.size()+" entries took "+(System.currentTimeMillis()-start)/1000+" s.");
105             start = System.currentTimeMillis();
106             resultTable.setInput(persons);
107             LOGGER.debug("Setting results to table for "+persons.size()+" entries took "+(System.currentTimeMillis()-start)/1000+" s.");
108         } catch (Exception JavaDoc e) {
109             LOGGER.error("Error searching person.",e);
110             throw new RuntimeException JavaDoc(e);
111         }
112         
113     }
114 }
115
Popular Tags