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.ResourceCriteria; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.composite.ResourceComposite; 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.IntExtractor; 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.ResourceNameDisambiguatingPagedListDataModel; import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility; import org.rhq.enterprise.server.resource.ResourceManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; public class BrowseResourcesUIBean extends PagedDataTableUIBean { protected final Log log = LogFactory.getLog(BrowseResourcesUIBean.class); public static final String MANAGED_BEAN_NAME = "BrowseResourcesUIBean"; private String search; private ResourceCategory category; private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager(); private static final IntExtractor<ResourceComposite> RESOURCE_ID_EXTRATOR = new IntExtractor<ResourceComposite>() { public int extract(ResourceComposite object) { return object.getResource().getId(); } }; public BrowseResourcesUIBean() { String subtab = FacesContextUtility.getOptionalRequestParameter("subtab", "").toLowerCase(); if (subtab.equals("platform")) { category = ResourceCategory.PLATFORM; } else if (subtab.equals("server")) { category = ResourceCategory.SERVER; } else if (subtab.equals("service")) { category = ResourceCategory.SERVICE; } } public String getSearch() { return this.search; } public void setSearch(String search) { this.search = search; } public ResourceCategory getCategory() { return this.category; } @Override public synchronized DataModel getDataModel() { if (dataModel == null) { dataModel = new ResultsDataModel(PageControlView.BrowseResources, MANAGED_BEAN_NAME); } return dataModel; } private class ResultsDataModel extends ResourceNameDisambiguatingPagedListDataModel<ResourceComposite> { public ResultsDataModel(PageControlView view, String beanName) { super(view, beanName, true); } public PageList<ResourceComposite> fetchDataForPage(PageControl pc) { try { String search = getSearch(); ResourceCategory category = getCategory(); ResourceCriteria criteria = new ResourceCriteria(); criteria.setPageControl(pc); criteria.addFilterResourceCategories(category); if (search != null && !search.trim().equals("")) { criteria.setSearchExpression(search); } // lineage info is now provided by the disambiguation stuff // criteria.fetchParentResource(true); PageList<ResourceComposite> results; results = resourceManager.findResourceCompositesByCriteria(getSubject(), criteria); return results; } catch (Throwable t) { FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR, "Failed to fetch results: " + ThrowableUtil.getRootMessage(t)); return new PageList<ResourceComposite>(pc); } } protected IntExtractor<ResourceComposite> getResourceIdExtractor() { return RESOURCE_ID_EXTRATOR; } } public String uninventorySelectedResources() { try { Subject subject = EnterpriseFacesContextUtility.getSubject(); String[] selectedResources = getSelectedItems(); int[] resourceIds = StringUtility.getIntArray(selectedResources); resourceManager.uninventoryResources(subject, resourceIds); FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Uninventoried selected resources"); } catch (Exception e) { FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR, "Failed to uninventory selected resources", e); } return "success"; } private String[] getSelectedItems() { return FacesContextUtility.getRequest().getParameterValues("selectedItems"); } }