XMLMessage.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:5k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /* CVS ID: $Id: XMLMessage.java,v 1.1 2000/04/18 13:13:38 wastl Exp $ */
  2. package net.wastl.webmail.xml;
  3. import java.util.*;
  4. import org.w3c.dom.*;
  5. import org.apache.xerces.dom.*;
  6. /*
  7.  * XMLMessage.java
  8.  *
  9.  * Created: Tue Apr 18 14:02:30 2000
  10.  *
  11.  * Copyright (C) 2000 Sebastian Schaffert
  12.  * 
  13.  * This program is free software; you can redistribute it and/or
  14.  * modify it under the terms of the GNU General Public License
  15.  * as published by the Free Software Foundation; either version 2
  16.  * of the License, or (at your option) any later version.
  17.  * 
  18.  * This program is distributed in the hope that it will be useful,
  19.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  * GNU General Public License for more details.
  22.  * 
  23.  * You should have received a copy of the GNU General Public License
  24.  * along with this program; if not, write to the Free Software
  25.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  26.  *
  27.  */
  28. /**
  29.  * Represents an XML message object (part of the XMLUserModel)
  30.  * @see XMLUserModel
  31.  */
  32. public class XMLMessage extends XMLMessagePart {
  33.     
  34.     protected Element message;
  35.     public XMLMessage(Element message) {
  36. super(message);
  37. this.message=message;
  38.     }
  39.     
  40.     public Element getMessageElement() {
  41. return message;
  42.     }
  43.     public boolean messageCompletelyCached() {
  44. NodeList nl=message.getElementsByTagName("PART");
  45. return nl.getLength()>0;
  46.     }
  47.     public void prepareReply(String prefix_subject, String postfix_subject,
  48.      String prefix_message, String postfix_message) {
  49. String subject=getHeader("SUBJECT");
  50. // Test whether this is already a reply (prefixed with RE or AW)
  51. if(!isReply(subject)) {
  52.     subject=prefix_subject+" "
  53. +getHeader("SUBJECT")+" "
  54. +postfix_subject;
  55. }
  56. setHeader("SUBJECT",subject);     
  57. XMLMessagePart firstpart=new XMLMessagePart(getFirstMessageTextPart(message));
  58. firstpart.quoteContent();
  59. firstpart.insertContent(prefix_message+"n",0);
  60. firstpart.addContent(postfix_message,0);
  61. removeAllParts();
  62. XMLMessagePart newmainpart=createPart("multi");
  63. newmainpart.appendPart(firstpart);
  64.     }
  65.     public void prepareForward(String prefix_subject, String postfix_subject,
  66.        String prefix_message, String postfix_message) {
  67. String subject=getHeader("SUBJECT");
  68. subject=prefix_subject+" "
  69.     +getHeader("SUBJECT")+" "
  70.     +postfix_subject;
  71. setHeader("SUBJECT",subject);     
  72. XMLMessagePart mainpart=null;
  73. NodeList nl=message.getChildNodes();
  74. for(int i=0;i<nl.getLength();i++) {
  75.     Element elem=(Element)nl.item(i);
  76.     if(elem.getTagName().equals("PART")) {
  77. mainpart=new XMLMessagePart(elem);
  78. break;
  79.     }
  80. }
  81. XMLMessagePart firstpart=new XMLMessagePart(getFirstMessageTextPart(message));
  82. firstpart.insertContent(prefix_message+"n",0);
  83. firstpart.addContent(postfix_message,0);
  84. removeAllParts();
  85. XMLMessagePart newmainpart=createPart("multi");
  86. newmainpart.appendPart(firstpart);
  87. if(mainpart != null) {
  88.     Enumeration enum=mainpart.getParts();
  89.     while(enum.hasMoreElements()) {
  90. newmainpart.appendPart((XMLMessagePart)enum.nextElement());
  91.     }
  92. }
  93.     }
  94.     public Element getHeader() {
  95. NodeList nl=message.getElementsByTagName("HEADER");
  96. Element header=nl.getLength()==0?null:(Element)nl.item(0);
  97. if(header == null) {
  98.     header=root.createElement("HEADER");
  99.     message.appendChild(header);
  100. }
  101. return header;
  102.     }
  103.     public String getHeader(String header) {
  104. Element xml_header=getHeader();
  105. NodeList nl=xml_header.getElementsByTagName(header);
  106. Element element;
  107. if(nl.getLength() == 0) {
  108.     element=root.createElement(header);
  109.     xml_header.appendChild(element);
  110. } else {
  111.     element=(Element)nl.item(0);
  112. }
  113. return XMLCommon.getElementTextValue(element);
  114.     }
  115.     public void setHeader(String header, String value) {
  116. Element xml_header=getHeader();
  117. NodeList nl=xml_header.getElementsByTagName(header);
  118. Element element;
  119. if(nl.getLength() == 0) {
  120.     element=root.createElement(header);
  121.     xml_header.appendChild(element);
  122. } else {
  123.     element=(Element)nl.item(0);
  124. }
  125. XMLCommon.setElementTextValue(element,value);
  126.     }
  127.     
  128.     protected boolean isReply(String subject) {
  129. String s=subject.toUpperCase();
  130. return s.startsWith("RE") || s.startsWith("AW");
  131.     }
  132.     protected Element getFirstMessageTextPart(Element parent) {
  133. NodeList nl=parent.getChildNodes();
  134. for(int i=0;i<nl.getLength();i++) {
  135.     Element elem=(Element)nl.item(i);
  136.     if(elem.getTagName().equals("PART")) {
  137. if(elem.getAttribute("type").equals("multi")) {
  138.     Element retval=getFirstMessageTextPart(elem);
  139.     if(retval!=null) {
  140. return retval;
  141.     }
  142. } else if(elem.getAttribute("type").equals("text")) {
  143.     return elem;
  144. }
  145.     }
  146. }
  147. return null;
  148.     }
  149.     public XMLMessagePart getFirstMessageTextPart() {
  150. return new XMLMessagePart(getFirstMessageTextPart(message));
  151.     }
  152.     public XMLMessagePart getFirstMessageMultiPart() {
  153. NodeList nl=message.getChildNodes();
  154. for(int i=0;i<nl.getLength();i++) {
  155.     Element elem=(Element)nl.item(i);
  156.     if(elem.getTagName().equals("PART")) {
  157. if(elem.getAttribute("type").equals("multi")) {
  158.     return new XMLMessagePart(elem);
  159. }
  160.     }
  161. }
  162. return null;
  163.     }
  164. } // XMLMessage