/* * 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.legacy.action.resource.hub; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.LabelValueBean; import org.apache.struts.util.MessageResources; import org.jetbrains.annotations.NotNull; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.plugin.Plugin; import org.rhq.core.domain.resource.InventorySummary; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.composite.ResourceComposite; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.legacy.Constants; import org.rhq.enterprise.gui.legacy.Portal; import org.rhq.enterprise.gui.legacy.WebUser; import org.rhq.enterprise.gui.legacy.action.BaseAction; import org.rhq.enterprise.gui.legacy.taglib.display.StringUtil; import org.rhq.enterprise.gui.legacy.util.HubUtils; import org.rhq.enterprise.gui.legacy.util.RequestUtils; import org.rhq.enterprise.gui.legacy.util.SessionUtils; import org.rhq.enterprise.gui.util.WebUtility; import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; /** * An <code>Action</code> that sets up the resource hub page (ResourceHub.jsp). * * @author Ian Springer */ public class ResourceHubPortalAction extends BaseAction { public static final int SELECTOR_GROUP_COMPAT = 1; public static final int SELECTOR_GROUP_ADHOC = 2; private static final String DEFAULT_RESOURCE_CATEGORY = ResourceCategory.PLATFORM.name(); private static final String DEFAULT_RESOURCE_NAME = null; private static final String HIERARCHY_SEPARATOR = " > "; private static final String ALL_RESOURCE_TYPES = null; private static final String ALL_PLUGINS = null; protected Log log = LogFactory.getLog(ResourceHubPortalAction.class.getName()); private MessageResources messages; private ResourceTypeManagerLocal resourceTypeManager = LookupUtil.getResourceTypeManager(); private static String CHARSET = "UTF-16"; // ---------------------------------------------------- Public Methods /** * Set up the Resource Hub portal. */ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { messages = getResources(request); ResourceHubForm hubForm = (ResourceHubForm) form; String searchExpression = hubForm.getKeywords(); if (searchExpression != null && searchExpression.equals("Resource Name")) { searchExpression = null; // user didn't type a filter, just selected a category and clicked 'GO' } String category = hubForm.getResourceCategory(); String subtab = "all"; try { ResourceCategory.valueOf(category.toUpperCase()); subtab = category.toLowerCase(); } catch (Exception e) { subtab = "hub"; } String url = "/rhq/inventory/browseResources.xhtml?subtab=" + subtab; if (searchExpression != null && !searchExpression.trim().equals("")) { url += "&search=name=" + searchExpression; } response.sendRedirect(url); org.rhq.core.domain.util.PageControl pageControl = WebUtility.getPageControl(request); Subject subject = RequestUtils.getSubject(request); HttpSession session = request.getSession(); WebUser user = SessionUtils.getWebUser(request.getSession()); // Setup whether we're displaying list view or chart view. HubUtils.initView(hubForm, user); // Find resources specified by category and potentially type. // Collect query params and replace invalid ones with defaults. String resourceName = getResourceName(request, hubForm); String resourceType = ALL_RESOURCE_TYPES; if ((hubForm.getResourceType() != null) && !hubForm.getResourceType().trim().equals("")) { resourceType = decode(hubForm.getResourceType()); } if ((hubForm.getResourceCategory() == null) || hubForm.getResourceCategory().equals("")) { hubForm.setResourceCategory(DEFAULT_RESOURCE_CATEGORY); } ResourceCategory resourceCategory = ResourceCategory.valueOf(hubForm.getResourceCategory()); String pluginName = ALL_PLUGINS; if ((hubForm.getPlugin() != null) && !hubForm.getPlugin().trim().equals("")) { pluginName = decode(hubForm.getPlugin()); } PageList<ResourceComposite> resources = LookupUtil.getResourceManager().findResourceComposites(subject, resourceCategory, resourceType, pluginName, null, hubForm.getKeywords(), true, pageControl); request.setAttribute(Constants.ALL_RESOURCES_ATTR, resources); initResourceTypesAndPluginsPulldownMenu(hubForm, subject, resourceCategory, resourceName, resourceType, pluginName); request.setAttribute(Constants.ALL_RESOURCES_CONTROLLABLE, new ArrayList()); initInventorySummary(subject, request); SessionUtils.resetReturnPath(request.getSession()); request.setAttribute(Constants.PORTAL_KEY, Portal .createPortal("resource.hub.ResourceHubTitle", ".resource.hub")); String navHierarchy = buildResourceNavHierarchy(resourceCategory, resourceType); request.setAttribute(Constants.INVENTORY_HIERARCHY_ATTR, navHierarchy); return returnSuccess(request, mapping); } private String buildResourceNavHierarchy(ResourceCategory resourceCategory, String resourceTypeName) { String navHierarchy; // Start the navHierarchy with the resource category. navHierarchy = StringUtil.toUpperCaseAt(resourceCategory.toString(), 0) + "s" + HIERARCHY_SEPARATOR; if (resourceTypeName != null) { navHierarchy += resourceTypeName; } else { navHierarchy += "All " + StringUtil.toUpperCaseAt(resourceCategory.toString(), 0) + "s"; } return navHierarchy; } private void initInventorySummary(Subject user, HttpServletRequest request) throws org.rhq.enterprise.server.auth.SessionNotFoundException, org.rhq.enterprise.server.auth.SessionTimeoutException, java.rmi.RemoteException { InventorySummary summary = LookupUtil.getResourceBoss().getInventorySummary(user); request.setAttribute(Constants.RESOURCE_SUMMARY_ATTR, summary); } private String getResourceName(HttpServletRequest request, ResourceHubForm hubForm) { String jsInserted = messages.getMessage("resource.hub.search.KeywordSearchText"); String resourceName = hubForm.getKeywords(); if ((resourceName != null) && (resourceName.equals("") || resourceName.equals(jsInserted))) { resourceName = DEFAULT_RESOURCE_NAME; hubForm.setKeywords(resourceName); } return resourceName; } protected void initResourceTypesAndPluginsPulldownMenu(ResourceHubForm hubForm, Subject subject, ResourceCategory resourceCategory, String nameFilter, String typeName, String pluginName) throws Exception { // Set the first entry in the menu to the label "All <ResourceCategory> Types". hubForm.addType(buildResourceTypeMenuCategoryLabel(resourceCategory)); List<String> resourceTypeNames = resourceTypeManager.getUtilizedResourceTypeNamesByCategory(subject, resourceCategory, nameFilter, pluginName); for (String resourceTypeName : resourceTypeNames) { hubForm.addType(new LabelValueBean(resourceTypeName, encode(resourceTypeName))); } // Set the first entry in the menu to the label "All Plugins Types" hubForm.addPlugin(new LabelValueBean(messages.getMessage("resource.hub.filter.AllPlugins"), "")); List<Plugin> plugins = LookupUtil.getPluginManager().getPluginsByResourceTypeAndCategory(typeName, resourceCategory); for (Plugin plugin : plugins) { hubForm.addPlugin(new LabelValueBean(plugin.getDisplayName(), encode(plugin.getName()))); } } protected LabelValueBean buildResourceTypeMenuCategoryLabel(@NotNull ResourceCategory resourceCategory) { String key = null; switch (resourceCategory) { case PLATFORM: { key = "resource.hub.filter.AllPlatformTypes"; break; } case SERVER: { key = "resource.hub.filter.AllServerTypes"; break; } case SERVICE: { key = "resource.hub.filter.AllServiceTypes"; break; } } LabelValueBean menuLabel = new LabelValueBean(messages.getMessage(key), ""); return menuLabel; } private String encode(String parameter) { return parameter.replaceAll(" ", "_"); } private String decode(String parameter) { return parameter.replaceAll("_", " "); } }