package org.hyperic.hq.ui.json.action.escalation.crud; import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.Map; import javax.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hyperic.hq.bizapp.shared.EventsBoss; import org.hyperic.hq.bizapp.shared.action.EmailActionConfig; import org.hyperic.hq.bizapp.shared.action.SnmpActionConfig; import org.hyperic.hq.bizapp.shared.action.SyslogActionConfig; import org.hyperic.hq.common.SystemException; import org.hyperic.hq.context.Bootstrap; import org.hyperic.hq.escalation.server.session.Escalation; import org.hyperic.hq.events.ActionConfigInterface; import org.hyperic.hq.events.NoOpAction; import org.hyperic.hq.ui.action.BaseActionNG; import org.hyperic.hq.ui.json.action.JsonActionContextNG; import org.hyperic.util.StringUtil; import org.springframework.stereotype.Component; @Component(value = "saveActionNG") public class SaveActionNG extends BaseActionNG { private final Log _log = LogFactory.getLog(SaveActionNG.class); private InputStream inputStream; public InputStream getInputStream() { return inputStream; } public String execute() throws Exception { JsonActionContextNG context = this.setJSONContext(); ServletContext sctx = context.getServletContext(); ActionConfigInterface cfg; Map map = context.getParameterMap(); String action = ((String[]) map.get("action"))[0]; Integer escId = Integer.valueOf(((String[]) map.get("EscId"))[0]); EventsBoss eBoss = Bootstrap.getBean(EventsBoss.class); int sessId = context.getSessionId(); Escalation e = eBoss.findEscalationById(sessId, escId); long wait = Long.parseLong(((String[]) map.get("waittime"))[0]); if (action.equalsIgnoreCase("Email")) { cfg = makeEmailActionCfg(e, map, false); } else if (action.equalsIgnoreCase("SMS")) { cfg = makeEmailActionCfg(e, map, true); } else if (action.equalsIgnoreCase("Syslog")) { cfg = makeSyslogActionCfg(e, map); } else if (action.equalsIgnoreCase("SNMP")) { cfg = makeSNMPActionCfg(e, map); } else if (action.equalsIgnoreCase("noop")) { cfg = new NoOpAction(); // Yow. } else { throw new SystemException("Unknown action type [" + action + "]"); } eBoss.addAction(sessId, e, cfg, wait); inputStream = this.streamJSONResult(context); return null; } private ActionConfigInterface makeSyslogActionCfg(Escalation e, Map p) { String meta = ((String[]) p.get("meta"))[0]; String version = ((String[]) p.get("version"))[0]; String product = ((String[]) p.get("product"))[0]; return new SyslogActionConfig(meta, product, version); } private ActionConfigInterface makeSNMPActionCfg(Escalation e, Map p) { String address = ((String[]) p.get("snmpIP"))[0]; String oid = ((String[]) p.get("snmpOID"))[0]; String snmpTrapOID = null; if ((String[]) p.get("snmpTrapOID") != null) { snmpTrapOID = ((String[]) p.get("snmpTrapOID"))[0]; } String snmpNotificationMechanism = ((String[]) p .get("snmpNotificationMechanism"))[0]; String variableBindings = ((String[]) p.get("variableBindings"))[0]; return new SnmpActionConfig(snmpNotificationMechanism, address, snmpTrapOID, oid, variableBindings); } private ActionConfigInterface makeEmailActionCfg(Escalation e, Map p, boolean sms) { EmailActionConfig cfg = new EmailActionConfig(); String sType = ((String[]) p.get("who"))[0]; String nameVar; if (sType.equals("Users")) { cfg.setType(EmailActionConfig.TYPE_USERS); nameVar = "users"; } else if (sType.equals("Others")) { cfg.setType(EmailActionConfig.TYPE_EMAILS); nameVar = "emailinput"; } else if (sType.equals("Roles")) { cfg.setType(EmailActionConfig.TYPE_ROLES); nameVar = "roles"; } else { throw new SystemException("Unknown email type [" + sType + "]"); } String[] nameArr = (String[]) p.get(nameVar); List nameList = Arrays.asList(nameArr); cfg.setNames(StringUtil.implode(nameList, ",")); cfg.setSms(sms); return cfg; } }