1 package com.daffodilwoods.daffodildb.server.serversystem; 2 3 import java.io.*; 4 import java.sql.*; 5 6 import com.daffodilwoods.database.resource.*; 7 8 public class SaveModeHandler implements SaveModeConstants { 9 10 private String databaseHome; 11 private BlobOutPutStream blobStream; 12 private ClobOutPutStream clobStream; 13 14 public SaveModeHandler(String databaseName,String daffodilHome) { 15 databaseHome = daffodilHome + File.separator+ databaseName + File.separator; 16 blobStream = new BlobOutPutStream(databaseHome); 17 clobStream = new ClobOutPutStream(databaseHome); 18 } 19 20 public void write(Object sessionId, Object query) throws DException { 21 StringBuffer temp = new StringBuffer (); 22 temp.append("\n<connection sessionid=\"") 23 .append(sessionId).append("\" operator=\"") 24 .append(QUERY).append("\" operationType=\"") 25 .append(NON_PREPARED).append("\"><query><![CDATA[") 26 .append(query).append("]]></query></connection>"); 27 writeToXmlFile(temp.toString()); 28 } 29 30 public void write(Object sessionId, Object query, Object [] params) throws DException { 31 StringBuffer temp = new StringBuffer (); 32 temp.append("\n<connection sessionid=\"").append(sessionId) 33 .append("\" operator=\"").append(QUERY) 34 .append("\" operationType=\"").append(PREPARED) 35 .append("\"><query><![CDATA[").append(query) 36 .append("]]></query>") 37 .append(getParameters(params)) 38 .append("</connection>"); 39 writeToXmlFile(temp.toString()); 40 } 41 42 public void write(Object sessionId, int queryType, String savePointName) throws DException { 43 StringBuffer temp = new StringBuffer (); 44 temp.append("\n<connection sessionid=\"").append(sessionId) 45 .append("\" operator=\"").append(METHOD) 46 .append("\" operationType=\"").append(queryType) 47 .append("\"><savepointname>").append(savePointName) 48 .append("</savepointname></connection>"); 49 writeToXmlFile(temp.toString()); 50 } 51 52 public void write(Object sessionId, int queryType) throws DException { 53 StringBuffer temp = new StringBuffer (); 54 temp.append("\n<connection sessionid=\"").append(sessionId) 55 .append("\" operator=\"").append(METHOD) 56 .append("\" operationType=\"").append(queryType) 57 .append("\"></connection>"); 58 writeToXmlFile(temp.toString()); 59 } 60 61 public void write(Object sessionId, String user, String password) throws DException { 62 StringBuffer temp = new StringBuffer (); 63 temp.append("\n<connection sessionid=\"").append(sessionId) 64 .append("\" operator=\"").append(METHOD) 65 .append("\" operationType=\"").append(STARTCONNECTION) 66 .append("\"><user>").append(user) 67 .append("</user><password>").append(password) 68 .append("</password></connection>"); 69 writeToXmlFile(temp.toString()); 70 } 71 72 private String getParameters(Object [] params) throws DException { 73 if(params == null) 74 return ""; 75 StringBuffer temp = new StringBuffer (); 76 try { 77 for (int i = 0; i < params.length; i++) { 78 if (params[i] == null) { 79 temp.append("<param>parametervalueisnull</param>"); 80 } 81 else if (params[i] instanceof java.sql.Blob ) { 82 java.sql.Blob blobsv = (java.sql.Blob ) params[i]; 83 temp.append("<param><startposition>") 84 .append(blobStream.getLength()) 85 .append("</startposition><length>") 86 .append(blobStream.write(blobsv.getBinaryStream())) 87 .append("</length></param>"); 88 } 89 else if (params[i] instanceof java.sql.Clob ) { 90 java.sql.Clob clobsv = (java.sql.Clob ) params[i]; 91 temp.append("<param><startposition>") 92 .append(clobStream.getLength()) 93 .append("</startposition>").append("<length>") 94 .append(clobStream.write(clobsv.getAsciiStream())) 95 .append("</length></param>"); 96 } 97 else if (params[i] instanceof byte[]) { 98 temp.append("<param>").append(new String ( (byte[]) params[i])) 99 .append("</param>"); 100 } 101 else { 102 temp.append("<param><![CDATA[" + params[i] + "]]></param>"); 103 } 104 } 105 } 106 catch (SQLException ex1) { 107 throw new DException("DSE5557",null); 108 } 109 return temp.toString(); 110 } 111 112 113 private synchronized void writeToXmlFile(String data) throws DException { 114 try { 115 String xmlFilePath = databaseHome+XML_FILENAME; 116 File xmlFile = new File(xmlFilePath); 117 boolean FILEEXISTS = xmlFile.exists(); 118 if(!FILEEXISTS || xmlFile.length() == 0) { 119 FileOutputStream fos = new FileOutputStream(xmlFilePath,true); 120 OutputStreamWriter osw = new OutputStreamWriter(fos); 121 osw.write( 122 "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><transactions>"); 123 osw.close(); 124 fos.close(); 125 } 126 FileOutputStream fos = new FileOutputStream(xmlFilePath,true); 127 OutputStreamWriter osw = new OutputStreamWriter(fos); 128 osw.write(data); 129 osw.close(); 130 fos.close(); 131 } 132 catch (FileNotFoundException ex) { 133 throw new DException("DSE5551" ,new Object [] {databaseHome}); 134 } 135 catch (IOException ex) { 136 throw new DException("DSE5554",null); 137 } 138 } 139 } 140 | Popular Tags |