⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlmailbean.java

📁 java web 开发,Java Xml 编程指南书籍源码
💻 JAVA
字号:
package xmlMail;

import java.util.*;
import java.io.*;
import java.sql.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import MyNa.utils.*;
import MyNa.xml.*;


public class XmlMailBean  extends XmlConfigBase  {
  Env beanEnv; // contains subbeans, including 
         // RowViewSources, MessageSenders, MessageMakers
  Env requestEnv; // given by servlet or JSP; temporary.
   // may be used, e.g., for rowViewSource.getRow(n);
  Logger lg;
  RowSeq rows; // result from rowViewSource
  RowViewSource rowViewSource;   String rowViewSourceName;
  MessageMaker messageMaker;     String messageMakerName;
  MessageSender messageSender;   String messageSenderName;
 
  String mbcmd;
  String mbresult;
  String errorMessage;
  String className; // should be xmlMail.XmlMailBean


  RowSeq messageList;  // filled by msgList;
  Env currentMessage;   // filled by msgShow

public XmlMailBean(){
  beanEnv=new Env(); requestEnv=new Env(); 
  currentMessage=new Env(); setMsgcontent("");
  lg=new Logger(); lg.clearLog();
  lg.logIt("XmlMailBean created at "+MiscDate.todaysDate());
}
public boolean hasError(){
  return errorMessage!=null && errorMessage.length()>0;
}
public void setInitDefs(Env E){
  lg.logIt("setInitDefs of XmlMailBean");
  beanEnv.addHashtable(E);
}

public void setStringArraysFromEnv(Env E){
  // at the moment, we are only concerned with columnLabels.
  Object ob=E.get("columnLabels");
  if(null==ob || !(ob instanceof String[])) return;
  setColumnLabels((String[])ob);
  }
public void setRequestEnv(Env E){requestEnv=E;} // jsp or servlet connection.

public void initBeanTree(){ // from requestEnv
  String S=initFromXmlFile(requestEnv.getStr("xmlInitFile","mailConfig.xml"),
                                        false,beanEnv); // NOT CHECKED HERE!
  lg.logIt("initresponse="+S+"\nresult:\n"+beanEnv.toStringRec());
  if(S.length()>0)setMiscError(S);
  if(hasError())return;
      // bean structure is initialized with defaults;
  initFromTopEnv(requestEnv); 
     // override/extend string defaults with html form info; this deals with
     // all kinds of simple strings, but not string arrays.
  setStringArraysFromEnv(requestEnv);
  lg.logIt("\n\n***\ninitFromTopEnv(requestEnv)\n"+requestEnv.toStringRec());
  messageMaker.setMessageSender(messageSender);
  initAliases(requestEnv);
  messageSender.startSession(); 
      // sender will manage the session, and in this case will share it
  beanEnv.put("msgSession", messageSender.getSession());
}

public void initAliases(Env E){
  Env subE=E.getEnv("rowViewSource");
  if(null!=subE && null!=rowViewSource)
    ((XmlConfig)rowViewSource).initFromEnv(subE);
  subE=E.getEnv("messageSender");
  if(null!=subE && null!=messageSender)
    ((XmlConfig)messageSender).initFromEnv(subE);
  subE=E.getEnv("messageMaker");
  if(null!=subE && null!=messageMaker)
    ((XmlConfig)messageMaker).initFromEnv(subE);

}
public void setMbcmd(String S){mbcmd=S; lg.logIt("mbcmd="+S);}
public void setMbresult(String S){mbresult=S; lg.logIt("mbresult="+S);}
public void setErrorMessage(String S){errorMessage=S;}

public void setMiscError(String S){
  setMbresult("miscError"); setErrorMessage(S);
  }

public void setColumnLabels(String[]A){
  rowViewSource.setColumnLabels(A);
}
public void setColumnLabels(String S){
  if(S!=null && S.length()>0)
  rowViewSource.setColumnLabels(S);
}

String[]savedColumnLabels,savedColumnTypes;

public void expandAndSaveColumns(){
  savedColumnLabels=rowViewSource.getColumnLabels();
  savedColumnTypes=rowViewSource.getColumnTypes();
  rowViewSource.setColumnLabels(MessageData.getAllLabels());
}
public void restoreColumns(){
  rowViewSource.setColumnTypes(savedColumnTypes);
  rowViewSource.setColumnLabels(savedColumnLabels);
}
public String getDbSource(){
  return((XmlConfig)rowViewSource).getString("dbSource");
}

public boolean inErrorState(){
  return errorMessage!=null && errorMessage.length()>0;
}


public void setString(String key,String val){
  if(key==null)return;
  if(key.equals("verbose"))setVerbose(val);
  else if(key.equals("debug"))setDebug(val);
  else if(key.equals("messageSenderName"))setMessageSenderName(val);
  else if(key.equals("messageMakerName"))setMessageMakerName(val);
  else if(key.equals("rowViewSourceName"))setRowViewSourceName(val);
  else if(key.equals("columnLabels"))setColumnLabels(val);
  else if(key.equals("mbcmd"))setMbcmd(val);
  else if(key.equals("class"))className=val;
  else lg.logIt("unknown or unpublished set: "+key+"!="+val);
}

public String[] getColumnLabels(){
  if(null==rowViewSource)return MessageData.getDefaultLabels();
  return rowViewSource.getColumnLabels();
}
public String[] getColumnValues(Env E){
   // called after msgShow,msgList.
  try{
    String[]columnLabels=getColumnLabels();
    String[]V=E.getStrSeq("columnValues");
    if(null!=V)return V;
    V=new String[columnLabels.length];
    for(int i=0;i<columnLabels.length;i++)
    V[i]=E.getStr(columnLabels[i]);
    return V;
 }catch(Exception ex){
    lg.logIt("XmlMailBean.getColumnValues: "+ex);
   return MessageData.getDefaultLabels();
   }
}

public String[] getColumnValues(){return getColumnValues(currentMessage);}

public String getMbresult(){return mbresult;}
public String getErrorMessage(){return errorMessage;}

public String getString(String S){return null;}

public RowSeq getRowList(){return rows;}

public Env getBeanEnv(){return beanEnv;}

public int getRowNum(){return rowViewSource.getRowNum();}
public String getMsgcontent(){return currentMessage.getStr("msgcontent");}
public void setMsgcontent(String S){currentMessage.put("msgcontent",S);}

public void setLoginError(String S){
  mbresult="loginError"; errorMessage=S;
}
public void doLogin(){
  try{
    initBeanTree(); // assume requestEnv is set.
    if(hasError())return;
    rowViewSource.initSession(beanEnv);   
    checkRVErr();
    if(hasError())return;
    msgList();
  }catch(Exception E){setMiscError("error in Login: "+Logger.stackTrace(E));}

}
public void doLogout(){
  setMbresult("logout");
  rowViewSource.close();
  messageSender.endSession();
  checkRVErr();
}
public void checkRVErr(){
  if(rowViewSource.hasError())
    setMiscError("rowViewSource err: "+
      rowViewSource.getErrorType()+"\n"+
      rowViewSource.getErrorMessage());
}
public void doCommand(Env requestEnv){
  try{
  setErrorMessage(null);
  setRequestEnv(requestEnv);
  initFromTopEnv(requestEnv); initAliases(requestEnv);
  lg.logIt("doCommand with env "+requestEnv.toStringRec());
  setMbcmd(requestEnv.getStr("mbcmd"));
  if(null==mbcmd)setMiscError("no mailbean command given");
  else if("login".equals(mbcmd))doLogin();
  else if("logout".equals(mbcmd))doLogout();
  else if("msgList".equals(mbcmd))msgList();
  else if("msgListSendForward".equals(mbcmd))msgListSendForward();
  else if("msgListOutputXML".equals(mbcmd))msgListOutputXML();
  else if("msgListSave2XML".equals(mbcmd))msgListSave2XMLFile();
  else if("msgListSave2DB".equals(mbcmd))msgListSave2DB();
  else if("msgShow".equals(mbcmd))msgShow();
  else if("msgSend".equals(mbcmd))msgSend();
  else if("msgDelete".equals(mbcmd))msgDelete();
  else setMiscError("unknown mailbean command ["+mbcmd+"]");
   }catch(Exception E){setMiscError("ERROR: "+Logger.stackTrace(E));}
}

public void msgList(){
  setMbresult("msgList");
  rows=rowViewSource.getRowList();
  checkRVErr();
}
public RowSeq getMsgList(){ // refresh with msgList() cmd
  return rows;
}
public void msgListSendForward(){
  setMbresult("msgForward");
  rowViewSource.sendTo("mail",messageMaker.getMsgtoaddr());
  checkRVErr();
}
public String outputTarget(){
  String target=messageMaker.getMsgtoaddr();
  if(target==null || target.length()==0)target=getDbSource();
  return target;
}
public void msgListOutputXML(){
  String target=outputTarget();
  try{
  setMbresult("msgListOutput");
  StringWriter sw=new StringWriter();
  RowSeq rE=rowViewSource.getAllColumnsRowList();
  checkRVErr();
  if(hasError())return;
  rE.toXML(sw,target,false);
  setMsgcontent(sw.toString());
  }catch(Exception ex){
   setMiscError("can't save XML to message "+target+"\n"+ex);
  }
}
public void msgListSave2XMLFile(){
  String target=outputTarget();
  try{
  setMbresult("msgListSave2XML");
  RowSeq rE=rowViewSource.getAllColumnsRowList();
  checkRVErr();
  if(hasError())return;
  FileWriter fw=new FileWriter(new File(target));
  rE.toXML(fw,target,false);
  fw.close();
  }catch(Exception ex){
   setMiscError("can't save XML to file "+target+"\n"+ex);
  }
}
public void msgListSave2DB(){
  String target=outputTarget();
  setMbresult("msgListSave2DB");
  try{ 
    boolean reset=false;
    RowSeq rE=rowViewSource.getAllColumnsRowList();
    checkRVErr();
    if(hasError())return;
    findDbConnection();
    rE.toDB(dbConnection,target,reset);
    freeDbConnection();
    checkRVErr();
  }catch(Exception ex){
   setMiscError("can't save XML to DB table "+
                 target+"\n"+Logger.stackTrace(ex));
  }
}
public void msgShow(){
  setMbresult("msgShow");
  currentMessage =rowViewSource.getRow(rowViewSource.getRowNum());
  checkRVErr(); 
}
public void msgSend(){
  setMbresult("messageSent");
  try{messageSender.sendMessage(messageMaker.getMessage());}
  catch(Exception E){
  setMiscError("failed to send msg; "+Logger.stackTrace(E));}
}
public void msgDelete(){
  setMbresult("msgDelete");
  rowViewSource.delRow(rowViewSource.getRowNum());
  checkRVErr();
}

public void setRowViewSourceName(String S){
// note that even at first, this is called _after_ the
// XmlConfig initFromEnv has instantiated the beans; that's
// just because the XmlConfig puts subbeans first.
  String[]columnLabels=getColumnLabels();
  Env beanE=beanEnv.getEnv(S);
  if(null==beanE){
     setMiscError("no such RowViewSource as "+S);
     return;
     }
  Object ob=beanE.get("theBeanItself");
  if(null==ob || !(ob instanceof RowViewSource)){
    setMiscError("there is no RowViewSource called "+S);
    return;
    }
  rowViewSourceName=S;
  rowViewSource=(RowViewSource)ob;
  if(null!=columnLabels)
    rowViewSource.setColumnLabels(Misc.stringArrayJoin(columnLabels,","));
 }

public void setMessageMakerName(String S){
  Env beanE=beanEnv.getEnv(S);
  if(null==beanE){
     setMiscError("no such MessageMaker as "+S);
     return;
     }
  Object ob=beanE.get("theBeanItself");
  if(null==ob || !(ob instanceof MessageMaker)){
    setMiscError("there is no MessageMaker called "+S);
    return;
    }
  messageMakerName=S;
  messageMaker=(MessageMaker)ob;
}

public void setMessageSenderName(String S){
  Env beanE=beanEnv.getEnv(S);
  if(null==beanE){
     setMiscError("no such MessageSender as "+S);
     return;
     }
  Object ob=beanE.get("theBeanItself");
  if(null==ob || !(ob instanceof MessageSender)){
    setMiscError("there is no MessageSender called "+S);
    return;
    }
  messageSenderName=S;
  messageSender=(MessageSender)ob;
  if(null!=messageMaker)
    messageMaker.setMessageSender(messageSender);
    // can't count on this for init; also do it in doLogin.
}

/*  This is where connection pooling code would go */

Connection dbConnection;
boolean dbDriverHasBeenInitialized=false;

public void findDbConnection()throws Exception{
   Env theEnv=beanEnv.getEnv("databaseSource");
  // this may or may not be the rowViewSource at the moment.
  String dbDriver=theEnv.getStr("dbDriver","sun.jdbc.odbc.JdbcOdbcDriver");
  String dbUrl=theEnv.getStr("dbUrl","jdbc:odbc:PHONEBOOK");
  String dbUser=theEnv.getStr("dbUser","JohnSmith");
  String dbPwd=theEnv.getStr("dbPwd","password");
  if(!dbDriverHasBeenInitialized){
    lg.logIt("about to get driver "+dbDriver);
    Class.forName(dbDriver);
    dbDriverHasBeenInitialized=true;
  }
  dbConnection=DriverManager.getConnection(dbUrl,dbUser,dbPwd);
}
public void freeDbConnection()throws Exception{
  dbConnection.close();
}

}
/* 11/06/99
 the overall XmlMail package is structured as a
browser-based email package which uses database tables
for storage and remote connections as needed. It isn't a
full-featured email package, but it allows for folder
selection (if supported by the provider; pop3 allows only
the INBOX, but imap goes further), for individual messages
and message-summary lists, for deletion and saving and 
forwarding (in groups).
  This XmlMailBean is a manager class, providing data for
JSP presentation, but it is intended to be usable without
modification in a non-JSP context: it knows nothing about
JSP. It doesn't actually know anything about mail, either. 

   The design is interesting for two reasons: first, its
initialization depends not only on JSP property-settings,
but on a recursive initialization-by-XML process in which
the XmlMailBean constructs itself at the beginning of
a session. We want to provide defaults in the XML; that's
easy to make recursive, i.e. the XmlMailBean initializes
itself on a DOM tree and passes subtrees to subbeans. We
also want to allow HTML overrides, and that's a bit harder;
we note that
<input type=text name="alpha_beta_gamma" value="12345">,
will automatically call on the bean's
  setAlpha_beta_gamma("1234"); method,
and we define a convention in which
  setAlpha_beta_gamma(S) is alpha.beta.setGamma(S). Similarly
<input type=text name="alpha_1_beta" value="3">
<input type=text name="alpha_2_beta" value="4">
will call on alpha[1].setBeta("3") and alpha[2].setBeta("4");

These must be done _after_ the xml initialization, since
these structures may not exist until then. Note that it
requires that underscores be used only for this purpose
within html names.


*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -