| 1 package org.ozoneDB.xml.dom4j.io; 9 10 import org.dom4j.Document; 11 import org.dom4j.DocumentException; 12 import org.dom4j.io.SAXReader; 13 import org.ozoneDB.OzoneInterface; 14 import org.ozoneDB.OzoneObject; 15 import org.ozoneDB.OzoneRemote; 16 import org.ozoneDB.core.Env; 17 import org.ozoneDB.util.LogWriter; 18 import org.ozoneDB.xml.dom4j.OzoneDocumentFactory; 19 import org.ozoneDB.xml.dom4j.o3impl.OzoneDocumentFactoryImpl; 20 21 import java.io.*; 22 import java.net.ServerSocket ; 23 import java.net.Socket ; 24 import java.net.SocketAddress ; 25 26 29 public class DocumentBuilderImpl extends OzoneObject implements DocumentBuilder { 30 31 final static long serialVersionUID = 1L; 32 33 protected OzoneDocumentFactory factory; 34 protected Document resultDoc; 35 StreamSocket serverSocket; 36 37 public static DocumentBuilder create(OzoneInterface db) { 38 return (DocumentBuilder) db.createObject( 39 DocumentBuilderImpl.class, 40 OzoneInterface.Public, 41 OBJECT_NAME); 42 } 43 44 public DocumentBuilderImpl() { 45 } 46 47 public void onCreate() { 48 try { 49 factory = OzoneDocumentFactoryImpl.getInstance(database()); 50 } catch (Exception e) { 51 e.printStackTrace(); 52 } 53 } 54 55 public Document getResult() { 56 return resultDoc; 57 } 58 59 public Document parse(String text) throws DocumentException { 60 Env.currentEnv().logWriter.newEntry(this, "parsing String text ", LogWriter.DEBUG); 61 Document doc = parse(new StringReader(text)); 62 Env.currentEnv().logWriter.newEntry(this, "parsing result = " + doc, LogWriter.DEBUG); 63 return doc; 64 } 65 66 public Document parse(String text, String objectName) throws DocumentException { 67 Document doc = parse(text); 68 try { 69 Env.currentEnv().logWriter.newEntry(this, "Naming object " + doc + " the name " + objectName, LogWriter.DEBUG); 70 database().nameObject((OzoneRemote) doc, objectName); 71 } catch (Exception e) { 72 throw new DocumentException("Failed to name object", e); 73 } 74 return doc; 75 } 76 77 public Document parse(Reader reader) throws DocumentException { 78 System.out.println("[DocumentBuilderImpl] Reading character stream, database = " + database() + ", factory = " + factory); 79 SAXReader saxReader = new O3SAXReader(database(), factory); 80 return saxReader.read(reader); 81 } 82 83 public Document parse(InputStream in) throws DocumentException { 84 return parse(new InputStreamReader(in)); 85 } 86 87 public synchronized SocketAddress prepareStreamParsing() throws IOException { 88 serverSocket = new StreamSocket(3334); 89 new Thread (serverSocket).start(); 90 return serverSocket.getLocalSocketAddress(); 91 } 92 93 private class StreamSocket extends ServerSocket implements Runnable { 94 95 public StreamSocket(int port) throws IOException { 96 super(port); 97 } 98 99 public void run() { 100 try { 101 Socket clientSocket = serverSocket.accept(); 102 System.out.println("Connected to " + clientSocket.getInetAddress() + ", parsing stream"); 103 InputStream in = clientSocket.getInputStream(); 104 resultDoc = parse(in); 105 in.close(); 106 clientSocket.close(); 107 serverSocket.close(); 108 } catch (Exception e) { 109 e.printStackTrace(); 110 } 111 } 112 } 113 } 114 | Popular Tags |