/*
* 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.admin.config;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.composite.ResourceTypeTemplateCountComposite;
import org.rhq.enterprise.gui.legacy.AttrConstants;
import org.rhq.enterprise.gui.legacy.Portal;
import org.rhq.enterprise.gui.legacy.action.BaseDispatchAction;
import org.rhq.enterprise.gui.util.WebUtility;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
/**
* Populate the list of types to configure metric defaults
*/
public class EditDefaultsAction extends BaseDispatchAction {
ResourceTypeManagerLocal typeMgr = LookupUtil.getResourceTypeManager();
Map<Integer, ResourceTypeTemplateCountComposite> compositeMap;
public ActionForward getMonitorDefaults(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse resp) throws Exception {
Subject subject = WebUtility.getSubject(request);
String viewMode = WebUtility.getOptionalRequestParameter(request, "viewMode", null);
// Next two are needed to sort the result by name - could be done in the DB
List<ResourceType> platformTypes = null;
List<ResourceType> serverTypes = null;
if ("existing".equals(viewMode)) {
platformTypes = typeMgr.getUtilizedResourceTypesByCategory(subject, ResourceCategory.PLATFORM, null);
serverTypes = typeMgr.getUtilizedResourceTypesByCategory(subject, ResourceCategory.SERVER, null);
} else {
platformTypes = typeMgr.getAllResourceTypesByCategory(subject, ResourceCategory.PLATFORM);
serverTypes = typeMgr.getAllResourceTypesByCategory(subject, ResourceCategory.SERVER);
}
/*
* platform-services do not have duplicates in the ResourceType table, therefore we only need
* to get a single set of them if there is even one platform that should be displayed on the UI
*/
Map<Integer, SortedSet<ResourceType>> platformServices = new HashMap<Integer, SortedSet<ResourceType>>();
if (platformTypes.size() > 0) {
// if you deployed the perfplugin, the list of services will be 0 - if we see 0 services come back,
// just ask for the next platform as a courtesy to developers who have perfplugin platform deployed
for (ResourceType platformTypeEntry : platformTypes) {
platformServices = typeMgr.getChildResourceTypesForResourceTypes(Arrays.asList(platformTypeEntry));
if (platformServices.size() > 0) {
break; // we got them, no need to keep going
}
}
}
/*
* on the other hand, we want to get the entire map of sets for descendants of server types
*/
Map<Integer, SortedSet<ResourceType>> services = typeMgr.getChildResourceTypesForResourceTypes(serverTypes);
initCompositeMap();
request.setAttribute(AttrConstants.ALL_PLATFORM_TYPES_ATTR, convertToComposite(platformTypes));
request.setAttribute(AttrConstants.PLATFORM_SERVICES_ATTR, convertToComposite(platformServices));
request.setAttribute(AttrConstants.ALL_SERVER_TYPES_ATTR, convertToComposite(serverTypes));
request.setAttribute(AttrConstants.SERVICES_ATTR, convertToComposite(services));
request.setAttribute("viewMode", viewMode);
Portal p = Portal.createPortal("admin.home.ResourceTemplates", ".admin.config.EditMonitorConfig");
request.setAttribute(AttrConstants.PORTAL_KEY, p);
return null;
}
@Override
protected Properties getKeyMethodMap() {
Properties map = new Properties();
map.setProperty("monitor", "getMonitorDefaults");
return map;
}
private List<ResourceTypeTemplateCountComposite> convertToComposite(List<ResourceType> intermediates) {
List<ResourceTypeTemplateCountComposite> results = new ArrayList<ResourceTypeTemplateCountComposite>();
for (ResourceType next : intermediates) {
results.add(compositeMap.get(next.getId()));
}
return results;
}
private Map<Integer, SortedSet<ResourceTypeTemplateCountComposite>> convertToComposite(
Map<Integer, SortedSet<ResourceType>> intermediates) {
Map<Integer, SortedSet<ResourceTypeTemplateCountComposite>> results = new HashMap<Integer, SortedSet<ResourceTypeTemplateCountComposite>>();
for (Integer key : intermediates.keySet()) {
SortedSet<ResourceTypeTemplateCountComposite> composites = new TreeSet<ResourceTypeTemplateCountComposite>();
results.put(key, composites);
SortedSet<ResourceType> types = intermediates.get(key);
for (ResourceType next : types) {
composites.add(compositeMap.get(next.getId()));
}
}
return results;
}
private void initCompositeMap() {
compositeMap = typeMgr.getTemplateCountCompositeMap();
List<String> duplicateTypeNames = typeMgr.getDuplicateTypeNames();
for (ResourceTypeTemplateCountComposite composite : compositeMap.values()) {
if (duplicateTypeNames.contains(composite.getType().getName())) {
composite.setPluginInfo("(" + composite.getType().getPlugin() + " Plugin)");
}
}
}
}