/* * 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.content; import java.util.List; import javax.faces.model.DataModel; import javax.faces.model.SelectItem; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.common.composite.IntegerOptionItem; import org.rhq.core.domain.content.PackageType; import org.rhq.core.domain.content.composite.PackageListItemComposite; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceCreationDataType; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.common.converter.SelectItemUtils; 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.gui.util.EnterpriseFacesContextUtility; import org.rhq.enterprise.server.content.ContentManagerLocal; import org.rhq.enterprise.server.content.ContentUIManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; public class ListPackagesUIBean extends PagedDataTableUIBean { // Constants -------------------------------------------- public static final String MANAGED_BEAN_NAME = "ListPackagesUIBean"; // Attributes -------------------------------------------- private Resource resource; private Integer selectedPackage; private SelectItem[] packageTypes; private String packageTypeFilter; private SelectItem[] packageVersions; private String packageVersionFilter; private String search; private ContentManagerLocal contentManager = LookupUtil.getContentManager(); private ContentUIManagerLocal contentUIManager = LookupUtil.getContentUIManager(); // Constructors -------------------------------------------- public ListPackagesUIBean() { } // Public -------------------------------------------- @Override public DataModel getDataModel() { if (dataModel == null) { dataModel = new ListInstalledPackagesDataModel(PageControlView.InstalledPackagesList, MANAGED_BEAN_NAME); } return dataModel; } public Integer getSelectedPackage() { return selectedPackage; } public void setSelectedPackage(Integer selectedPackage) { this.selectedPackage = selectedPackage; } /** * If the current resource is a content-backed resource, this call will return the name of the package type * that does the resource backing. This is used to disallow the user to undeploy that package. * * @return name of a package type if the resource is content-backed; <code>null</code> otherwise */ public String getContentBackedResourceTypeName() { resource = EnterpriseFacesContextUtility.getResource(); ResourceType resourceType = resource.getResourceType(); if (resourceType.getCreationDataType() != ResourceCreationDataType.CONTENT) return null; ContentUIManagerLocal contentUIManager = LookupUtil.getContentUIManager(); List<PackageType> packageTypes = contentUIManager.getPackageTypes(resourceType.getId()); for (PackageType type : packageTypes) { if (type.isCreationData()) return type.getName(); } return null; } // Inner Classes -------------------------------------------- /** * Data model for the resource's list of artifacts. */ private class ListInstalledPackagesDataModel extends PagedListDataModel<PackageListItemComposite> { public ListInstalledPackagesDataModel(PageControlView view, String beanName) { super(view, beanName); } @Override public PageList<PackageListItemComposite> fetchPage(PageControl pc) { Subject subject = EnterpriseFacesContextUtility.getSubject(); Resource requestResource = EnterpriseFacesContextUtility.getResourceIfExists(); Integer packageTypeFilter = ListPackagesUIBean.this.getPackageTypeFilterAsInteger(); String packageVersionFilter = ListPackagesUIBean.this.getPackageVersionFilter(); if (requestResource == null) { requestResource = resource; // request not associated with a resource - use the resource we used before } else { resource = requestResource; // request switched the resource this UI bean is using } PageList<PackageListItemComposite> pageList = contentUIManager.getInstalledPackages(subject, requestResource.getId(), packageTypeFilter, packageVersionFilter, search, pc); return pageList; } } public SelectItem[] getPackageTypes() { if (this.packageTypes == null) { List<IntegerOptionItem> items = contentUIManager.getInstalledPackageTypes(EnterpriseFacesContextUtility .getSubject(), EnterpriseFacesContextUtility.getResource().getId()); this.packageTypes = SelectItemUtils.convertFromListOptionItem(items, true); } return this.packageTypes; } public void setPackageTypes(SelectItem[] packageTypes) { this.packageTypes = packageTypes; } public String getPackageTypeFilter() { if (packageTypeFilter == null) { packageTypeFilter = SelectItemUtils.getSelectItemFilter("contentForm:packageTypeFilter"); } return SelectItemUtils.cleanse(packageTypeFilter); } public Integer getPackageTypeFilterAsInteger() { String packageTypeFilterString = getPackageTypeFilter(); if (packageTypeFilterString != null) { return Integer.parseInt(packageTypeFilterString); } return null; } public void setPackageTypeFilter(String packageTypeFilter) { this.packageTypeFilter = packageTypeFilter; } public SelectItem[] getPackageVersions() { if (this.packageVersions == null) { List<String> items = contentManager.findInstalledPackageVersions(EnterpriseFacesContextUtility.getSubject(), EnterpriseFacesContextUtility.getResource().getId()); this.packageVersions = SelectItemUtils.convertFromListString(items, true); } return packageVersions; } public void setPackageVersions(SelectItem[] packageVersions) { this.packageVersions = packageVersions; } public String getPackageVersionFilter() { if (packageVersionFilter == null) { packageVersionFilter = SelectItemUtils.getSelectItemFilter("contentForm:packageVersionFilter"); } return SelectItemUtils.cleanse(packageVersionFilter); } public void setPackageVersionFilter(String packageVersionFilter) { this.packageVersionFilter = packageVersionFilter; } public String getSearch() { return search; } public void setSearch(String search) { this.search = search; } }