1 6 package com.nightlabs.ipanema.person.search; 7 8 import java.util.Collection ; 9 10 import javax.jdo.FetchPlan; 11 import javax.security.auth.login.LoginException ; 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 36 public class PersonSearchDialog extends Dialog implements SearchResultFetcher{ 37 38 private static final Logger LOGGER = Logger.getLogger(PersonSearchDialog.class); 39 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 e) { 59 LOGGER.error("Error logging in ",e); 60 throw new RuntimeException (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 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 home = PersonManagerUtil.getHome(Login.getLogin().getInitialContextProperties()); 87 personManager = home.create(); 88 } catch (Exception e) { 89 LOGGER.error("Error creating PersonManagerUtil.",e); 90 throw new RuntimeException (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 persons = personManager.searchPerson(searchFilter, new String [] {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 e) { 109 LOGGER.error("Error searching person.",e); 110 throw new RuntimeException (e); 111 } 112 113 } 114 } 115 | Popular Tags |