/* * 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.inventory.group; import java.util.Set; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.resource.ResourceError; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.resource.composite.ResourceFacets; import org.rhq.core.domain.resource.composite.ResourcePermission; import org.rhq.core.domain.resource.group.GroupCategory; import org.rhq.core.domain.resource.group.GroupDefinition; import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite; import org.rhq.core.gui.util.FacesContextUtility; import org.rhq.enterprise.gui.legacy.ParamConstants; import org.rhq.enterprise.gui.legacy.WebUser; import org.rhq.enterprise.gui.legacy.WebUserPreferences; import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility; import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; public class ResourceGroupUIBean { public static final String MANAGED_BEAN_NAME = "ResourceGroupUIBean"; private ResourceTypeManagerLocal resourceTypeManager = LookupUtil.getResourceTypeManager(); private ResourceGroup resourceGroup; private Double availability; private long count; private long upCount; private long downCount; private ResourcePermission permissions; private ResourceFacets facets; // this will only be non-null for compat groups private Boolean isFavorite; // true if this resource has been added to the favorites dashboard portlet private ResourceError invalidPluginConfigurationError; private Subject subject; public ResourceGroupUIBean() { this(lookupResourceGroup()); } public ResourceGroupUIBean(ResourceGroupComposite resourceGroupComposite) { this(resourceGroupComposite, EnterpriseFacesContextUtility.getSubject()); } public ResourceGroupUIBean(ResourceGroupComposite resourceGroupComposite, Subject subject) { this.resourceGroup = resourceGroupComposite.getResourceGroup(); this.upCount = resourceGroupComposite.getExplicitUp() + resourceGroupComposite.getExplicitUnknown(); this.downCount = resourceGroupComposite.getExplicitDown(); this.count = upCount + downCount; this.availability = resourceGroupComposite.getExplicitAvail(); this.subject = subject; Set<Permission> permissions = LookupUtil.getAuthorizationManager().getImplicitGroupPermissions(subject, this.resourceGroup.getId()); this.permissions = new ResourcePermission(permissions); if (this.resourceGroup.getGroupCategory() == GroupCategory.COMPATIBLE) { this.facets = this.resourceTypeManager.getResourceFacets(this.resourceGroup.getResourceType().getId()); } } public int getGroupId() { return this.resourceGroup.getId(); } @NotNull public String getName() { return this.resourceGroup.getName(); } @NotNull public String getGroupCategoryName() { return this.resourceGroup.getGroupCategory().name(); } public boolean isCompatible() { return (this.resourceGroup.getGroupCategory() == GroupCategory.COMPATIBLE); } public boolean isClusterGroup() { return (this.resourceGroup.getClusterKey() != null); } public String getDescription() { return this.resourceGroup.getDescription(); } public long getCtime() { return this.resourceGroup.getCtime(); } public long getMtime() { return this.resourceGroup.getMtime(); } public String getModifiedBy() { return this.resourceGroup.getModifiedBy(); } public Boolean getRecursive() { return this.resourceGroup.isRecursive(); } public GroupDefinition getGroupDefinition() { return this.resourceGroup.getGroupDefinition(); } public ResourcePermission getPermissions() { return this.permissions; } public ResourceFacets getFacets() { return this.facets; } @Nullable public ResourceError getInvalidPluginConfigurationError() { return this.invalidPluginConfigurationError; } public Double getAvailability() { return this.availability; } public ResourceType getResourceType() { return resourceGroup.getResourceType(); } public long getGroupCount() { return this.count; } public long getUpCount() { return this.upCount; } public long getDownCount() { return this.downCount; } public Subject getOwner() { // @Todo add owner to the RHQ_resource_group_table //return this.resourceGroup.getOwner(); // This is a temp impl, will use the line above when the table is updated return this.subject; } public boolean isFavorite() { if (this.isFavorite == null) { WebUser user = EnterpriseFacesContextUtility.getWebUser(); WebUserPreferences preferences = user.getWebPreferences(); WebUserPreferences.FavoriteGroupPortletPreferences favorites = preferences .getFavoriteGroupPortletPreferences(); this.isFavorite = favorites.isFavorite(getGroupId()); } return this.isFavorite; } public String toggleFavorite() { // log.debug("toggleFavorite for " + resourceGroup); WebUser user = EnterpriseFacesContextUtility.getWebUser(); WebUserPreferences preferences = user.getWebPreferences(); WebUserPreferences.FavoriteGroupPortletPreferences favorites = preferences.getFavoriteGroupPortletPreferences(); boolean isFav = favorites.isFavorite(getGroupId()); if (isFav) { favorites.removeFavorite(getGroupId()); // log.debug("Removing favorite: " + resourceId); } else { favorites.addFavorite(getGroupId()); // log.debug("Adding favorite: " + resourceId); } preferences.setFavoriteGroupPortletPreferences(favorites); this.isFavorite = !isFav; return null; } private static ResourceGroupComposite lookupResourceGroup() { int resourceGroupId = FacesContextUtility.getRequiredRequestParameter(ParamConstants.GROUP_ID_PARAM, Integer.class); Subject subject = EnterpriseFacesContextUtility.getSubject(); return LookupUtil.getResourceGroupManager().getResourceGroupComposite(subject, resourceGroupId); } }