1 10 package org.mmbase.util.xml; 11 12 import java.util.*; 13 import java.io.*; 14 import org.w3c.dom.*; 15 import org.xml.sax.InputSource ; 16 import org.xml.sax.SAXException ; 17 import javax.xml.parsers.DocumentBuilder ; 18 import org.mmbase.util.logging.*; 19 20 31 public class DocumentSerializable implements Serializable, org.mmbase.util.PublicCloneable { 32 private static final Logger log = Logging.getLoggerInstance(DocumentSerializable.class); 33 private static final long serialVersionUID = 1L; 34 35 private Document document; 36 private void writeObject(ObjectOutputStream out) throws IOException { 38 if (document instanceof Serializable) { 39 out.writeObject(document); 40 } else { 41 String string = XMLWriter.write(document, false); 42 out.writeObject(string); 43 } 44 } 45 private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { 47 Object o = in.readObject(); 48 if (o instanceof Document) { 49 document = (Document) o; 50 } else { 51 try { 52 DocumentBuilder documentBuilder = DocumentReader.getDocumentBuilder(false, null, null); 53 document = documentBuilder.parse(new InputSource (new StringReader("" + o))); 54 } catch (SAXException e) { 55 log.warn(e); 56 } 57 } 58 } 59 60 61 62 public DocumentSerializable(Document d) { 63 document = d; 64 } 65 66 public final Document getDocument() { 67 return document; 68 } 69 70 public String toString() { 71 return XMLWriter.write(document, false, true); 72 } 73 74 public int hashCode() { 75 return document.hashCode(); 76 } 77 public boolean equals(Object o) { 78 return 79 o != null && 80 o instanceof DocumentSerializable && 81 document.equals(((DocumentSerializable)o).document); 82 } 83 84 public Object clone() { 85 Document newDocument = DocumentReader.getDocumentBuilder(false, null, null).newDocument(); 86 Node root = newDocument.importNode(document.getDocumentElement(), true); 87 newDocument.appendChild(root); 88 return new DocumentSerializable(newDocument); 89 } 90 91 } 92 | Popular Tags |