/* * RHQ Management Platform * Copyright (C) 2005-2010 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.coregui.client.inventory; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import java.util.Set; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.resource.InventoryStatus; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.group.GroupCategory; import org.rhq.coregui.client.IconEnum; import org.rhq.coregui.client.PermissionsLoadedListener; import org.rhq.coregui.client.PermissionsLoader; import org.rhq.coregui.client.components.TitleBar; import org.rhq.coregui.client.components.view.AbstractSectionedLeftNavigationView; import org.rhq.coregui.client.components.view.NavigationItem; import org.rhq.coregui.client.components.view.NavigationSection; import org.rhq.coregui.client.components.view.ViewFactory; import org.rhq.coregui.client.components.view.ViewName; import org.rhq.coregui.client.inventory.groups.ResourceGroupDataSourceField; import org.rhq.coregui.client.inventory.groups.ResourceGroupListView; import org.rhq.coregui.client.inventory.groups.definitions.GroupDefinitionListView; import org.rhq.coregui.client.inventory.resource.ResourceDataSourceField; import org.rhq.coregui.client.inventory.resource.ResourceDatasource; import org.rhq.coregui.client.inventory.resource.ResourceSearchView; import org.rhq.coregui.client.inventory.resource.discovery.ResourceAutodiscoveryView; import org.rhq.coregui.client.util.enhanced.EnhancedVLayout; /** * The Inventory top-level view. * * @author Greg Hinkle * @author Joseph Marques * @author Ian Springer */ public class InventoryView extends AbstractSectionedLeftNavigationView { public static final ViewName VIEW_ID = new ViewName("Inventory", MSG.common_title_inventory()); // view IDs for Resources section public static final ViewName RESOURCES_SECTION_VIEW_ID = new ViewName("Resources", MSG.common_title_resources()); public static final ViewName PAGE_ALL_RESOURCES = new ViewName("AllResources", MSG.view_inventory_allResources(), IconEnum.ALL_RESOURCES); public static final ViewName PAGE_PLATFORMS = new ViewName("Platforms", MSG.view_inventory_platforms(), IconEnum.PLATFORMS); public static final ViewName PAGE_SERVERS_TOP = new ViewName("ServersTop", MSG.view_inventory_serversTop(), IconEnum.SERVERS); public static final ViewName PAGE_SERVERS = new ViewName("Servers", MSG.view_inventory_servers(), IconEnum.SERVERS); public static final ViewName PAGE_SERVICES = new ViewName("Services", MSG.view_inventory_services(), IconEnum.SERVICES); public static final ViewName PAGE_IGNORED_RESOURCES = new ViewName("IgnoredResources", MSG.view_inventory_ignoredResources(), IconEnum.ALL_RESOURCES); public static final ViewName PAGE_UNAVAIL_SERVERS = new ViewName("UnavailableServers", MSG.view_inventory_unavailableServers(), IconEnum.UNAVAILABLE_SERVERS); // view IDs for Groups section public static final ViewName GROUPS_SECTION_VIEW_ID = new ViewName("Groups", MSG.view_inventory_groups()); public static final ViewName PAGE_DYNAGROUP_DEFINITIONS = new ViewName("DynagroupDefinitions", MSG.view_inventory_dynagroupDefs(), IconEnum.DYNAGROUPS); public static final ViewName PAGE_ALL_GROUPS = new ViewName("AllGroups", MSG.view_inventory_allGroups(), IconEnum.ALL_GROUPS); public static final ViewName PAGE_COMPATIBLE_GROUPS = new ViewName("CompatibleGroups", MSG.common_title_compatibleGroups(), IconEnum.COMPATIBLE_GROUPS); public static final ViewName PAGE_MIXED_GROUPS = new ViewName("MixedGroups", MSG.common_title_mixedGroups(), IconEnum.MIXED_GROUPS); public static final ViewName PAGE_PROBLEM_GROUPS = new ViewName("ProblemGroups", MSG.view_inventory_problemGroups(), IconEnum.PROBLEM_GROUPS); private Set<Permission> globalPermissions; public InventoryView() { super(VIEW_ID.getName()); } @Override protected void onInit() { new PermissionsLoader().loadExplicitGlobalPermissions(new PermissionsLoadedListener() { @Override public void onPermissionsLoaded(Set<Permission> permissions) { globalPermissions = (permissions != null) ? permissions : EnumSet.noneOf(Permission.class); InventoryView.super.onInit(); } }); } protected Canvas defaultView() { EnhancedVLayout vLayout = new EnhancedVLayout(); vLayout.setWidth100(); TitleBar titleBar = new TitleBar(MSG.common_title_inventory(), IconEnum.INVENTORY.getIcon24x24Path()); vLayout.addMember(titleBar); Label label = new Label(MSG.view_inventory_sectionHelp()); label.setPadding(10); vLayout.addMember(label); return vLayout; } @Override protected List<NavigationSection> getNavigationSections() { List<NavigationSection> sections = new ArrayList<NavigationSection>(); NavigationSection resourcesSection = buildResourcesSection(); sections.add(resourcesSection); NavigationSection groupsSection = buildGroupsSection(); sections.add(groupsSection); return sections; } private ResourceSearchView createResourceSearchView(ViewName viewName, Criteria initialCriteria) { return new ResourceSearchView(initialCriteria, viewName.getTitle(), viewName.getIcon().getIcon24x24Path()); } private ResourceSearchView createIgnoredResourceSearchView(ViewName viewName, Criteria initialCriteria) { return new ResourceSearchView(initialCriteria, viewName.getTitle(), viewName.getIcon().getIcon24x24Path()) { @Override protected boolean shouldShowIgnoreButton() { return false; } @Override protected boolean shouldShowUnignoreButton() { return true; } }; } private NavigationSection buildResourcesSection() { NavigationItem autodiscoveryQueueItem = new NavigationItem(ResourceAutodiscoveryView.VIEW_ID, new ViewFactory() { public Canvas createView() { return new ResourceAutodiscoveryView(); } }, this.globalPermissions.contains(Permission.MANAGE_INVENTORY)); autodiscoveryQueueItem.setRefreshRequired(true); NavigationItem allResourcesItem = new NavigationItem(PAGE_ALL_RESOURCES, new ViewFactory() { public Canvas createView() { return createResourceSearchView(PAGE_ALL_RESOURCES, null); } }); NavigationItem platformsItem = new NavigationItem(PAGE_PLATFORMS, new ViewFactory() { public Canvas createView() { Criteria initialCriteria = new Criteria(ResourceDataSourceField.CATEGORY.propertyName(), ResourceCategory.PLATFORM.name()); return createResourceSearchView(PAGE_PLATFORMS, initialCriteria); } }); NavigationItem topLevelServersItem = new NavigationItem(PAGE_SERVERS_TOP, new ViewFactory() { public Canvas createView() { Criteria initialCriteria = new Criteria(ResourceDataSourceField.CATEGORY.propertyName(), ResourceCategory.SERVER.name()); initialCriteria.addCriteria(ResourceDatasource.FILTER_PARENT_CATEGORY, ResourceCategory.PLATFORM.name()); return createResourceSearchView(PAGE_SERVERS_TOP, initialCriteria); } }); NavigationItem serversItem = new NavigationItem(PAGE_SERVERS, new ViewFactory() { public Canvas createView() { Criteria initialCriteria = new Criteria(ResourceDataSourceField.CATEGORY.propertyName(), ResourceCategory.SERVER.name()); return createResourceSearchView(PAGE_SERVERS, initialCriteria); } }); NavigationItem servicesItem = new NavigationItem(PAGE_SERVICES, new ViewFactory() { public Canvas createView() { Criteria initialCriteria = new Criteria(ResourceDataSourceField.CATEGORY.propertyName(), ResourceCategory.SERVICE.name()); return createResourceSearchView(PAGE_SERVICES, initialCriteria); } }); NavigationItem ignoredResourcesItem = new NavigationItem(PAGE_IGNORED_RESOURCES, new ViewFactory() { public Canvas createView() { Criteria initialCriteria = new Criteria(ResourceDataSourceField.INVENTORY_STATUS.propertyName(), InventoryStatus.IGNORED.name()); initialCriteria.addCriteria(ResourceDataSourceField.PARENT_INVENTORY_STATUS.propertyName(), InventoryStatus.COMMITTED.name()); return createIgnoredResourceSearchView(PAGE_IGNORED_RESOURCES, initialCriteria); } }); NavigationItem downServersItem = new NavigationItem(PAGE_UNAVAIL_SERVERS, new ViewFactory() { public Canvas createView() { Criteria initialCriteria = new Criteria(ResourceDataSourceField.AVAILABILITY.propertyName(), AvailabilityType.DOWN.name()); initialCriteria.addCriteria(ResourceDataSourceField.CATEGORY.propertyName(), ResourceCategory.SERVER.name()); return createResourceSearchView(PAGE_UNAVAIL_SERVERS, initialCriteria); } }); return new NavigationSection(RESOURCES_SECTION_VIEW_ID, autodiscoveryQueueItem, allResourcesItem, platformsItem, topLevelServersItem, serversItem, servicesItem, ignoredResourcesItem, downServersItem); } private NavigationSection buildGroupsSection() { NavigationItem dynagroupDefinitionsItem = new NavigationItem(PAGE_DYNAGROUP_DEFINITIONS, new ViewFactory() { public Canvas createView() { GroupDefinitionListView table = new GroupDefinitionListView(); table.setTitleString(PAGE_DYNAGROUP_DEFINITIONS.getTitle()); table.setTitleIcon(PAGE_DYNAGROUP_DEFINITIONS.getIcon().getIcon24x24Path() ); return table; } }, this.globalPermissions.contains(Permission.MANAGE_INVENTORY)); NavigationItem allGroupsItem = new NavigationItem(PAGE_ALL_GROUPS, new ViewFactory() { public Canvas createView() { return new ResourceGroupListView(null, PAGE_ALL_GROUPS.getTitle(), PAGE_ALL_GROUPS.getIcon().getIcon24x24Path()); } }); NavigationItem compatibleGroupsItem = new NavigationItem(PAGE_COMPATIBLE_GROUPS, new ViewFactory() { public Canvas createView() { ResourceGroupListView view = new ResourceGroupListView(new Criteria( ResourceGroupDataSourceField.CATEGORY.propertyName(), GroupCategory.COMPATIBLE.name()), PAGE_COMPATIBLE_GROUPS.getTitle(), PAGE_COMPATIBLE_GROUPS.getIcon().getIcon24x24Path()); return view; } }); NavigationItem mixedGroupsItem = new NavigationItem(PAGE_MIXED_GROUPS, new ViewFactory() { public Canvas createView() { ResourceGroupListView view = new ResourceGroupListView(new Criteria( ResourceGroupDataSourceField.CATEGORY.propertyName(), GroupCategory.MIXED.name()), PAGE_MIXED_GROUPS.getTitle(), PAGE_MIXED_GROUPS.getIcon().getIcon24x24Path()); return view; } }); NavigationItem problemGroupsItem = new NavigationItem(PAGE_PROBLEM_GROUPS, new ViewFactory() { public Canvas createView() { ResourceGroupListView view = new ResourceGroupListView(new Criteria("downMemberCount", "1"), PAGE_PROBLEM_GROUPS.getTitle() , PAGE_PROBLEM_GROUPS.getIcon().getIcon24x24Path()); view.setShowNewButton(false); return view; } }); return new NavigationSection(GROUPS_SECTION_VIEW_ID, allGroupsItem, dynagroupDefinitionsItem, compatibleGroupsItem, mixedGroupsItem, problemGroupsItem); } }