|
What this is
Other links
The source code
/* CVS ID: $Id: XMLMessage.java,v 1.1.1.1 2002/10/02 18:42:54 wastl Exp $ */
package net.wastl.webmail.xml;
import java.util.*;
import org.w3c.dom.*;
/*
* XMLMessage.java
*
* Created: Tue Apr 18 14:02:30 2000
*
* Copyright (C) 2000 Sebastian Schaffert
*
* 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; either version 2
* of the License, or (at your option) any later version.
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
/**
* Represents an XML message object (part of the XMLUserModel)
* @see XMLUserModel
*/
public class XMLMessage extends XMLMessagePart {
protected Element message;
public XMLMessage(Element message) {
super(message);
this.message=message;
}
public Element getMessageElement() {
return message;
}
public boolean messageCompletelyCached() {
NodeList nl=message.getElementsByTagName("PART");
return nl.getLength()>0;
}
public void prepareReply(String prefix_subject, String postfix_subject,
String prefix_message, String postfix_message) {
String subject=getHeader("SUBJECT");
// Test whether this is already a reply (prefixed with RE or AW)
if(!isReply(subject)) {
subject=prefix_subject+" "
+getHeader("SUBJECT")+" "
+postfix_subject;
}
setHeader("SUBJECT",subject);
XMLMessagePart firstpart=new XMLMessagePart(getFirstMessageTextPart(message));
firstpart.quoteContent();
firstpart.insertContent(prefix_message+"\n",0);
firstpart.addContent(postfix_message,0);
removeAllParts();
XMLMessagePart newmainpart=createPart("multi");
newmainpart.appendPart(firstpart);
}
public void prepareForward(String prefix_subject, String postfix_subject,
String prefix_message, String postfix_message) {
String subject=getHeader("SUBJECT");
subject=prefix_subject+" "
+getHeader("SUBJECT")+" "
+postfix_subject;
setHeader("SUBJECT",subject);
XMLMessagePart mainpart=null;
NodeList nl=message.getChildNodes();
for(int i=0;i<nl.getLength();i++) {
Element elem=(Element)nl.item(i);
if(elem.getTagName().equals("PART")) {
mainpart=new XMLMessagePart(elem);
break;
}
}
XMLMessagePart firstpart=new XMLMessagePart(getFirstMessageTextPart(message));
firstpart.insertContent(prefix_message+"\n",0);
firstpart.addContent(postfix_message,0);
removeAllParts();
XMLMessagePart newmainpart=createPart("multi");
newmainpart.appendPart(firstpart);
if(mainpart != null) {
Enumeration enum=mainpart.getParts();
while(enum.hasMoreElements()) {
newmainpart.appendPart((XMLMessagePart)enum.nextElement());
}
}
}
public Element getHeader() {
NodeList nl=message.getElementsByTagName("HEADER");
Element header=nl.getLength()==0?null:(Element)nl.item(0);
if(header == null) {
header=root.createElement("HEADER");
message.appendChild(header);
}
return header;
}
public String getHeader(String header) {
Element xml_header=getHeader();
NodeList nl=xml_header.getElementsByTagName(header);
Element element;
if(nl.getLength() == 0) {
element=root.createElement(header);
xml_header.appendChild(element);
} else {
element=(Element)nl.item(0);
}
return XMLCommon.getElementTextValue(element);
}
public void setHeader(String header, String value) {
Element xml_header=getHeader();
NodeList nl=xml_header.getElementsByTagName(header);
Element element;
if(nl.getLength() == 0) {
element=root.createElement(header);
xml_header.appendChild(element);
} else {
element=(Element)nl.item(0);
}
XMLCommon.setElementTextValue(element,value);
}
protected boolean isReply(String subject) {
String s=subject.toUpperCase();
return s.startsWith("RE") || s.startsWith("AW");
}
protected Element getFirstMessageTextPart(Element parent) {
NodeList nl=parent.getChildNodes();
// Modified by exce, start
/**
* Maybe here we should modify the algorithm:
* If no appropriate text/plain is found, try to search for text/html.
*/
// Modified by exce, end
for(int i=0;i<nl.getLength();i++) {
Element elem=(Element)nl.item(i);
if(elem.getTagName().equals("PART")) {
if(elem.getAttribute("type").equals("multi")) {
Element retval=getFirstMessageTextPart(elem);
if(retval!=null) {
return retval;
}
} else if(elem.getAttribute("type").equals("text")) {
return elem;
}
}
}
// Modified by exce, start
for(int i=0;i<nl.getLength();i++) {
Element elem=(Element)nl.item(i);
if(elem.getTagName().equals("PART")) {
if(elem.getAttribute("type").equals("multi")) {
Element retval=getFirstMessageTextPart(elem);
if(retval!=null) {
return retval;
}
} else if(elem.getAttribute("type").equals("html")) {
return elem;
}
}
}
// Modified by exce, end
return null;
}
public XMLMessagePart getFirstMessageTextPart() {
return new XMLMessagePart(getFirstMessageTextPart(message));
}
public XMLMessagePart getFirstMessageMultiPart() {
NodeList nl=message.getChildNodes();
for(int i=0;i<nl.getLength();i++) {
Element elem=(Element)nl.item(i);
if(elem.getTagName().equals("PART")) {
if(elem.getAttribute("type").equals("multi")) {
return new XMLMessagePart(elem);
}
}
}
return null;
}
} // XMLMessage
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.