package com.icesoft.williams.view.backing; import com.icesoft.faces.component.commandsortheader.CommandSortHeader; import com.icesoft.williams.services.ApplicationService; import com.icesoft.williams.services.Entity; import com.icesoft.williams.view.model.Screen1TableItem; import com.icesoft.williams.view.util.BeanNames; import com.icesoft.williams.view.util.FacesUtils; import org.icefaces.ace.component.menuitem.MenuItem; import org.icefaces.ace.event.SelectEvent; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; import javax.faces.el.MethodBinding; import javax.faces.event.ActionEvent; import java.util.*; import org.icefaces.ace.model.DefaultMenuModel; import org.icefaces.ace.model.table.RowStateMap; import org.icefaces.ace.model.MenuModel; import org.icefaces.util.JavaScriptRunner; /** * Model bean for Screen 1. * * Screen 1 contains the List of table items bound to our data table. * * @author ICEsoft Technologies Inc. */ @ManagedBean @SessionScoped public class Screen1 extends Tab { private List tableItems; private List detailTableItems; private Screen1TableItem selectedTableItem; private Screen1TableItem[] selectedTableItemList; private RowStateMap stateMap = new RowStateMap(); int retrieve = 1; // Variables used in column sorting public static final int ROW_SIZE =15; public static final String SORT_COLUMN_ID = "id"; public static final String SORT_COLUMN_NAME = "name"; public static final String SORT_COLUMN_COMMENT = "comment"; private String columnName = SORT_COLUMN_ID; private boolean ascending = true; private int table1First = 0; private int table2First = 0; private int table1Page = 1; private int table2Page = 1; private int rowSize = 5; private MenuModel actions = new DefaultMenuModel(); private MethodBinding printMethodBinding = FacesContext.getCurrentInstance().getApplication() .createMethodBinding("#{screen1.print}", new Class[] { ActionEvent.class }); private Date beginDate; protected MenuModel actionsRightClick; public Screen1(){ } @PostConstruct public void initialize() { 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"); actions.addMenuItem(printTab); constructActionRightClickMenu(); } public Screen1(String label, String include){ super(label,include); } public List getSelectedTableItemList() { return (List)stateMap.getSelected(); } public void setSelectedTableItemList(List selectedTableItemList) {} public List getTableItems() { return tableItems; } public void setTableItems(List tableItems) { this.tableItems = tableItems; } public List getDetailTableItems() { return detailTableItems; } public void setDetailTableItems(List detailTableItems) { this.detailTableItems = detailTableItems; } public Screen1TableItem getSelectedTableItem() { List selected = stateMap.getSelected(); if (selected != null && selected.size() > 0) return (Screen1TableItem)stateMap.getSelected().get(0); else return null; } public void setSelectedTableItem(Screen1TableItem selectedTableItem) {} public String getSortColumnId() { return SORT_COLUMN_ID; } public String getSortColumnName() { return SORT_COLUMN_NAME; } public String getSortColumnComment() { return SORT_COLUMN_COMMENT; } public String getColumnName() { return columnName; } public void setColumnName(String columnName) { this.columnName = columnName; } public boolean getAscending() { return ascending; } public void setAscending(boolean ascending) { this.ascending = ascending; } public Date getBeginDate() { return beginDate; } public void setBeginDate(Date beginDate) { this.beginDate = beginDate; } public void columnSort(ActionEvent event) { // Ensure we have valid items, a valid column to sort on, and a valid event to work with if ((tableItems != null) && (tableItems.size() > 0) && (columnName != null) && (event != null) && (event.getComponent() != null)) { // Get the column name that was clicked to perform the sort String newColumnName = ((CommandSortHeader)event.getComponent()).getColumnName(); boolean newAscending = true; // If the new column was the same as the old column, just toggle the ascending if (newColumnName.equals(columnName)) { newAscending = !ascending; } // Perform the actual sort sort(newColumnName, newAscending); } } private void sort(final String sortColumn, final boolean sortAscending) { // Build a comparator that uses compareTo of the proper column Comparator sortComparator = new Comparator() { public int compare(Screen1TableItem item1, Screen1TableItem item2) { if (SORT_COLUMN_ID.equals(sortColumn)) { return sortAscending ? new Integer(item1.getId()).compareTo(new Integer(item2.getId())) : new Integer(item2.getId()).compareTo(new Integer(item1.getId())); } else if (SORT_COLUMN_NAME.equals(sortColumn)) { return sortAscending ? item1.getName().compareTo(item2.getName()) : item2.getName().compareTo(item1.getName()); } else if (SORT_COLUMN_COMMENT.equals(sortColumn)) { if ((item1.getComment() == null) || (item2.getComment() == null)) { return 0; } return sortAscending ? item1.getComment().compareTo(item2.getComment()) : item2.getComment().compareTo(item1.getComment()); } else return 0; } }; Collections.sort(tableItems, sortComparator); } public void retrieveTableItems(ActionEvent ae){ try{ Thread.sleep(2000); }catch(InterruptedException ie){ System.out.println("SLEEP PROBLEM"); } ApplicationService applicationService = (ApplicationService) FacesUtils.getManagedBean(BeanNames.APPLICATION_SERVICE); tableItems = new ArrayList(); for(int i=0; i(); for(Entity entity:applicationService.getScreen1TableItems()){ // Instantiate a new transfer object from the entity detailTableItems.add(new Screen1TableItem(entity)); } } public void print(ActionEvent ae) { JavaScriptRunner.runScript(FacesContext.getCurrentInstance(), "printJSF();"); } public RowStateMap getStateMap() { return stateMap; } public void setStateMap(RowStateMap stateMap) { this.stateMap = stateMap; } public int getRowSize() { return rowSize; } public void setRowSize(int rowSize) { this.rowSize = rowSize; } public int getTable1First() { return table1First; } public void setTable1First(int table1First) { this.table1First = table1First; } public int getTable2First() { return table2First; } public void setTable2First(int table2First) { this.table2First = table2First; } public int getTable1Page() { return table1Page; } public void setTable1Page(int table1Page) { this.table1Page = table1Page; } public int getTable2Page() { return table2Page; } public void setTable2Page(int table2Page) { this.table2Page = table2Page; } public MenuModel getActionsRightClick() { return actionsRightClick; } protected void constructActionRightClickMenu() { actionsRightClick = new DefaultMenuModel(); MenuItem menuItem = new MenuItem(); menuItem.setId("edit_mi"); menuItem.setValue("Edit"); MethodBinding binding = FacesContext.getCurrentInstance().getApplication().createMethodBinding("#{screen1.tableItemDetailContextMenu('edit')}", new Class[]{String.class}); menuItem.setAction(binding); menuItem.setAjax(true); menuItem.setProcess("@all"); menuItem.setUpdate("@all"); menuItem.setOnclick("onclick='dtlPopup.show();'"); actionsRightClick.addMenuItem(menuItem); } public MenuModel getActions() { return actions; } public void setActions(MenuModel actions) { this.actions = actions; } }