/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.gui.common.framework;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;
import org.rhq.enterprise.gui.common.paging.PageControlSettingsUIBean;
import org.richfaces.component.UIDataTable;
import org.richfaces.component.UIDatascroller;
import org.rhq.core.domain.util.PageControl;
import org.rhq.enterprise.gui.common.paging.PageControlView;
import org.rhq.enterprise.gui.legacy.WebUser;
import org.rhq.enterprise.gui.legacy.WebUserPreferences;
public abstract class PagedDataTableUIBean extends EnterpriseFacesContextUIBean {
private PageControl pageControl;
protected DataModel dataModel;
private UIDataTable dataTable;
private UIDatascroller datascroller;
private PageControlSettingsUIBean pageControlSettings = new PageControlSettingsUIBean();
public PageControl getPageControl(WebUser user, PageControlView view) {
if (pageControl == null) {
pageControl = user.getWebPreferences().getPageControl(view, getMinimumPageSize());
}
/*
* if an invalid value was already persisted to the database, this needs to be fixed;
* this can occur when the value was valid at some point in the past, but new overrides
* changes the valid list of page sizes; generally, the user can correct this themselves
* at the user interface by selecting a different pageSize (which would cause the new
* value to be persisted), unless there is only one allowable value in which case it's
* not possible for the user to correct the issue themselves; to handle both of these
* cases, let's just pessimistically determine whether we need to "fix" the PageControl
* and, if so, repersist the adjusted values
*/
if (view.isUnlimited() == false) {
String pageSize = String.valueOf(pageControl.getPageSize());
boolean hasValidSize = false;
for (SelectItem validPageSize : getPageSizes()) {
if (validPageSize.getValue().toString().equals(pageSize)) {
hasValidSize = true;
break;
}
}
if (hasValidSize == false) {
pageControl.setPageSize(getMinimumPageSize());
setPageControl(user, view, pageControl);
}
}
return pageControl;
}
public PageControl getDefaultPageControl(WebUser user, PageControlView view) {
return user.getWebPreferences().getDefaultPageControl(view, getMinimumPageSize());
}
public void setPageControl(WebUser user, PageControlView view, PageControl pageControl) {
WebUserPreferences preferences = user.getWebPreferences();
preferences.setPageControl(view, pageControl);
this.pageControl = pageControl;
}
public UIDataTable getDataTable() {
return dataTable;
}
public void setDataTable(UIDataTable dataTable) {
this.dataTable = dataTable;
}
public void setDataModel(DataModel dataModel) {
this.dataModel = dataModel;
}
public abstract DataModel getDataModel();
public UIDatascroller getDatascroller() {
return datascroller;
}
public void setDatascroller(UIDatascroller datascroller) {
this.datascroller = datascroller;
/* this can be externalized later, but at least
* all PagedDataTableUIBeans will be consistent now
*/
this.datascroller.setMaxPages(5);
}
public SelectItem[] getPageSizes() {
return pageControlSettings.getPageSizes();
}
public int getMinimumPageSize() {
return pageControlSettings.getMinimumPageSize();
}
public void clearDataModel(ActionEvent event) {
dataModel = null;
}
}