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

WEB邮件程序

开发平台:

C/C++

  1. /* CVS ID: $Id: XMLUserModel.java,v 1.3 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. import org.apache.xerces.parsers.*;
  7. import net.wastl.webmail.server.*;
  8. /*
  9.  * XMLGenericModel.java
  10.  *
  11.  * Created: Thu May  4 15:53:12 2000
  12.  *
  13.  * Copyright (C) 2000 Sebastian Schaffert
  14.  * 
  15.  * This program is free software; you can redistribute it and/or
  16.  * modify it under the terms of the GNU General Public License
  17.  * as published by the Free Software Foundation; either version 2
  18.  * of the License, or (at your option) any later version.
  19.  * 
  20.  * This program is distributed in the hope that it will be useful,
  21.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23.  * GNU General Public License for more details.
  24.  * 
  25.  * You should have received a copy of the GNU General Public License
  26.  * along with this program; if not, write to the Free Software
  27.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  28.  *
  29.  */
  30. /**
  31.  * A generic representation of WebMail data. Contains mainly state information 
  32.  * and the system configuration
  33.  *
  34.  * @author Sebastian Schaffert
  35.  * @version
  36.  */
  37. public class XMLGenericModel  {
  38.     protected Document root;
  39.     protected Element sysdata;
  40.     protected Element statedata;
  41.     protected WebMailServer parent;
  42.     protected long current_id=0;
  43.     protected DOMParser parser;
  44.    
  45.     public XMLGenericModel(WebMailServer parent, Element rsysdata) {
  46. this.parent=parent;
  47. parser=new DOMParser(); 
  48. initRoot();
  49. statedata=root.createElement("STATEDATA");
  50. NodeList nl=root.getDocumentElement().getElementsByTagName("STATEDATA");
  51. if(nl.getLength() > 0) {
  52.     System.err.println("*** Warning: Webmail usermodel template contained a STATEDATA tag, although this should only be created at runtime!");
  53.     root.getDocumentElement().replaceChild(statedata,nl.item(0));
  54. } else {
  55.     root.getDocumentElement().appendChild(statedata);
  56. }
  57.     
  58. this.sysdata=rsysdata;
  59.     }
  60.     
  61.     protected void initRoot() {
  62. // Create a new usermodel from the template file
  63. try {
  64.     parser.parse(parent.getProperty("webmail.xml.path")+
  65.  System.getProperty("file.separator")+"generic_template.xml");
  66. } catch(Exception ex) {
  67.     System.err.println("Error parsing WebMail UserModel template "+ex.getMessage());
  68.     ex.printStackTrace();
  69. }
  70. root=parser.getDocument();
  71.     }
  72.     public Document getRoot() {
  73. return root;
  74.     }
  75.     public Element getStateData() {
  76. return statedata;
  77.     }
  78.     public void init() {
  79. setStateVar("base uri",parent.getBasePath());
  80. setStateVar("img base uri",parent.getImageBasePath());
  81. setStateVar("webmail version",parent.getVersion());
  82. setStateVar("operating system",System.getProperty("os.name")+" "+
  83.     System.getProperty("os.version")+"/"+System.getProperty("os.arch"));
  84. setStateVar("java virtual machine",System.getProperty("java.vendor")+" "+
  85.     System.getProperty("java.vm.name")+" "+System.getProperty("java.version"));
  86.     }
  87.     public void update() {
  88. // Insert the sysdata and userdata objects into the usermodel tree
  89. try {
  90.     NodeList nl=root.getElementsByTagName("SYSDATA");
  91.     root.getDocumentElement().replaceChild(root.importNode(sysdata,true),nl.item(0));
  92. } catch(ArrayIndexOutOfBoundsException ex) {
  93.     System.err.println("The WebMail GenericModel template file didn't contain a SYSDATA tag.");
  94. } catch(DOMException ex) {
  95.     System.err.println("Something went wrong with the XML generic model.");
  96. }
  97.     }
  98.     /**
  99.      * Create a unique ID.
  100.      * Important: This returns a new Unique ID within this session.
  101.      * It should be used to generate IDs for Folders and messages so that they can be easily referenced
  102.      */
  103.     public String getNextID() {
  104. return Long.toHexString(++current_id).toUpperCase();
  105.     }
  106.     
  107.     public void setStateVar(String name, String value) {
  108. Element var=XMLCommon.getElementByAttribute(statedata,"VAR","name",name);
  109. if(var == null) {
  110.     var=root.createElement("VAR");
  111.     var.setAttribute("name",name);
  112.     statedata.appendChild(var);
  113. }
  114. var.setAttribute("value",value);
  115.     }
  116.     public Element createStateVar(String name, String value) {
  117. Element var=root.createElement("VAR");
  118. var.setAttribute("name",name);
  119. var.setAttribute("value",value);
  120. return var;
  121.     }
  122.     public void addStateVar(String name, String value) {
  123. Element var=root.createElement("VAR");
  124. var.setAttribute("name",name);
  125. statedata.appendChild(var);
  126. var.setAttribute("value",value);
  127.     }
  128.     public void removeAllStateVars(String name) {
  129. NodeList nl=statedata.getElementsByTagName("VAR");
  130. /* This suxx: NodeList Object is changed when removing children !!!
  131.    I will store all nodes that should be deleted in a Vector and delete them afterwards */
  132. int length=nl.getLength();
  133. Vector v=new Vector(nl.getLength());
  134. for(int i=0;i<length;i++) {
  135.     if(((Element)nl.item(i)).getAttribute("name").equals(name)) {
  136. v.addElement(nl.item(i));
  137.     }
  138. }
  139. Enumeration enum=v.elements();
  140. while(enum.hasMoreElements()) {
  141.     Node n=(Node)enum.nextElement();
  142.     statedata.removeChild(n);
  143. }
  144.     }
  145.     public String getStateVar(String name) {
  146. Element var=XMLCommon.getElementByAttribute(statedata,"VAR","name",name);
  147. if(var == null) {
  148.     return "";
  149. } else {
  150.     return var.getAttribute("value");
  151. }
  152.     }
  153. } // XMLGenericModel