jsp页面调用哪个Linux的shell 脚本方法

import java.io.*;
import java.util.*;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.×;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hyperic.dao.DAOFactory;
import org.hyperic.hq.appdef.shared.AppdefEntityID;
import org.hyperic.hq.application.HQApp;
import org.hyperic.hq.authz.server.session.AuthzSubject;
import org.hyperic.hq.authz.server.session.AuthzSubjectManagerEJBImpl;
import org.hyperic.hq.authz.server.session.Resource;
import org.hyperic.hq.authz.server.session.ResourceDAO;
import org.hyperic.hq.authz.shared.AuthzSubjectManagerLocal;
import org.hyperic.hq.bizapp.shared.action.EmailActionConfig;
import org.hyperic.hq.escalation.server.session.Escalatable;
import org.hyperic.hq.escalation.server.session.EscalationStateChange;
import org.hyperic.hq.escalation.server.session.PerformsEscalations;
import org.hyperic.hq.events.ActionExecuteException;
import org.hyperic.hq.events.ActionExecutionInfo;
import org.hyperic.hq.events.ActionInterface;
import org.hyperic.hq.events.AlertDefinitionInterface;
import org.hyperic.hq.events.AlertInterface;
import org.hyperic.hq.events.InvalidActionDataException;
import org.hyperic.hq.events.Notify;
import org.hyperic.hq.hqu.rendit.RenditServer;
import org.hyperic.hq.measurement.MeasurementNotFoundException;
import org.hyperic.util.config.ConfigResponse;

public class EmailAction extends EmailActionConfig
    implements ActionInterface, Notify
{
    public static final String RES_NAME_HOLDER = "RES_NAME_REPL";
    public static final String RES_DESC_HOLDER = "RES_DESC_REPL";

    protected static String baseUrl = null;
    public static boolean smsPro = false;

    protected String phone = "";
    protected String mes = "";
    protected String rsna = "";
    protected String alna = "";
    protected String date = "";
  
    private Log _log = LogFactory.getLog(EmailAction.class);



    private AuthzSubjectManagerLocal subjMan;

    public EmailAction() {
    }

    protected AuthzSubjectManagerLocal getSubjMan() {
        if (subjMan == null) {
            subjMan = AuthzSubjectManagerEJBImpl.getOne();
        }
        return subjMan;
    }

    private String renderTemplate(String filename, Map params) {
        File templateDir = new File(HQApp.getInstance().getResourceDir(),
                                    "alertTemplates");
        File templateFile = new File(templateDir, filename);
        StringWriter output = new StringWriter();
        try {
            RenditServer.getInstance().renderTemplate(templateFile, params,
                                                      output);
           
            if (_log.isDebugEnabled())
                _log.debug("Template rendered\n" + output.toString());
        } catch(Exception e) {
            _log.warn("Unable to render template", e);
        }
        return output.toString();
    }

    private String createSubject(AlertDefinitionInterface alertdef,
                                 AlertInterface alert, Resource resource,
                                 String status) {
        Map params = new HashMap();
        params.put("resource", resource);
        params.put("alertDef", alertdef);
        params.put("alert", alert);
        params.put("status", status);
        params.put("isSms", new Boolean(isSms()));

        return renderTemplate("subject.gsp", params);
    }

    private String createText(AlertDefinitionInterface alertdef,
                              ActionExecutionInfo info, Resource resource,
                              AlertInterface alert, String templateName,
                              AuthzSubject user)
        throws MeasurementNotFoundException
    {
        Map params = new HashMap();
       
        params.put("alertDef", alertdef);
        params.put("alert", alert);
        params.put("action", info);
        params.put("resource", resource);
        params.put("user", user);
       
        return renderTemplate(templateName, params);
    }
   
    private AppdefEntityID getResource(AlertDefinitionInterface def) {
        return new AppdefEntityID(def.getAppdefType(), def.getAppdefId());
    }

    public void smsText(){

String tmp = "";
int i = 0x0a;
String sp = ""+(char)i;
tmp = mes.substring(mes.indexOf("Resource Name:")+14);
rsna = tmp.substring(0,tmp.indexOf(sp)).trim();
//rsna = mes.substring(mes.indexOf("Resource Name:")+14,mes.indexOf("- Alert Name")).trim();

tmp = mes.substring(mes.indexOf("Alert Name:")+11);
alna = tmp.substring(0,tmp.indexOf(sp)).trim();
//alna = mes.substring(mes.indexOf("Alert Name:")+11,mes.indexOf("- Alert Description")).trim();

tmp = mes.substring(mes.indexOf("Alert Date / Time:")+18);
date = tmp.substring(0,tmp.indexOf(sp)).trim();

//date = mes.substring(mes.indexOf("Alert Date / Time:")+18,mes.indexOf("- Triggering")).trim();

//return rsna+""+alna+""+date;
    }

    public void alertFile(String t){
FileOutputStream out = null;
PrintStream p = null;
try {
java.util.Date d=new java.util.Date();
java.text.SimpleDateFormat s= new java.text.SimpleDateFormat("yyyy-MM-dd HH;mm;ss");
String dateStr = s.format(d);
String fn = "c:\\sms\\alerts\\sms_Alert_"+dateStr+".log";
File f = new File(fn);
int i =0 ;
while(f.exists()){
i++;
fn = "c:\\sms\\alerts\\sms_Alert_"+dateStr+"_"+i+".log";
f = new File(fn);
}
out = new FileOutputStream(fn);
    p = new PrintStream(out);
}catch (Exception e) {

}
p.println(t);
try{
      p.close();
out.close();
}catch (Exception e) {

}

}

    public void outPutAlertSms(){

//FileInputStream in;
//PrintStream p;

try {
FileReader fr = new FileReader("c:\\sms\\smsConfig.txt");
BufferedReader br = new BufferedReader(fr);
String JAVA_path = br.readLine();
JAVA_path = JAVA_path.substring(JAVA_path.indexOf("=")+1);
//in = new FileInputStream("c:\\sms\\smsConfig.txt");
      // Connect print stream to the output stream
    //p = new PrintStream( out );
smsText();

/*----old sms code
//set the alert content
String alert = phone+"<br>"+rsna+"<br>"+alna+"<br>"+date;
alert = alert.replace(" ","<nbsp>");
//p.println ("the following sms  had sent ");

//p.println("the Alert Resource Name:"+rsna);
//p.println("the Alert Name:"+alna);
//p.println("the Alert date:"+date);
//p.println("the Alert:"+mes);

*/

//----new sms code
String alert = "Phone Numbers="+phone+"&"+"Resource Name="+rsna+"&"+"Alert Name="+alna+"&"+"Alert Date / Time="+date;
alertFile(alert);

//get the cmd dir envirment
// 生成一个临时文件来确定当前的工作路径,因为tomcat当时在做项目的时候混乱的找不到服务器的路径是什么,用这种方式解决  mark
File f = new File("path.txt");
String path = f.getAbsolutePath();
path = path.substring(0,path.indexOf("path.txt"));
File dir = new File(path); 
//set cmd
//String cmd = JAVA_path+"\\java -classpath c:\\sms SmsCenter "+alert;
//new sms code
String cmd = JAVA_path+"\\java -classpath c:\\sms SmsCenter good";

//path += "sms";
//p.println(cmd);

//call the sms center, set the alert
//Process   prs   =  Runtime.getRuntime().exec(cmd,null,dir);

//new sms code
//Process   prs   =  Runtime.getRuntime().exec(cmd,null,dir);

br.close();
fr.close();
//p.println(cmd);//print the cmd content
      //p.close();
//out.close();
} catch (Exception e) {
      _log.warn("output sms.log error"+mes, e);
    }

}

    public String execute(AlertInterface alert, ActionExecutionInfo info)
        throws ActionExecuteException
    {
        try {
            Map addrs = lookupEmailAddr();
           
            if (addrs.isEmpty()) {
                return "No valid users or emails found to send alert";
            }

            EmailFilter filter = new EmailFilter();

            AlertDefinitionInterface alertDef =
                alert.getAlertDefinitionInterface();
            AppdefEntityID appEnt = getResource(alertDef);

            ResourceDAO rDao = new ResourceDAO(DAOFactory.getDAOFactory());
            Resource resource = rDao.findByInstanceId(appEnt.getAuthzTypeId(),
                                                      appEnt.getId());

            String[] body = new String[addrs.size()];
            String[] htmlBody = new String[addrs.size()];
            EmailRecipient[] to = (EmailRecipient[])
                addrs.keySet().toArray(new EmailRecipient[addrs.size()]);
           
            for (int i = 0; i < to.length; i++) {
                AuthzSubject user = (AuthzSubject) addrs.get(to[i]);
                if (to[i].useHtml()) {
                    htmlBody[i] = createText(alertDef, info, resource, alert,
                                             "html_email.gsp", user);
                }
                body[i] = createText(alertDef, info, resource, alert,
                                     isSms() ? "sms_email.gsp" :
                                         "text_email.gsp", user);
mes += ":"+body[i];

            }
   
            filter.sendAlert(appEnt, to,
                             createSubject(alertDef, alert, resource, ""),
                             body, htmlBody, alertDef.getPriority(),
                             alertDef.isNotifyFiltered());
    outPutAlertSms();
            StringBuffer result = getLog(to);
            return result.toString();
        } catch (Exception e) {
            throw new ActionExecuteException(e);
        }
    }

    protected StringBuffer getLog(EmailRecipient[] to) {
        StringBuffer result = new StringBuffer(isSms() ? "SMS" : "Notified");
        // XXX: Should get this strings into a resource file
        switch (getType()) {
        case TYPE_USERS :
            result.append(" users: ");
            break;
        default :
        case TYPE_EMAILS :
            result.append(": ");
            break;
        }
       
        for (int i = 0; i < to.length; i++) {
            result.append(to[i].getAddress().getPersonal());
            if (i < to.length - 1) {
                result.append(", ");
            }
        }

        return result;
    }

    protected Map lookupEmailAddr()
        throws ActionExecuteException
    {
        // First, look up the addresses
        int i = 0;
        HashSet prevRecipients = new HashSet();
        Map validRecipients = new HashMap();
        for (Iterator it = getUsers().iterator(); it.hasNext(); i++) {
            try {
                InternetAddress addr;
                boolean useHtml = false;
                AuthzSubject who = null;
               
                switch (getType()) {
                case TYPE_USERS:
                    Integer uid = (Integer) it.next();
                    who = getSubjMan().getSubjectById(uid);
                   
                    if (who == null) {
                        _log.warn("User not found: " + uid);
                        continue;
                    }
    phone += who.getSMSAddress()+"|";
                    if (isSms()) {

                        addr = new InternetAddress(who.getSMSAddress());
                    } else {
                        addr = new InternetAddress(who.getEmailAddress());
                    }
                    addr.setPersonal(who.getName());
                    useHtml = isSms() ? false : who.isHtmlEmail();
                    break;
                default:
                case TYPE_EMAILS:
                    addr = new InternetAddress((String) it.next(), true);
                    addr.setPersonal(addr.getAddress());
                    break;
                }
               
                // Don't send duplicate notifications
                if (prevRecipients.add(addr)) {
                    validRecipients.put(new EmailRecipient(addr, useHtml), who);
                }
            } catch (AddressException e) {
                _log.warn("Mail address invalid", e);
                continue;
            } catch (UnsupportedEncodingException e) {
                _log.warn("Username encoding error", e);
                continue;
            } catch (Exception e) {
                _log.warn("Email lookup failed");
                _log.debug("Email lookup failed", e);
                continue;
            }
        }

        return validRecipients;
    }

    public void setParentActionConfig(AppdefEntityID ent, ConfigResponse cfg)
        throws InvalidActionDataException
    {
        init(cfg);
    }

    public void send(Escalatable alert, EscalationStateChange change,
                           String message, Set notified)
        throws ActionExecuteException
    {
        PerformsEscalations def = alert.getDefinition();
       
        Map addrs = lookupEmailAddr();

        EmailFilter filter = new EmailFilter();

        for (Iterator it = addrs.entrySet().iterator(); it.hasNext(); ) {
            Map.Entry entry = (Map.Entry) it.next();
            EmailRecipient rec = (EmailRecipient) entry.getKey();
           
            // Don't notify again if already notified
            if (notified.contains(rec.getAddress())) {
                it.remove();
                continue;
            }
           
            rec.setHtml(false);
            notified.add(rec.getAddress());
        }
        AlertDefinitionInterface defInfo = def.getDefinitionInfo();
        String[] messages = new String[addrs.size()];
        Arrays.fill(messages, message);
       
        EmailRecipient[] to = (EmailRecipient[])
            addrs.keySet().toArray(new EmailRecipient[addrs.size()]);

        AppdefEntityID appEnt = getResource(defInfo);
        ResourceDAO rDao = new ResourceDAO(DAOFactory.getDAOFactory());
        Resource resource = rDao.findByInstanceId(appEnt.getAuthzTypeId(),
                                                  appEnt.getId());

        filter.sendAlert(getResource(defInfo), to,
                         createSubject(defInfo, alert.getAlertInfo(), resource,
                                       change.getDescription()),
                         messages, messages, defInfo.getPriority(), false);
//outPutAlertFile();
    }
}

你可能感兴趣的:(java,shell)