package com.idega.user.block.search.presentation; import java.rmi.RemoteException; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import com.idega.business.IBOLookup; import com.idega.event.IWActionListener; import com.idega.event.IWStateMachine; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWConstants; import com.idega.idegaweb.IWResourceBundle; import com.idega.idegaweb.help.presentation.Help; import com.idega.idegaweb.presentation.StyledIWAdminWindow; import com.idega.presentation.IWContext; import com.idega.presentation.Image; import com.idega.presentation.Table; import com.idega.presentation.text.Text; import com.idega.presentation.ui.CloseButton; import com.idega.presentation.ui.DropdownMenu; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SelectionBox; import com.idega.presentation.ui.StyledButton; import com.idega.presentation.ui.SubmitButton; import com.idega.presentation.ui.TextInput; import com.idega.user.app.ToolbarElement; import com.idega.user.app.UserApplicationMainArea; import com.idega.user.app.UserApplicationMainAreaPS; import com.idega.user.block.search.event.UserSearchEvent; import com.idega.user.business.GroupBusiness; import com.idega.user.business.GroupComparator; import com.idega.user.business.UserBusiness; import com.idega.user.data.CachedGroup; import com.idega.user.data.Group; import com.idega.user.presentation.UserStatusDropdown; /** * <p>Title: idegaWeb User</p> * <p>Description: The standard advances search window of the IW User system</p> * <p>Copyright: Idega Software Copyright (c) 2002</p> * <p>Company: Idega Software</p> * @author <a href="eiki@idega.is">Eirikur Hrafnsson</a> * @version 1.0 */ public class SearchWindow extends StyledIWAdminWindow implements ToolbarElement { //changed from extends IWAdminWindow - birna private UserBusiness userBiz; private GroupBusiness groupBiz; private static final String IW_BUNDLE_IDENTIFIER = "com.idega.user"; private static final String HELP_TEXT_KEY = "search_window"; private UserSearchEvent searchEvent; private String userApplicationMainAreaPSId = null; private Group selectedGroup = null; private String mainTableStyle = "main"; public SearchWindow() { setWidth(500); setHeight(370); setScrollbar(false); setResizable(true); } public void initializeInMain(IWContext iwc) { this.userApplicationMainAreaPSId = iwc.getParameter(UserApplicationMainArea.USER_APPLICATION_MAIN_AREA_PS_KEY); // add action listener IWStateMachine stateMachine; try { stateMachine = (IWStateMachine) IBOLookup.getSessionInstance(iwc, IWStateMachine.class); if (this.userApplicationMainAreaPSId != null) { addActionListener( (IWActionListener)stateMachine.getStateFor(this.userApplicationMainAreaPSId, UserApplicationMainAreaPS.class)); } } catch (RemoteException e) { e.printStackTrace(); } } public void main(IWContext iwc) throws Exception { //this.debugParameters(iwc); IWResourceBundle iwrb = getResourceBundle(iwc); this.searchEvent = new UserSearchEvent(); this.searchEvent.setSource(this); setTitle(iwrb.getLocalizedString("advanced_searchwindow.title", "Advanced search")); addTitle(iwrb.getLocalizedString("advanced_searchwindow.title", "Advanced search"), TITLE_STYLECLASS); setName(iwrb.getLocalizedString("advanced_searchwindow.title", "Advanced search")); Form form = new Form(); form.addEventModel(this.searchEvent, iwc); add(form,iwc); Table mainTable = new Table(1, 3); mainTable.setWidth(Table.HUNDRED_PERCENT); mainTable.setCellpadding(0); mainTable.setCellspacing(0); mainTable.setHeight(2, 5); form.add(mainTable); Table tab = new Table(3, 6); tab.setColumns(3); tab.setStyleClass(this.mainTableStyle); tab.setWidth(Table.HUNDRED_PERCENT); tab.setBorder(0); tab.setColumnVerticalAlignment(1, Table.VERTICAL_ALIGN_TOP); tab.setColumnVerticalAlignment(2, Table.VERTICAL_ALIGN_TOP); tab.setCellspacing(5); int column = 1; int row = 1; //names params //first name TextInput firstName = new TextInput(UserSearchEvent.SEARCH_FIELD_FIRST_NAME); Text firstNameText = new Text(iwrb.getLocalizedString("user.search.window.user_first_name", "First name")); tab.add(firstNameText, column, row); tab.add(Text.getBreak(), column, row); tab.add(firstName, column++, row); //middle name TextInput middleName = new TextInput(UserSearchEvent.SEARCH_FIELD_MIDDLE_NAME); Text middleNameText = new Text(iwrb.getLocalizedString("user.search.window.user_middle_name", "Middle name")); tab.add(middleNameText, column, row); tab.add(Text.getBreak(), column, row); tab.add(middleName, column++, row); //middle name TextInput lastName = new TextInput(UserSearchEvent.SEARCH_FIELD_LAST_NAME); Text lastNameText = new Text(iwrb.getLocalizedString("user.search.window.user_last_name", "Last name")); tab.add(lastNameText, column, row); tab.add(Text.getBreak(), column, row); tab.add(lastName, column++, row++); //group selectionbox SelectionBox groupSel = new SelectionBox(UserSearchEvent.SEARCH_FIELD_GROUPS); groupSel.setHeight(15); groupSel.setWidth(Table.HUNDRED_PERCENT); List groupsCol = (List)getUserBusiness(iwc).getAllGroupsWithViewPermission(iwc.getCurrentUser(),iwc); GroupComparator groupComparator = new GroupComparator(iwc); groupComparator.setSortByParents(true); groupComparator.setGroupBusiness(this.getGroupBusiness(iwc)); Collections.sort(groupsCol, groupComparator); Iterator nodes = groupsCol.iterator(); // Map cachedParents = new HashMap(); // No dublicates so this doesn't do anything // Map cachedGroups = new HashMap(); for(int i = 0;nodes.hasNext();i++) { Group group = (Group) nodes.next(); CachedGroup cachedGroup = new CachedGroup(group); try { groupSel.addMenuElement( ((Integer)group.getPrimaryKey()).intValue(), groupComparator.getIndentedGroupName(cachedGroup));//getGroupBusiness(iwc).getNameOfGroupWithParentName(group));//,cachedParents,cachedGroups) ); //getchildren } catch (NullPointerException e) { System.out.println("[SearchWindow]: null in group list index "+ i); e.printStackTrace(); } } column = 1; Text groups = new Text(iwrb.getLocalizedString("user.search.window.groups", "Groups")); tab.mergeCells(column, row, column+1, tab.getRows()); tab.add(groups, column, row); tab.add(Text.getBreak(), column, row); tab.add(groupSel, column, row); // personal id column = 3; TextInput ssn = new TextInput(UserSearchEvent.SEARCH_FIELD_PERSONAL_ID); Text ssnText = new Text(iwrb.getLocalizedString("user.search.window.personal_id", "SSN")); tab.add(ssnText, column, row); tab.add(Text.getBreak(), column, row); tab.add(ssn, column, row++); // streetname search TextInput address = new TextInput(UserSearchEvent.SEARCH_FIELD_ADDRESS); Text addressText = new Text(iwrb.getLocalizedString("user.search.window.address", "Address")); tab.add(addressText, column, row); tab.add(Text.getBreak(), column, row); tab.add(address, column, row++); // user status dropdown DropdownMenu statusMenu = new UserStatusDropdown(UserSearchEvent.SEARCH_FIELD_STATUS_ID); statusMenu.setStyleAttribute(IWConstants.BUILDER_FONT_STYLE_INTERFACE); statusMenu.addMenuElement(-1,iwrb.getLocalizedString("user.search.window.all_statuses", "All statuses")); statusMenu.setSelectedElement(-1); Text status = new Text(iwrb.getLocalizedString("user.search.window.status", "Status")); tab.add(status, column, row); tab.add(Text.getBreak(), column, row); tab.add(statusMenu, column, row++); //age TextInput ageFloor = new TextInput(UserSearchEvent.SEARCH_FIELD_AGE_FLOOR,"0"); ageFloor.setLength(3); ageFloor.setStyleAttribute(IWConstants.BUILDER_FONT_STYLE_INTERFACE); TextInput ageCeil = new TextInput(UserSearchEvent.SEARCH_FIELD_AGE_CEILING,"120"); ageCeil.setLength(3); ageCeil.setStyleAttribute(IWConstants.BUILDER_FONT_STYLE_INTERFACE); Text ages = new Text(iwrb.getLocalizedString("user.search.window.ages", "Age")); tab.add(ages, column, row); tab.add(Text.getBreak(), column, row); tab.add(ageFloor, column, row); tab.add(" - ", column, row); tab.add(ageCeil, column, row++); //gender Integer maleId = getUserBusiness(iwc).getGenderId("male"); Integer femaleId = getUserBusiness(iwc).getGenderId("female"); DropdownMenu genders = new DropdownMenu(UserSearchEvent.SEARCH_FIELD_GENDER_ID); genders.addMenuElement(femaleId.intValue(),iwrb.getLocalizedString("user.search.window.females", "Women")); genders.addMenuElement(maleId.intValue(),iwrb.getLocalizedString("user.search.window.males", "Men")); genders.addMenuElement(-1,iwrb.getLocalizedString("user.search.window.both.genders", "Both genders")); genders.setSelectedElement(-1); Text gender = new Text(iwrb.getLocalizedString("user.search.window.gender", "Gender")); tab.add(gender, column, row); tab.add(Text.getBreak(), column, row); tab.add(genders, column, row++); //buttons Help help = getHelp(HELP_TEXT_KEY); StyledButton save = new StyledButton(new SubmitButton(iwrb.getLocalizedString("user.search.window.search", "Search"))); StyledButton close = new StyledButton(new CloseButton(iwrb.getLocalizedString("user.search.window.close", "Close"))); HiddenInput type = new HiddenInput(UserSearchEvent.SEARCH_FIELD_SEARCH_TYPE, Integer.toString(UserSearchEvent.SEARCHTYPE_ADVANCED)); Table bottomTable = new Table(); bottomTable.setCellpadding(0); bottomTable.setCellspacing(5); bottomTable.setWidth(Table.HUNDRED_PERCENT); bottomTable.setStyleClass(this.mainTableStyle); bottomTable.setAlignment(2, 1, Table.HORIZONTAL_ALIGN_RIGHT); bottomTable.add(help,1,1); Table buttonTable = new Table(); buttonTable.setCellpadding(0); buttonTable.setCellspacing(0); buttonTable.setWidth(2, "5"); buttonTable.add(save, 1, 1); buttonTable.add(type, 2, 1); buttonTable.add(close, 3, 1); bottomTable.add(buttonTable,2,1); mainTable.setVerticalAlignment(1,1,Table.VERTICAL_ALIGN_TOP); mainTable.setVerticalAlignment(1,3,Table.VERTICAL_ALIGN_TOP); mainTable.add(tab,1,1); mainTable.add(bottomTable,1,3); } public Image getButtonImage(IWContext iwc) { IWBundle bundle = this.getBundle(iwc); return bundle.getImage("create_group.gif", "Create group"); } public String getBundleIdentifier() { return IW_BUNDLE_IDENTIFIER; } public String getName(IWContext iwc) { IWResourceBundle rBundle = this.getBundle(iwc).getResourceBundle(iwc); return rBundle.getLocalizedString("searchwindow.name", "Search"); } public Class getPresentationObjectClass(IWContext iwc) { return this.getClass(); } public boolean isValid(IWContext iwc) { return true; } public Map getParameterMap(IWContext iwc) { return null; } public int getPriority(IWContext iwc) { return -1; } public GroupBusiness getGroupBusiness(IWContext iwc) { if(this.groupBiz==null){ try { this.groupBiz = (GroupBusiness) IBOLookup.getServiceInstance(iwc,GroupBusiness.class); } catch (RemoteException e) { e.printStackTrace(); } } return this.groupBiz; } public UserBusiness getUserBusiness(IWContext iwc) { if(this.userBiz==null){ try { this.userBiz = (UserBusiness) IBOLookup.getServiceInstance(iwc,UserBusiness.class); } catch (RemoteException e) { e.printStackTrace(); } } return this.userBiz; } /* (non-Javadoc) * @see com.idega.user.app.ToolbarElement#isButton(com.idega.presentation.IWContext) */ public boolean isButton(IWContext iwc) { return false; } }