/*
* 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.common.monitor.alerts.config;
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.util.StringUtil;
import org.rhq.enterprise.gui.legacy.Constants;
import org.rhq.enterprise.gui.legacy.Portal;
import org.rhq.enterprise.gui.legacy.Portlet;
import org.rhq.enterprise.gui.legacy.action.resource.ResourceController;
import org.rhq.enterprise.gui.legacy.action.resource.common.monitor.alerts.AlertDefUtil;
import org.rhq.enterprise.gui.legacy.exception.ParameterNotFoundException;
import org.rhq.enterprise.gui.legacy.util.ActionUtils;
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.RHQConstants;
import org.rhq.enterprise.server.util.LookupUtil;
/**
* A dispatcher for the alerts portal.
*/
public class PortalAction extends ResourceController {
protected static Log log = LogFactory.getLog(PortalAction.class);
private static Properties keyMethodMap = new Properties();
static {
keyMethodMap.setProperty(Constants.MODE_LIST, "listDefinitions");
keyMethodMap.setProperty(Constants.MODE_VIEW, "listDefinitions");
keyMethodMap.setProperty(Constants.MODE_NEW, "newDefinition");
keyMethodMap.setProperty("editProperties", "editDefinitionProperties");
keyMethodMap.setProperty("editConditions", "editDefinitionConditions");
keyMethodMap.setProperty("editControlAction", "editDefinitionControlAction");
keyMethodMap.setProperty("viewRoles", "viewDefinitionRoles");
keyMethodMap.setProperty("viewUsers", "viewDefinitionUsers");
keyMethodMap.setProperty("addRoles", "addRolesDefinitions");
keyMethodMap.setProperty("addUsers", "addUsersDefinitions");
}
@Override
protected Properties getKeyMethodMap() {
return keyMethodMap;
}
/**
* We override this in case the resource has been deleted ... simply ignore that fact.
*/
@Override
protected void setResource(HttpServletRequest request) throws Exception {
try {
super.setResource(request);
} catch (ParameterNotFoundException e) {
log.warn("No resource found.");
}
}
private void setTitle(HttpServletRequest request, Portal portal, String titleName) throws Exception {
Resource resource = RequestUtils.getResource(request);
ResourceGroup group = RequestUtils.getResourceGroupIfExists(request);
ResourceType type;
if (resource != null) {
// resource alert definition
type = resource.getResourceType();
} else if (group != null) {
// group alert definition
type = group.getResourceType();
} else {
// template alert definition
type = RequestUtils.getResourceType(request);
}
ResourceCategory category = type.getCategory();
titleName = StringUtil.replace(titleName, "platform", category.toString().toLowerCase());
portal.setName(titleName);
// if there's an alert definition available, set our second
// title parameter to its name
try {
AlertDefinition alertDef = AlertDefUtil.getAlertDefinition(request);
request.setAttribute(Constants.TITLE_PARAM2_ATTR, alertDef.getName());
} catch (ParameterNotFoundException e) {
// it's okay
log.trace("couldn't find alert definition: " + e.getMessage());
}
}
public ActionForward newDefinition(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
setResource(request);
Portal portal = Portal.createPortal();
setTitle(request, portal, "alert.config.platform.edit.NewAlertDef.Title");
portal.addPortlet(new Portlet(".events.config.new"), 1);
portal.setDialog(true);
request.setAttribute(Constants.PORTAL_KEY, portal);
return null;
}
public ActionForward editDefinitionProperties(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
setResource(request);
Portal portal = Portal.createPortal();
setTitle(request, portal, "alert.config.platform.edit.page.Title");
portal.addPortlet(new Portlet(".events.config.edit.properties"), 1);
portal.setDialog(true);
request.setAttribute(Constants.PORTAL_KEY, portal);
return null;
}
public ActionForward editDefinitionConditions(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
setResource(request);
Portal portal = Portal.createPortal();
setTitle(request, portal, "alert.config.platform.edit.condition.Title");
portal.addPortlet(new Portlet(".events.config.edit.conditions"), 1);
portal.setDialog(true);
request.setAttribute(Constants.PORTAL_KEY, portal);
return null;
}
public ActionForward editDefinitionControlAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
setResource(request);
Portal portal = Portal.createPortal();
setTitle(request, portal, "alerts.config.platform.EditControlAction.Title");
portal.addPortlet(new Portlet(".events.config.edit.controlaction"), 1);
portal.setDialog(true);
request.setAttribute(Constants.PORTAL_KEY, portal);
return null;
}
public ActionForward viewDefinitionRoles(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
setResource(request);
Portal portal = Portal.createPortal();
setTitle(request, portal, "alert.config.platform.props.ViewDef.roles.Title");
portal.addPortlet(new Portlet(".events.config.view.roles"), 1);
// JW - this shouldn't be a dialog ... portal.setDialog(true);
request.setAttribute(Constants.PORTAL_KEY, portal);
return null;
}
public ActionForward viewDefinitionUsers(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
setResource(request);
Portal portal = Portal.createPortal();
setTitle(request, portal, "alert.config.platform.props.ViewDef.users.Title");
portal.addPortlet(new Portlet(".events.config.view.users"), 1);
// JW - this shouldn't be a dialog ... portal.setDialog(true);
request.setAttribute(Constants.PORTAL_KEY, portal);
return null;
}
public ActionForward monitorConfigureAlerts(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
setResource(request);
Portal portal = Portal.createPortal();
portal.addPortlet(new Portlet(".events.config.list"), 1);
portal.setDialog(false);
request.setAttribute(Constants.PORTAL_KEY, portal);
return null;
}
public ActionForward listDefinitions(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
setResource(request);
super.setNavMapLocation(request, mapping, Constants.ALERT_CONFIG_LOC);
// clean out the return path
SessionUtils.resetReturnPath(request.getSession());
// set the return path
try {
setReturnPath(request, mapping);
} catch (ParameterNotFoundException pne) {
if (log.isDebugEnabled()) {
log.debug("", pne);
}
}
Portal portal = Portal.createPortal();
setTitle(request, portal, "alerts.config.platform.DefinitionList.Title");
portal.setDialog(false);
try {
RequestUtils.getStringParameter(request, Constants.APPDEF_RES_TYPE_ID);
portal.addPortlet(new Portlet(".admin.alerts.List"), 1);
} catch (ParameterNotFoundException e) {
portal.addPortlet(new Portlet(".events.config.list"), 1);
}
request.setAttribute(Constants.PORTAL_KEY, portal);
return null;
}
/**
* This sets the return path for a ResourceAction by appending the type and resource id to the forward url.
*
* @param request The current controller's request.
* @param mapping The current controller's mapping that contains the input.
*
* @exception ParameterNotFoundException if the type or id are not found
* @exception ServletException If there is not input defined for this form
*/
@Override
protected void setReturnPath(HttpServletRequest request, ActionMapping mapping) throws Exception {
HashMap parms = new HashMap();
int resourceId = RequestUtils.getResourceId(request);
parms.put(Constants.RESOURCE_ID_PARAM, resourceId);
try {
parms.put(Constants.ALERT_DEFINITION_PARAM, RequestUtils.getIntParameter(request,
Constants.ALERT_DEFINITION_PARAM));
parms.put(Constants.CHILD_RESOURCE_TYPE_ID_PARAM, WebUtility.getChildResourceTypeId(request));
} catch (ParameterNotFoundException pnfe) {
// that's ok!
log.trace("couldn't find parameter: " + pnfe.getMessage());
}
// sets the returnPath to match the mode we're in.
String mode = request.getParameter(Constants.MODE_PARAM);
parms.put(Constants.MODE_PARAM, mode);
String returnPath = ActionUtils.findReturnPath(mapping, parms);
SessionUtils.setReturnPath(request.getSession(), returnPath);
}
}