package com.icesoft.williams.view.backing; import com.icesoft.williams.view.util.BeanNames; import com.icesoft.williams.view.util.FacesUtils; import com.icesoft.williams.view.util.Includes; import org.icefaces.ace.component.menuitem.MenuItem; import org.icefaces.ace.component.submenu.Submenu; import org.icefaces.ace.model.DefaultMenuModel; import org.icefaces.ace.model.MenuModel; import org.icefaces.util.JavaScriptRunner; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import javax.faces.el.MethodBinding; import javax.faces.event.ActionEvent; import java.io.Serializable; /** * Stateless backing bean for the menu. * * @author ICEsoft Technologies Inc. */ @ManagedBean @ViewScoped public class Menu implements Serializable { private MenuModel menuItems = new DefaultMenuModel(); private MethodBinding newtabMethodBinding = FacesContext.getCurrentInstance().getApplication() .createMethodBinding("#{menu.launchNewTab}", new Class[] { ActionEvent.class }); private MethodBinding screen1MethodBinding = FacesContext.getCurrentInstance().getApplication() .createMethodBinding("#{menu.launchScreen1}", new Class[] { ActionEvent.class }); private MethodBinding screen2MethodBinding = FacesContext.getCurrentInstance().getApplication() .createMethodBinding("#{menu.launchScreen2}", new Class[] { ActionEvent.class }); private MethodBinding screen3MethodBinding = FacesContext.getCurrentInstance().getApplication() .createMethodBinding("#{menu.launchScreen3}", new Class[] { ActionEvent.class }); private MethodBinding printMethodBinding = FacesContext.getCurrentInstance().getApplication() .createMethodBinding("#{menu.print}", new Class[] { ActionEvent.class }); private MethodBinding newMenusMethodBinding = FacesContext.getCurrentInstance().getApplication() .createMethodBinding("#{menu.newMenus}", new Class[] { ActionEvent.class }); @PostConstruct public void constructMenuItems(){ constructMenuItems(false); } public void constructMenuItems(boolean print){ Submenu screen1Menus = new Submenu(); screen1Menus.setLabel("Screen1"); screen1Menus.setId("screen1"); menuItems.addSubmenu(screen1Menus); MenuItem screen1Child1 = new MenuItem(); screen1Child1.setValue("Screen1"); screen1Child1.setId("screen1Child1"); screen1Child1.setActionListener(screen1MethodBinding); screen1Child1.setAjax(true); screen1Child1.setProcess("@all"); screen1Child1.setUpdate("@all"); screen1Child1.setOnclick("showProcessingMessage('Menu Action');"); screen1Menus.getChildren().add(screen1Child1); MenuItem screen1Child2 = new MenuItem(); screen1Child2.setValue("Add Print Menu Item"); screen1Child2.setId("screen1Child2"); screen1Child2.setActionListener(newMenusMethodBinding); screen1Child2.setAjax(true); screen1Child2.setProcess("@all"); screen1Child2.setUpdate("@all"); screen1Child2.setOnclick("showProcessingMessage('Menu Action');"); screen1Menus.getChildren().add(screen1Child2); Submenu screen2Menus = new Submenu(); screen2Menus.setLabel("Screen2"); screen2Menus.setId("screen2"); menuItems.addSubmenu(screen2Menus); MenuItem screen2Child1 = new MenuItem(); screen2Child1.setValue("Screen2"); screen2Child1.setId("screen2Child1"); screen2Child1.setActionListener(screen2MethodBinding); screen2Child1.setAjax(true); screen2Child1.setProcess("@all"); screen2Child1.setUpdate("@all"); screen2Menus.getChildren().add(screen2Child1); Submenu screen2SubMenus = new Submenu(); screen2SubMenus.setLabel("Screen2"); screen2SubMenus.setId("screen2sub"); screen2Menus.getChildren().add(screen2SubMenus); MenuItem screen2SubMenuChild1 = new MenuItem(); screen2SubMenuChild1.setValue("Screen2"); screen2SubMenuChild1.setId("screen2SubMenuChild1"); screen2SubMenuChild1.setActionListener(screen2MethodBinding); screen2SubMenuChild1.setAjax(true); screen2SubMenuChild1.setProcess("@all"); screen2SubMenuChild1.setUpdate("@all"); screen2SubMenus.getChildren().add(screen2SubMenuChild1); MenuItem screen2SubMenuChild2 = new MenuItem(); screen2SubMenuChild2.setValue("Screen2"); screen2SubMenuChild2.setId("screen2SubMenuChild2"); screen2SubMenuChild2.setActionListener(screen2MethodBinding); screen2SubMenuChild2.setAjax(true); screen2SubMenuChild2.setProcess("@all"); screen2SubMenuChild2.setUpdate("@all"); screen2SubMenus.getChildren().add(screen2SubMenuChild2); Submenu screen3Menus = new Submenu(); screen3Menus.setLabel("Screen3"); screen3Menus.setId("screen3"); // TODO: screen3Menus.setStyle("background-color: silver;"); // TODO: screen3Menus.setStyleClass("brad"); menuItems.addSubmenu(screen3Menus); MenuItem screen3Child1 = new MenuItem(); screen3Child1.setValue("Screen3"); screen3Child1.setId("screen3Child1"); screen3Child1.setActionListener(screen3MethodBinding); screen3Child1.setAjax(true); screen3Child1.setProcess("@all"); screen3Child1.setUpdate("@all"); screen3Menus.getChildren().add(screen3Child1); MenuItem newTab = new MenuItem(); newTab.setStyle("float: right"); newTab.setValue("+"); newTab.setId("newTab"); newTab.setActionListener(newtabMethodBinding); newTab.setHelpText("New Tab"); newTab.setAjax(true); newTab.setProcess("@all"); newTab.setUpdate("@all"); menuItems.addMenuItem(newTab); if(print){ MenuItem printTab = new MenuItem(); printTab.setStyle("float: right"); printTab.setValue("Print"); printTab.setId("printTab"); printTab.setActionListener(printMethodBinding); printTab.setAjax(true); printTab.setProcess("@all"); printTab.setUpdate("@all"); // TODO: printTab.setStyle("background-color: silver;"); // TODO: printTab.setStyleClass("brad"); menuItems.addMenuItem(printTab); } } public void launchScreen1(ActionEvent ae){ try{ Thread.sleep(2000); }catch(InterruptedException ie){ System.out.println("SLEEP PROBLEM"); } Tabset tabset = (Tabset)FacesUtils.getManagedBean(BeanNames.TABSET); Tab currentTab = tabset.getTabs().get(tabset.getVisibleTab()); currentTab.setLabel(Includes.SCREEN_1_LABEL); currentTab.setInclude(Includes.SCREEN_1); } public void launchScreen2(ActionEvent ae){ Tabset tabset = (Tabset)FacesUtils.getManagedBean(BeanNames.TABSET); Tab currentTab = tabset.getTabs().get(tabset.getVisibleTab()); currentTab.setLabel(Includes.SCREEN_2_LABEL); currentTab.setInclude(Includes.SCREEN_2); } public void launchScreen3(ActionEvent ae){ Tabset tabset = (Tabset)FacesUtils.getManagedBean(BeanNames.TABSET); Tab currentTab = tabset.getTabs().get(tabset.getVisibleTab()); currentTab.setLabel(Includes.SCREEN_3_LABEL); currentTab.setInclude(Includes.SCREEN_3); } public void launchNewTab(ActionEvent ae){ Tabset tabset = (Tabset)FacesUtils.getManagedBean(BeanNames.TABSET); tabset.addNewTab(); } public void print(ActionEvent ae) { JavaScriptRunner.runScript(FacesContext.getCurrentInstance(), "printJSF();"); } public void newMenus(ActionEvent ae) { menuItems = new DefaultMenuModel(); constructMenuItems(true); } public MenuModel getMenuItems() { return menuItems; } public void setMenuItems(MenuModel menuItems) { this.menuItems = menuItems; } }