package org.gcube.portlets.admin.authportletmanager.client.pagelayout; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.LinkedList; import java.util.List; import org.gcube.portlets.admin.authportletmanager.client.widget.ActionCellClass; import org.gcube.portlets.admin.authportletmanager.shared.Quote; import com.github.gwtbootstrap.client.ui.Label; import com.google.gwt.cell.client.ActionCell.Delegate; import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.CheckboxCell; import com.google.gwt.cell.client.CompositeCell; import com.google.gwt.cell.client.DateCell; import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.cell.client.HasCell; import com.google.gwt.cell.client.NumberCell; import com.google.gwt.cell.client.TextCell; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; import com.google.gwt.user.cellview.client.DataGrid; import com.google.gwt.user.cellview.client.SimplePager; import com.google.gwt.user.cellview.client.SimplePager.TextLocation; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.DefaultSelectionEventManager; import com.google.gwt.view.client.MultiSelectionModel; import com.google.gwt.view.client.SelectionModel; /** * Table for list quote (data grid) * * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it * */ public class QuoteDataGrid extends Composite { private static QuoteDataGridUiBinder uiBinder = GWT .create(QuoteDataGridUiBinder.class); interface QuoteDataGridUiBinder extends UiBinder { } /** * The main DataGrid. */ @UiField(provided = true) DataGrid dataGrid; @UiField(provided = true) SimplePager pager; public QuoteDataGrid() { onInitialize(); initWidget(uiBinder.createAndBindUi(this)); } private Column callerColumn; //private Column targetColumn; private Column managerColumn; private Column timeIntervalColumn; private Column quoteColumn; private Column dataInsertColumn; private Column dataUpdateColumn; public static SelectionModel selectionModel; public static ArrayListselectedQuote= new ArrayList(); public void onInitialize() { //resources = GWT.create(Resources.class); //resources.styles().ensureInjected(); dataGrid = new DataGrid(); dataGrid.setWidth("100%"); dataGrid.setHeight("400px"); dataGrid.setAutoHeaderRefreshDisabled(true); dataGrid.setAutoHeaderRefreshDisabled(true); dataGrid.addStyleName("table_quote"); dataGrid.getElement().setId("idGridQuote"); //Set the message to display when the table is empty. dataGrid.setEmptyTableWidget(new Label("No Quote Entry")); dataGrid.setSkipRowHoverStyleUpdate(false); /* // dataGrid.setHeaderBuilder(new CustomHeaderBuilder()); // dataGrid.setFooterBuilder(new CustomFooterBuilder()); */ // Create a Pager to control the table. SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); pager.setDisplay(dataGrid); // Attach a column sort handler to the ListDataProvider to sort the list. ListHandler sortHandler = new ListHandler(QuoteDataProvider.get().getDataProvider().getList()); dataGrid.addColumnSortHandler(sortHandler); //Add a selection model so we can select cells. selectionModel = new MultiSelectionModel(); dataGrid.setSelectionModel(selectionModel, DefaultSelectionEventManager . createCheckboxManager()); //Init Table Columns initTableColumns(selectionModel, sortHandler); QuoteDataProvider.get().addDataDisplay(dataGrid); dataGrid.setVisible(true); } /** * Init the columns to the table. */ @SuppressWarnings({ "unchecked", "rawtypes" }) private void initTableColumns(final SelectionModel selectionModel, ListHandler sortHandler) { // Checkbox column. This table will uses a checkbox column for selection. Column checkColumn = new Column(new CheckboxCell(true, false)) { @Override public Boolean getValue(Quote object) { // Get the value from the selection model. if (selectionModel.isSelected(object)){ //if already exist no add if (!selectedQuote.contains(object)) selectedQuote.add(object); } else selectedQuote.remove(object); return selectionModel.isSelected(object); } }; dataGrid.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("
")); dataGrid.setColumnWidth(checkColumn, 5, Unit.PCT); // CallerColumn column this is caller for the service callerColumn = new Column(new TextCell()) { @Override public String getValue(Quote object) { String caller=object.getCallerAsString(); return caller; } /** for override style on clik */ @Override public String getCellStyleNames(Context context, Quote object) { if (selectionModel.isSelected(object)) { return "boldStyle"; } else return null; } }; callerColumn.setSortable(true); sortHandler.setComparator(callerColumn, new Comparator() { @Override public int compare(Quote o1, Quote o2) { return o1.getCallerAsString().compareTo(o2.getCallerAsString()); } }); dataGrid.setColumnWidth(callerColumn, 20, Unit.PCT); dataGrid.addColumn(callerColumn, new ResizableHeader("Caller", dataGrid, callerColumn)); //timeIntervalColumn timeIntervalColumn = new Column(new TextCell()) { @Override public String getValue(Quote object) { String target=object.getTimeInterval().toString(); return target; } /** for override style on clik */ @Override public String getCellStyleNames(Context context, Quote object) { if (selectionModel.isSelected(object)) { return "boldStyle"; } else return null; } }; timeIntervalColumn.setSortable(true); sortHandler.setComparator(timeIntervalColumn, new Comparator() { @Override public int compare(Quote o1, Quote o2) { return o1.getTimeInterval().compareTo(o2.getTimeInterval()); } }); dataGrid.setColumnWidth(timeIntervalColumn, 20, Unit.PCT); dataGrid.addColumn(timeIntervalColumn, new ResizableHeader("Time", dataGrid, timeIntervalColumn)); //managerColumn managerColumn = new Column(new TextCell()) { @Override public String getValue(Quote object) { String target=object.getManager().toString(); return target; } /** for override style on clik */ @Override public String getCellStyleNames(Context context, Quote object) { if (selectionModel.isSelected(object)) { return "boldStyle"; } else return null; } }; managerColumn.setSortable(true); sortHandler.setComparator(managerColumn, new Comparator() { @Override public int compare(Quote o1, Quote o2) { return o1.getManager().compareTo(o2.getManager()); } }); dataGrid.setColumnWidth(managerColumn, 20, Unit.PCT); dataGrid.addColumn(managerColumn, new ResizableHeader("Type", dataGrid, managerColumn)); //quoteColumn quoteColumn = new Column(new NumberCell()) { @Override public Double getValue(Quote object) { Double target=object.getQuota(); return target; } }; quoteColumn.setSortable(true); sortHandler.setComparator(quoteColumn, new Comparator() { @Override public int compare(Quote o1, Quote o2) { return o1.getQuota().compareTo(o2.getQuota()); } }); dataGrid.setColumnWidth(quoteColumn, 20, Unit.PCT); dataGrid.addColumn(quoteColumn, new ResizableHeader("Quota", dataGrid, quoteColumn)); dataInsertColumn = new Column(new DateCell(DateTimeFormat.getFormat("EEE, d MMM yyyy HH:mm:ss"))) { @Override public Date getValue(Quote object) { return object.getDataInsert(); } }; dataInsertColumn.setSortable(true); sortHandler.setComparator(dataInsertColumn, new Comparator() { @Override public int compare(Quote o1, Quote o2) { if (o1 == o2) { return 0; } if (o1.getDataInsert() != null) { Date date1 =o1.getDataInsert(); Date date2 =o2.getDataInsert(); return (o2.getDataInsert() != null) ? date1.compareTo(date2) : 1; } return -1; } }); dataGrid.setColumnWidth(dataInsertColumn, 10, Unit.PCT); dataGrid.addColumn(dataInsertColumn, new ResizableHeader("Insert", dataGrid, dataInsertColumn)); // dataUpdate. dataUpdateColumn = new Column(new DateCell(DateTimeFormat.getFormat("EEE, d MMM yyyy HH:mm:ss "))) { @Override public Date getValue(Quote object) { return object.getDataUpdate(); } }; dataUpdateColumn.setSortable(true); sortHandler.setComparator(dataUpdateColumn, new Comparator() { @Override public int compare(Quote o1, Quote o2) { if (o1 == o2) { return 0; } if (o1.getDataUpdate() != null) { Date date1 =o1.getDataUpdate(); Date date2 =o2.getDataUpdate(); return (o2.getDataUpdate() != null) ? date1.compareTo(date2) : 1; } return -1; } }); dataGrid.setColumnWidth(dataUpdateColumn, 10, Unit.PCT); dataGrid.addColumn(dataUpdateColumn, new ResizableHeader("Last Update", dataGrid, dataUpdateColumn)); //add Columns Actions whit button Edit List> cells = new LinkedList>(); cells.add(new ActionHasCell("Edit", new Delegate() { @Override public void execute(Quote quote) { // EDIT CODE QuoteAddDialog dialogedit = new QuoteAddDialog(); ArrayList listModifiedQuote= new ArrayList(); listModifiedQuote.add(quote); dialogedit.setModifyQuote(listModifiedQuote); dialogedit.show(); } })); cells.add(new ActionHasCell("Delete", new Delegate() { @Override public void execute(Quote quote) { // DELETE CODE ArrayList listDeleteQuotes =new ArrayList(); listDeleteQuotes.add(quote); QuoteDeleteDialog confirmDeleteDialog= new QuoteDeleteDialog(listDeleteQuotes); confirmDeleteDialog.show(); } })); CompositeCell cell = new CompositeCell(cells); Column actionColumn =new Column(cell) { @Override public Quote getValue(Quote object) { return object; } }; dataGrid.setColumnWidth(actionColumn, 15, Unit.PCT); dataGrid.addColumn(actionColumn, "Actions"); } private class ActionHasCell implements HasCell { private ActionCellClass cell; public ActionHasCell(String text, Delegate delegate) { cell = new ActionCellClass(text, delegate); } @Override public Cell getCell() { return cell; } @Override public FieldUpdater getFieldUpdater() { return null; } @Override public Quote getValue(Quote object) { return object; } } }