/** * Copyright 2010 the original author or authors. * * This file is part of Zksample2. http://zksample2.sourceforge.net/ * * Zksample2 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Zksample2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Zksample2. If not, see <http://www.gnu.org/licenses/gpl.html>. */ package de.forsthaus.webui.security.groupright; import java.io.Serializable; import java.util.Map; import org.apache.log4j.Logger; import org.springframework.dao.DataAccessException; import org.zkoss.zk.ui.event.Event; import org.zkoss.zul.Bandbox; import org.zkoss.zul.Button; import org.zkoss.zul.Checkbox; import org.zkoss.zul.FieldComparator; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listheader; import org.zkoss.zul.Listitem; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Paging; import org.zkoss.zul.Textbox; import org.zkoss.zul.Window; import com.trg.search.Filter; import de.forsthaus.backend.model.SecGroup; import de.forsthaus.backend.model.SecGroupright; import de.forsthaus.backend.model.SecRight; import de.forsthaus.backend.service.SecurityService; import de.forsthaus.backend.util.HibernateSearchObject; import de.forsthaus.webui.security.right.model.SecRightListModelItemRenderer; import de.forsthaus.webui.util.ButtonStatusCtrl; import de.forsthaus.webui.util.GFCBaseCtrl; import de.forsthaus.webui.util.ZksampleMessageUtils; import de.forsthaus.webui.util.pagging.PagedListWrapper; /** * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br> * This is the controller class for the * /WEB-INF/pages/sec_groupright/addGrouprightDialog.zul file.<br> * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br> * * @changes 05/15/2009: sge Migrating the list models for paging. <br> * 07/24/2009: sge changes for clustering.<br> * 10/12/2009: sge changings in the saving routine.<br> * 11/07/2009: bbr changed to extending from GFCBaseCtrl<br> * (GenericForwardComposer) for spring-managed creation.<br> * * @author bbruhns * @author sgerth */ public class AddGrouprightDialogCtrl extends GFCBaseCtrl implements Serializable { private static final long serialVersionUID = 2146221197789582858L; private static final Logger logger = Logger.getLogger(AddGrouprightDialogCtrl.class); private transient PagedListWrapper<SecRight> plwSecRights; /* * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * All the components that are defined here and have a corresponding * component with the same 'id' in the zul-file are getting autowired by our * 'extends GFCBaseCtrl' GenericForwardComposer. * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ protected Window addGrouprightDialogWindow; // autowired protected Textbox textbox_AddGroupRightDialog_GroupName; // autowired protected Textbox textbox_AddGroupRightDialog_RightName; // autowired // Bandbox search/select right protected Bandbox bandbox_AddGroupRightDialog_SearchRight; // autowired protected Textbox textbox_bboxAddGroupRightDialog_rightName; // autowired protected Checkbox checkbox_bbox_AddGroupRightDialog_All; // autowired protected Checkbox checkbox_bbox_AddGroupRightDialog_Pages; // autowired protected Checkbox checkbox_bbox_AddGroupRightDialog_Tabs; // autowired protected Checkbox checkbox_bbox_AddGroupRightDialog_MenuCat; // autowired protected Checkbox checkbox_bbox_AddGroupRightDialog_MenuItems; // autowired protected Checkbox checkbox_bbox_AddGroupRightDialog_Methods; // autowired protected Checkbox checkbox_bbox_AddGroupRightDialog_Domain; // autowired protected Checkbox checkbox_bbox_AddGroupRightDialog_Components; // autowired // Listbox bandbox Search protected Paging paging_ListBoxSingleRightSearch; // autowired protected Listbox listBoxSingleRightSearch; // autowired protected Listheader listheader_bbox_AddGroupRightDialog_RightName; // autowired protected Listheader listheader_bbox_AddGroupRightDialog_RightType; // autowired // Button controller for the CRUD buttons private transient final String btnCtroller_ClassPrefix = "button_AddGrouprightDialog_"; private transient ButtonStatusCtrl btnCtrl; protected Button btnNew; // autowire protected Button btnEdit; // autowire protected Button btnDelete; // autowire protected Button btnSave; // autowire protected Button btnCancel; // autowire protected Button btnClose; // autowire // row count for listbox private int countRowsSecRight; // ServiceDAOs / Domain classes private transient SecGroup group; private transient SecRight right; private transient SecurityService securityService; /** * default constructor.<br> */ public AddGrouprightDialogCtrl() { super(); } /** * * @param event * @throws Exception */ public void onCreate$addGrouprightDialogWindow(Event event) throws Exception { // create the Button Controller. Disable not used buttons during working btnCtrl = new ButtonStatusCtrl(getUserWorkspace(), btnCtroller_ClassPrefix, true, btnNew, btnEdit, btnDelete, btnSave, btnCancel, btnClose); // get the params map that are overhanded by creation. Map<String, Object> args = getCreationArgsMap(event); if (args.containsKey("group")) { group = (SecGroup) args.get("group"); setGroup(this.group); } else { setGroup(null); } countRowsSecRight = 20; paging_ListBoxSingleRightSearch.setPageSize(this.countRowsSecRight); paging_ListBoxSingleRightSearch.setDetailed(true); // not used listheaders must be declared like -> // lh.setSortAscending(""); lh.setSortDescending("") listheader_bbox_AddGroupRightDialog_RightName.setSortAscending(new FieldComparator("rigName", true)); listheader_bbox_AddGroupRightDialog_RightName.setSortDescending(new FieldComparator("rigName", false)); listheader_bbox_AddGroupRightDialog_RightType.setSortAscending(new FieldComparator("rigType", true)); listheader_bbox_AddGroupRightDialog_RightType.setSortDescending(new FieldComparator("rigType", false)); // temporary, cause the security is not implemented for this controller btnEdit.setVisible(false); btnCancel.setVisible(false); btnDelete.setVisible(false); doShowDialog(getGroup()); } /** * Opens the Dialog window modal. * * @param aGroup * @throws InterruptedException */ public void doShowDialog(SecGroup aGroup) throws InterruptedException { try { textbox_AddGroupRightDialog_GroupName.setValue(aGroup.getGrpShortdescription()); textbox_AddGroupRightDialog_RightName.setValue(""); btnCtrl.setInitNew(); addGrouprightDialogWindow.doModal(); // open the dialog in // modal // mode } catch (final Exception e) { Messagebox.show(e.toString()); } } // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++ Components events +++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * If we close the dialog window. <br> * * @param event * @throws Exception */ public void onClose$addGrouprightDialogWindow(Event event) throws Exception { // logger.debug(event.toString()); doClose(); } /** * when the "save" button is clicked. <br> * * @param event * @throws InterruptedException */ public void onClick$btnSave(Event event) throws InterruptedException { // logger.debug(event.toString()); doSave(); } /** * when the "edit" button is clicked. <br> * * @param event */ public void onClick$btnEdit(Event event) { // logger.debug(event.toString()); doEdit(); } /** * Set the components for edit mode. <br> */ private void doEdit() { } /** * when the "help" button is clicked. <br> * * @param event * @throws InterruptedException */ public void onClick$btnHelp(Event event) throws InterruptedException { // logger.debug(event.toString()); ZksampleMessageUtils.doShowNotImplementedMessage(); } /** * when the "new" button is clicked. <br> * * @param event */ public void onClick$btnNew(Event event) { // logger.debug(event.toString()); doNew(); } /** * when the "close" button is clicked. <br> * * @param event */ public void onClick$btnClose(Event event) throws InterruptedException { // logger.debug(event.toString()); try { doClose(); } catch (final Exception e) { // close anyway addGrouprightDialogWindow.onClose(); // Messagebox.show(e.toString()); } } private void doClose() { addGrouprightDialogWindow.onClose(); } /** * Saves the components to table. <br> * * @throws InterruptedException */ private void doSave() throws InterruptedException { if (textbox_AddGroupRightDialog_GroupName.getValue().isEmpty()) { return; } else if (textbox_AddGroupRightDialog_RightName.getValue().isEmpty()) { return; } SecGroupright groupRight = getSecurityService().getNewSecGroupright(); groupRight.setSecGroup(getGroup()); groupRight.setSecRight(getRight()); /* check if already in table */ SecGroupright gr = getSecurityService().getGroupRightByGroupAndRight(getGroup(), getRight()); if (gr == null) { // save it to database try { getSecurityService().saveOrUpdate(groupRight); } catch (DataAccessException e) { ZksampleMessageUtils.showErrorMessage(e.getMostSpecificCause().toString()); btnCtrl.setBtnStatus_Save(); } } btnCtrl.setBtnStatus_Save(); } /** * Create a new SecGroupRight object. <br> */ private void doNew() { } // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++++++++++++++++++++++ Bandbox events +++++++++++++++++++++++ // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /** * when the bandpopup is opened. <br> * * @param event */ public void onOpen$bpop_AddGroupRightDialog_SearchRight(Event event) throws InterruptedException { checkbox_bbox_AddGroupRightDialog_All.setChecked(true); } /** * when the "search" button on the bandpopup is clicked. * * @param event */ public void onClick$button_bbox_AddGroupRightDialog_Search(Event event) throws InterruptedException { // logger.debug(event.toString()); doSearch(); } /** * when the "close" button on the bandpopup is clicked. * * @param event */ public void onClick$button_bbox_AddGroupRightDialog_Close(Event event) throws InterruptedException { // logger.debug(event.toString()); doCloseBandbox(); } private void doSearch() { filterTypeForShowingRights(); } public void onCheck$checkbox_bbox_AddGroupRightDialog_All(Event event) { // logger.debug(event.toString()); textbox_bboxAddGroupRightDialog_rightName.setValue(""); checkbox_bbox_AddGroupRightDialog_Pages.setChecked(false); checkbox_bbox_AddGroupRightDialog_Tabs.setChecked(false); checkbox_bbox_AddGroupRightDialog_MenuCat.setChecked(false); checkbox_bbox_AddGroupRightDialog_MenuItems.setChecked(false); checkbox_bbox_AddGroupRightDialog_Methods.setChecked(false); checkbox_bbox_AddGroupRightDialog_Domain.setChecked(false); checkbox_bbox_AddGroupRightDialog_Components.setChecked(false); } /** * when the checkBox 'Pages' for filtering is checked.<br> * Disables the 'all' checkBox. * * @param event */ public void onCheck$checkbox_bbox_AddGroupRightDialog_Pages(Event event) { checkbox_bbox_AddGroupRightDialog_All.setChecked(false); } /** * when the checkBox 'Tabs' for filtering is checked.<br> * Disables the 'all' checkBox. * * @param event */ public void onCheck$checkbox_bbox_AddGroupRightDialog_Tabs(Event event) { checkbox_bbox_AddGroupRightDialog_All.setChecked(false); } /** * when the checkBox 'Menu Categories' for filtering is checked.<br> * Disables the 'all' checkBox. * * @param event */ public void onCheck$checkbox_bbox_AddGroupRightDialog_MenuCat(Event event) { checkbox_bbox_AddGroupRightDialog_All.setChecked(false); } /** * when the checkBox 'Menu Items' for filtering is checked.<br> * Disables the 'all' checkBox. * * @param event */ public void onCheck$checkbox_bbox_AddGroupRightDialog_MenuItems(Event event) { checkbox_bbox_AddGroupRightDialog_All.setChecked(false); } /** * when the checkBox 'Methods' for filtering is checked.<br> * Disables the 'all' checkBox. * * @param event */ public void onCheck$checkbox_bbox_AddGroupRightDialog_Methods(Event event) { checkbox_bbox_AddGroupRightDialog_All.setChecked(false); } /** * when the checkBox 'Domain/Classes' for filtering is checked.<br> * Disables the 'all' checkBox. * * @param event */ public void onCheck$checkbox_bbox_AddGroupRightDialog_Domain(Event event) { checkbox_bbox_AddGroupRightDialog_All.setChecked(false); } /** * when the checkBox 'Components' for filtering is checked.<br> * Disables the 'all' checkBox. * * @param event */ public void onCheck$checkbox_bbox_AddGroupRightDialog_Components(Event event) { checkbox_bbox_AddGroupRightDialog_All.setChecked(false); } /** * Analyze which right type for filtering is checked <br> * to the DAO where with the values in the types-list <br> * the select statement is dynamically build.<br> */ private void filterTypeForShowingRights() { // ++ create the searchObject and init sorting ++// HibernateSearchObject<SecRight> soSecRight = new HibernateSearchObject<SecRight>(SecRight.class, countRowsSecRight); soSecRight.addSort("rigName", false); Filter f = Filter.or(); if (checkbox_bbox_AddGroupRightDialog_All.isChecked()) { // nothing todo } if (checkbox_bbox_AddGroupRightDialog_Pages.isChecked()) { f.add(Filter.equal("rigType", 0)); } if (checkbox_bbox_AddGroupRightDialog_Tabs.isChecked()) { f.add(Filter.equal("rigType", 5)); } if (checkbox_bbox_AddGroupRightDialog_MenuCat.isChecked()) { f.add(Filter.equal("rigType", 1)); } if (checkbox_bbox_AddGroupRightDialog_MenuItems.isChecked()) { f.add(Filter.equal("rigType", 2)); } if (checkbox_bbox_AddGroupRightDialog_Methods.isChecked()) { f.add(Filter.equal("rigType", 3)); } if (checkbox_bbox_AddGroupRightDialog_Domain.isChecked()) { f.add(Filter.equal("rigType", 4)); } if (checkbox_bbox_AddGroupRightDialog_Components.isChecked()) { f.add(Filter.equal("rigType", 6)); } if (textbox_bboxAddGroupRightDialog_rightName.getValue().isEmpty()) { soSecRight.addFilter(f); // Set the ListModel. getPlwSecRights().init(soSecRight, listBoxSingleRightSearch, paging_ListBoxSingleRightSearch); } else if (!textbox_bboxAddGroupRightDialog_rightName.getValue().isEmpty()) { soSecRight.addFilter(f); Filter f1 = Filter.and(); f1.add(Filter.ilike("rigName", "%" + textbox_bboxAddGroupRightDialog_rightName.getValue() + "%")); soSecRight.addFilter(f1); // Set the ListModel. getPlwSecRights().init(soSecRight, listBoxSingleRightSearch, paging_ListBoxSingleRightSearch); } listBoxSingleRightSearch.setItemRenderer(new SecRightListModelItemRenderer()); } /** * when doubleClicked on a item in the rights listBox. <br> * * @param event */ public void onDoubleClickedRightItem() { Listitem item = this.listBoxSingleRightSearch.getSelectedItem(); if (item != null) { SecRight right = (SecRight) item.getAttribute("data"); /* store the selected right */ setRight(right); textbox_AddGroupRightDialog_RightName.setValue(right.getRigName()); } doCloseBandbox(); } private void doCloseBandbox() { bandbox_AddGroupRightDialog_SearchRight.close(); } // +++++++++++++++++++++++++++++++++++++++++++++++++ // // ++++++++++++++++ Setter/Getter ++++++++++++++++++ // // +++++++++++++++++++++++++++++++++++++++++++++++++ // public void setGroup(SecGroup group) { this.group = group; } public SecGroup getGroup() { return this.group; } public void setRight(SecRight right) { this.right = right; } public SecRight getRight() { return this.right; } public SecurityService getSecurityService() { return this.securityService; } public void setSecurityService(SecurityService securityService) { this.securityService = securityService; } public void setPlwSecRights(PagedListWrapper<SecRight> plwSecRights) { this.plwSecRights = plwSecRights; } public PagedListWrapper<SecRight> getPlwSecRights() { return this.plwSecRights; } }