workspace-tree-widget/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/accounting/AccoutingInfoContainer.java

288 lines
8.8 KiB
Java

package org.gcube.portlets.user.workspace.client.view.windows.accounting;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.user.workspace.client.resources.Resources;
import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingEntryType;
import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingField;
import com.extjs.gxt.ui.client.Style.ButtonScale;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.data.BaseModelData;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.GroupingStore;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.button.ToggleButton;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
import com.extjs.gxt.ui.client.widget.grid.GridGroupRenderer;
import com.extjs.gxt.ui.client.widget.grid.GroupColumnData;
import com.extjs.gxt.ui.client.widget.grid.GroupingView;
import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter;
import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
public class AccoutingInfoContainer extends LayoutContainer {
protected static final String DATE = "Date";
protected static final String AUTHOR = "Author";
protected static final String OPERATION = "Operation";
protected static final String DESCRIPTION = "Description";
private ColumnModel cm;
private Grid<ModelData> grid;
private ContentPanel cp;
private GroupingStore<ModelData> store = new GroupingStore<ModelData>();
private boolean groupingEnabled;
public AccoutingInfoContainer(){
initContentPanel();
initGrid();
createToolBar();
}
private void initContentPanel() {
setLayout(new FitLayout());
getAriaSupport().setPresentation(true);
cp = new ContentPanel();
cp.setHeaderVisible(false);
cp.setBodyBorder(true);
cp.setLayout(new FitLayout());
cp.setButtonAlign(HorizontalAlignment.CENTER);
// cp.getHeader().setIconAltText("Grid Icon");
// cp.setSize(550, 280);
add(cp);
}
private void createToolBar(){
ToolBar bar = new ToolBar();
final ToggleButton buttonGrouping = new ToggleButton("", Resources.getIconGridView());
buttonGrouping.setToolTip("Grouping by operation");
buttonGrouping.setScale(ButtonScale.SMALL);
buttonGrouping.toggle(true);
buttonGrouping.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
if(buttonGrouping.isPressed())
enableGrouping();
else
disableGrouping();
}
});
bar.add(buttonGrouping);
cp.setTopComponent(bar);
}
public void initGrid() {
store.groupBy(OPERATION);
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
ColumnConfig icon = createSortableColumnConfig("Type", "", 20);
columns.add(icon);
icon.setRenderer(new GridCellRenderer<ModelData>() {
public Object render(ModelData model, String property, ColumnData config, int rowIndex, int colIndex,
ListStore<ModelData> store, Grid<ModelData> grid) {
if(model.get(OPERATION)!=null){
if(model.get(OPERATION).equals(GxtAccountingEntryType.CREATE))
return Resources.getIconCreateNew().createImage();
if(model.get(OPERATION).equals(GxtAccountingEntryType.READ))
return Resources.getIconRead().createImage();
else if(model.get(OPERATION).equals(GxtAccountingEntryType.CUT))
return Resources.getIconCut().createImage();
else if(model.get(OPERATION).equals(GxtAccountingEntryType.PASTE))
return Resources.getIconPaste().createImage();
else if(model.get(OPERATION).equals(GxtAccountingEntryType.REMOVE))
return Resources.getIconCancel().createImage();
else if(model.get(OPERATION).equals(GxtAccountingEntryType.RENAME))
return Resources.getIconRenameItem().createImage();
else if(model.get(OPERATION).equals(GxtAccountingEntryType.UPDATED))
return Resources.getIconRefresh().createImage();
else if(model.get(OPERATION).equals(GxtAccountingEntryType.ADDED))
return Resources.getIconFileUpload().createImage();
}
return null;
}
});
ColumnConfig descr = createSortableColumnConfig(DESCRIPTION, DESCRIPTION, 230);
columns.add(descr);
descr.setRenderer(new GridCellRenderer<ModelData>() {
public Object render(ModelData model, String property, ColumnData config, int rowIndex, int colIndex,
ListStore<ModelData> store, Grid<ModelData> grid) {
// if(model.get(OPERATION).equals(GxtAccountingEntryType.READ))
// return "<b><p style=\"color: red;\">"
// + model.get(DESCRIPTION)+ "</p></b>";
return model.get(DESCRIPTION);
}
});
ColumnConfig oper = createSortableColumnConfig(OPERATION, OPERATION, 70);
columns.add(oper);
ColumnConfig auth = createSortableColumnConfig(AUTHOR, AUTHOR, 120);
columns.add(auth);
ColumnConfig date = createSortableColumnConfig(DATE, DATE, 140);
columns.add(date);
cm = new ColumnModel(columns);
final ColumnModel columnModel = cm;
grid = new Grid<ModelData>(this.store, cm);
GroupingView view = new GroupingView();
view.setShowGroupedColumn(true);
this.grid.setView(view);
view.setGroupRenderer(new GridGroupRenderer() {
public String render(GroupColumnData data) {
String f = columnModel.getColumnById(data.field).getHeader();
String l = data.models.size() == 1 ? "Item" : "Items";
return f + ": " + data.group + " (" + data.models.size() + " " + l + ")";
}
});
GridFilters filters = new GridFilters();
filters.setLocal(true);
DateFilter dateFilter = new DateFilter(DATE);
filters.addFilter(dateFilter);
grid.addPlugin(filters);
grid.setBorders(true);
grid.setStripeRows(true);
grid.getView().setAutoFill(true);
grid.setColumnLines(true);
grid.setColumnReordering(true);
grid.setStyleAttribute("borderTop", "none");
// grid.setLoadMask(true);
cp.add(grid);
}
public void setPanelSize(int width, int height){
if(width>0 && height>0 && grid!=null){
cp.setSize(width, height);
// grid.setSize(width, height);
}
}
public AccoutingInfoContainer(List<GxtAccountingField> accountings) {
initContentPanel();
initGrid();
updateListAccounting(accountings);
}
public void disableGrouping() {
GroupingStore<ModelData> groupingStore = null;
if (store instanceof GroupingStore) {
groupingStore = (GroupingStore<ModelData>) store;
if (groupingStore != null) {
groupingStore.clearGrouping();
}
this.groupingEnabled = false;
}
}
public void enableGrouping() {
GroupingStore<ModelData> groupingStore = null;
if (store instanceof GroupingStore) {
groupingStore = (GroupingStore<ModelData>) store;
if (groupingStore != null) {
groupingStore.groupBy(OPERATION);
}
this.groupingEnabled = true;
}
}
public void updateListAccounting(List<GxtAccountingField> accountings){
List<BaseModelData> listModelData = new ArrayList<BaseModelData>();
store.removeAll();
for (GxtAccountingField gxtAccountingField : accountings) {
BaseModelData baseModel = new BaseModelData();
baseModel.set(DESCRIPTION, gxtAccountingField.getDescription());
baseModel.set(OPERATION, gxtAccountingField.getOperation());
baseModel.set(AUTHOR, gxtAccountingField.getUser().getName());
baseModel.set(DATE, gxtAccountingField.getDate());
listModelData.add(baseModel);
}
store.add(listModelData);
}
@SuppressWarnings("unused")
private void updateStore(ListStore<ModelData> store){
resetStore();
this.grid.getStore().add(store.getModels());
}
public void resetStore(){
this.grid.getStore().removeAll();
}
public ColumnConfig createSortableColumnConfig(String id, String name, int width)
{
ColumnConfig columnConfig = new ColumnConfig(id, name, width);
columnConfig.setSortable(true);
return columnConfig;
}
public void setHeaderTitle(String title) {
cp.setHeading(title);
// cp.layout();
}
public boolean isGroupingEnabled() {
return groupingEnabled;
}
public void setGroupingEnabled(boolean groupingEnabled) {
this.groupingEnabled = groupingEnabled;
}
}