package net.techreadiness.ui.tags.datagrid; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.inject.Named; import net.techreadiness.service.common.DataGrid; import net.techreadiness.service.common.DataGridColumn; import net.techreadiness.service.common.DataGridItemProvider; import net.techreadiness.service.common.ViewDef; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.opensymphony.xwork2.util.Element; import com.opensymphony.xwork2.util.Key; @Named public class DataGridState<T> implements DataGrid<T>, Serializable { private static final long serialVersionUID = 1L; private String id; private int page = 1; private int pageSize = 10; private String search; private final FilterMap filters = new FilterMap(); private final Map<String, T> selectedItems = Maps.newConcurrentMap(); private boolean searchCleared; private DataGridItemProvider<T> itemProvider; private List<String> displayedColumns = null; private List<String> displayedFilters = null; private boolean clearSelected; private boolean paging = true; private ViewDef viewDef; private String editRowId; @Key(String.class) @Element(Boolean.class) private Map<String, Boolean> selectedRowId = Maps.newConcurrentMap(); @Override public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public int getPage() { return page; } public void setPage(Integer page) { this.page = page; } @Override public int getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { if (!pageSize.equals(this.pageSize)) { int firstResult = getFirstResult(); this.page = firstResult / pageSize + 1; this.pageSize = pageSize; } } @Override public List<DataGridColumn> getColumns() { return Lists.newArrayList(); } @Override public List<T> getSelectedItems() { if (selectedItems.isEmpty()) { return Lists.newArrayList(); } return new ArrayList<>(selectedItems.values()); } public void selectItem(String repr, T item) { selectedItems.put(repr, item); selectedRowId.put(repr, Boolean.TRUE); } public void deSelectItem(String repr) { selectedItems.remove(repr); selectedRowId.remove(repr); } public boolean isItemSelected(String repr) { return selectedItems.containsKey(repr); } public void clearSelectedItems() { selectedItems.clear(); } @Override public String getSearch() { return this.search; } public void setSearch(String search) { this.search = search; this.page = 1; } @Override public FilterMap getFilters() { return filters; } @Override public int getFirstResult() { return (page - 1) * pageSize; } public void setSearchCleared(boolean searchCleared) { this.searchCleared = searchCleared; this.page = 1; } public boolean isSearchCleared() { return searchCleared; } public void setItemProvider(DataGridItemProvider<T> itemProvider) { this.itemProvider = itemProvider; } public DataGridItemProvider<T> getItemProvider() { return itemProvider; } public void setDisplayedColumns(List<String> displayedColumns) { this.displayedColumns = displayedColumns; } public List<String> getDisplayedColumns() { return displayedColumns; } public boolean isClearSelected() { return clearSelected; } public void setClearSelected(boolean clearSelected) { this.clearSelected = clearSelected; } @Override public boolean isPaging() { return paging; } public void setPaging(boolean paging) { this.paging = paging; } public List<String> getDisplayedFilters() { return displayedFilters; } public void setDisplayedFilters(List<String> displayedFilters) { this.displayedFilters = displayedFilters; } @Override public ViewDef getViewDef() { return viewDef; } public void setViewDef(ViewDef viewDef) { this.viewDef = viewDef; } public String getEditRowId() { return editRowId; } public void setEditRowId(String editRowId) { this.editRowId = editRowId; } public Map<String, Boolean> getSelectedRowId() { return selectedRowId; } public void setSelectedRowId(Map<String, Boolean> selectedRowId) { this.selectedRowId = selectedRowId; } }