package org.rhq.enterprise.gui.inventory.browse; import javax.faces.application.FacesMessage; import javax.faces.model.DataModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.ResourceGroupCriteria; import org.rhq.core.domain.resource.group.GroupCategory; import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.gui.util.FacesContextUtility; import org.rhq.core.gui.util.StringUtility; import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.common.framework.PagedDataTableUIBean; import org.rhq.enterprise.gui.common.paging.PageControlView; import org.rhq.enterprise.gui.common.paging.PagedListDataModel; import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; public class BrowseGroupsUIBean extends PagedDataTableUIBean { protected final Log log = LogFactory.getLog(BrowseGroupsUIBean.class); public static final String MANAGED_BEAN_NAME = "BrowseGroupsUIBean"; private String search; private GroupCategory category; private ResourceGroupManagerLocal groupManager = LookupUtil.getResourceGroupManager(); public BrowseGroupsUIBean() { String subtab = FacesContextUtility.getOptionalRequestParameter("subtab", "").toLowerCase(); if (subtab.equals("compatible")) { category = GroupCategory.COMPATIBLE; } else if (subtab.equals("mixed")) { category = GroupCategory.MIXED; } } public String getSearch() { return this.search; } public void setSearch(String search) { this.search = search; } public GroupCategory getCategory() { return category; } @Override public DataModel getDataModel() { if (dataModel == null) { dataModel = new ResultsDataModel(PageControlView.BrowseGroups, MANAGED_BEAN_NAME); } return dataModel; } private class ResultsDataModel extends PagedListDataModel<ResourceGroupComposite> { public ResultsDataModel(PageControlView view, String beanName) { super(view, beanName); } public PageList<ResourceGroupComposite> fetchPage(PageControl pc) { try { String search = getSearch(); GroupCategory category = getCategory(); ResourceGroupCriteria criteria = new ResourceGroupCriteria(); criteria.setPageControl(pc); if (search != null && !search.trim().equals("")) { criteria.setSearchExpression(search); } criteria.addFilterGroupCategory(category); PageList<ResourceGroupComposite> results; results = groupManager.findResourceGroupCompositesByCriteria(getSubject(), criteria); return results; } catch (Throwable t) { FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR, "Failed to fetch results: " + ThrowableUtil.getRootMessage(t)); return new PageList<ResourceGroupComposite>(pc); } } } public String deleteSelectedGroups() { try { Subject subject = getSubject(); String[] selectedGroups = getSelectedItems(); int[] groupIds = StringUtility.getIntArray(selectedGroups); for (int nextGroupId : groupIds) { groupManager.deleteResourceGroup(subject, nextGroupId); } FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Deleted selected groups"); } catch (Exception e) { FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR, "Failed to delete all selected groups", e); } return "success"; } public String uninventoryMembers() { try { Subject subject = getSubject(); String[] selectedGroups = getSelectedItems(); int[] groupIds = StringUtility.getIntArray(selectedGroups); for (int nextGroupId : groupIds) { groupManager.uninventoryMembers(subject, nextGroupId); } FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Uninventoried members of selected groups"); } catch (Exception e) { FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR, "Failed to uninventory members of selected groups", e); } return "success"; } private String[] getSelectedItems() { return FacesContextUtility.getRequest().getParameterValues("selectedItems"); } }