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

📄 xmlusermodel.java

📁 这是个JAVA开发的WEB邮箱
💻 JAVA
字号:
/* CVS ID: $Id: XMLUserModel.java,v 1.5 2000/12/30 10:39:09 wastl Exp $ */package net.wastl.webmail.xml;import java.util.*;import org.w3c.dom.*;import org.apache.xerces.dom.*;import org.apache.xerces.parsers.*;import net.wastl.webmail.server.*;import net.wastl.webmail.exceptions.*;/* * XMLUserModel.java * * Created: Tue Mar 21 15:08:18 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. * *//** * * Mainly consists of a DOM that represents all of the data in the user's session. * On subtrees, there are the SYSDATA and the USERDATA DOM trees (among other stuff like folder list, * message list, etc) * * Many methods here are synchronized but that shouldn't hurt performance too much since the cases where several * Threads access the model are rare anyway * * @author Sebastian Schaffert * @version */public class XMLUserModel extends XMLGenericModel {        protected Element usermodel;    protected Element userdata;    public XMLUserModel(WebMailServer parent, Element rsysdata, Element ruserdata) {	super(parent,rsysdata);	usermodel=root.getDocumentElement();	this.userdata=ruserdata;		update();	    }    protected void initRoot() {	// Create a new usermodel from the template file	try {	    parser.parse("file://"+parent.getProperty("webmail.xml.path")+			 System.getProperty("file.separator")+"usermodel_template.xml");// 	    parser.parse(parent.getProperty("webmail.xml.path")+// 			 System.getProperty("file.separator")+"usermodel_template.xml");	} catch(Exception ex) {	    System.err.println("Error parsing WebMail UserModel template "+ex.getMessage());	    ex.printStackTrace();	}	root=parser.getDocument();    }        public synchronized void update() {	// Insert the sysdata and userdata objects into the usermodel tree	super.update();	try {	    NodeList nl=root.getElementsByTagName("USERDATA");	    usermodel.replaceChild(root.importNode(userdata,true),nl.item(0));	} catch(ArrayIndexOutOfBoundsException ex) {	    System.err.println("The WebMail UserModel template file didn't contain a USERDATA tag.");	} catch(DOMException ex) {	    System.err.println("Something went wrong with the XML user model.");	}    }    public synchronized Element createFolder(String id,String name,boolean holds_folders, boolean holds_messages) {	Element folder=root.createElement("FOLDER");	folder.setAttribute("id",id);	folder.setAttribute("name",name);	folder.setAttribute("holds_folders",holds_folders+"");	folder.setAttribute("holds_messages",holds_messages+"");	return folder;    }    public synchronized Element getFolder(String id) {	return XMLCommon.getElementByAttribute(usermodel,"FOLDER","id",id);    }    public synchronized Element createMessageList() {	Element messagelist = root.createElement("MESSAGELIST");	return messagelist;    }    /**     * Get messagelist for folder. Create if necessary.     */    public synchronized Element getMessageList(Element folder) {	NodeList nl=folder.getChildNodes();	Element messagelist=null;	for(int i=0;i<nl.getLength();i++) {	    Element tmp=(Element)nl.item(i);	    if(tmp.getTagName().equals("MESSAGELIST")) {		messagelist=tmp;		break;	    }	}	if(messagelist == null) {	    messagelist=createMessageList();	    folder.appendChild(messagelist);	}	return messagelist;    }    public synchronized void removeMessageList(Element folder) {	XMLCommon.genericRemoveAll(folder,"MESSAGELIST");    }    /**     * Check whether we already fetched this message. This can save a lot of time and CPU.     */    public synchronized boolean messageCached(Element folder, String msgid) {	NodeList nl=folder.getElementsByTagName("MESSAGE");	Element message=null;	for(int i=0;i<nl.getLength();i++) {	    Element test=(Element)nl.item(i);	    if(test.getAttribute("msgid").equals(msgid)) {		message=test;		break;	    }	}	return message!=null;    }    public synchronized XMLMessage getMessage(Element folder,String msgnr, String msgid) {	NodeList nl=folder.getElementsByTagName("MESSAGE");	Element message=null;	for(int i=0;i<nl.getLength();i++) {	    Element test=(Element)nl.item(i);	    if(test.getAttribute("msgid").equals(msgid)) {		message=test;		break;	    }	}	if(message == null) {	    message=root.createElement("MESSAGE");	    message.setAttribute("msgid",msgid);	    Element msglist=getMessageList(folder);	    msglist.appendChild(message);	}	message.setAttribute("msgnr",msgnr);	return new XMLMessage(message);    }    /**     * Return the WORK element that stores messages that are currently edited.     */    public synchronized XMLMessage getWorkMessage() {	NodeList nl=usermodel.getElementsByTagName("WORK");	Element work;	if(nl.getLength()>0) {	    work=(Element)nl.item(0);	} else {	    work=root.createElement("WORK");	    usermodel.appendChild(work);	}	nl=work.getElementsByTagName("MESSAGE");	XMLMessage message;	if(nl.getLength() > 0) {	    message = new XMLMessage((Element)nl.item(0));	} else {	    message=new XMLMessage(root.createElement("MESSAGE"));	    work.appendChild(message.getMessageElement());	    message.setAttribute("msgnr","0");	    message.setAttribute("msgid",WebMailServer.generateMessageID("webmailuser"));	    XMLMessagePart multipart=message.createPart("multi");	    multipart.createPart("text");	}	return message;    }    public synchronized void clearWork() {	NodeList nl=usermodel.getElementsByTagName("WORK");		if(nl.getLength() > 0) {	    Element work=(Element)nl.item(0);	    NodeList nl2=work.getChildNodes();	    Vector v=new Vector();	    for(int i=0;i<nl2.getLength();i++) {		v.addElement(nl2.item(i));	    }	    Enumeration enum=v.elements();	    while(enum.hasMoreElements()) {		work.removeChild((Node)enum.nextElement());	    }	}    }    /**     * Set the current work message (for forwarding and replying).     * Note that this method uses importNode, therefore the newly     * cloned message element is returned by this method.     */    public synchronized XMLMessage setWorkMessage(XMLMessage message) {	clearWork();	NodeList nl=usermodel.getElementsByTagName("WORK");	Element work;	if(nl.getLength()>0) {	    work=(Element)nl.item(0);	} else {	    work=root.createElement("WORK");	    usermodel.appendChild(work);	}		Element newmessage=(Element)root.importNode(message.getMessageElement(),true);	work.appendChild(newmessage);		return new XMLMessage(newmessage);    }	    public synchronized Element createMailhost(String name, String id,String url) {	Element mh=root.createElement("MAILHOST_MODEL");	mh.setAttribute("name",name);	mh.setAttribute("id",id);	if(url != null) {	    mh.setAttribute("url",url);	}	return mh;    }    /**     * Add a previously created Mailhost to the DOM.     * The Mailhost should already contain all the subfolders.:-)     */    public synchronized void addMailhost(Element mh) {	String name=mh.getAttribute("name");	Element elem=XMLCommon.getElementByAttribute(usermodel,"MAILHOST_MODEL","name",name);	if(elem == null) {	    usermodel.appendChild(mh);	} else {	    usermodel.replaceChild(mh,elem);	}    }    protected synchronized Element setCurrent(String type, String id) {	NodeList nl=usermodel.getElementsByTagName("CURRENT");	Element current=null;	for(int i=0;i<nl.getLength();i++) {	    if(((Element)nl.item(i)).getAttribute("type").equals(type)) {		current=(Element)nl.item(i);		break;	    }	}	if(current == null) {	    current = root.createElement("CURRENT");	    current.setAttribute("type",type);	    usermodel.appendChild(current);	}	current.setAttribute("id",id);	return current;    }    protected synchronized Element getCurrent(String type, String id) {	NodeList nl=usermodel.getElementsByTagName("CURRENT");	Element current=null;	for(int i=0;i<nl.getLength();i++) {	    if(((Element)nl.item(i)).getAttribute("type").equals(type)) {		current=(Element)nl.item(i);		break;	    }	}	return current;    }    public Element setCurrentMessage(String id) {	return setCurrent("message",id);    }    public Element setCurrentFolder(String id) {	return setCurrent("folder",id);    }    public Element getCurrentMessage(String id) {	return getCurrent("message",id);    }    public Element getCurrentFolder(String id) {	return getCurrent("folder",id);    }} // XMLUserModel

⌨️ 快捷键说明

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