00001
00002
00003
00004
00005
00006
00007
00008 package org.jaebi.server.service.xml;
00009
00010 import java.sql.ResultSet;
00011 import java.sql.ResultSetMetaData;
00012 import java.sql.SQLException;
00013 import java.util.Hashtable;
00014
00015 import javax.xml.bind.JAXBException;
00016
00017 import org.jaebi.server.service.xml.exception.JAXBXResponseFactoryBuildingException;
00018 import org.jaebi.server.service.xml.xresponse.Column;
00019 import org.jaebi.server.service.xml.xresponse.Message;
00020 import org.jaebi.server.service.xml.xresponse.Row;
00021 import org.jaebi.server.service.xml.xresponse.Rowset;
00022 import org.jaebi.server.service.xml.xresponse.Xresponse;
00023
00032 public class JAXBXResponseFactory {
00034 protected static org.jaebi.server.service.xml.xresponse.ObjectFactory objectFactory = null;
00036 private static String exceptionPrefix = "[XResponseFactory Exception]: ";
00039 private static Hashtable XResponseTypesMapping = null;
00040
00044 public JAXBXResponseFactory() {
00045
00046 objectFactory = new org.jaebi.server.service.xml.xresponse.ObjectFactory();
00047
00048
00049
00050
00051 XResponseTypesMapping = new Hashtable(20);
00052 XResponseTypesMapping.put("bit varying", "bits");
00053 XResponseTypesMapping.put("bit", "bits");
00054 XResponseTypesMapping.put("boolean","boolean");
00055 XResponseTypesMapping.put("character varying", "chars");
00056 XResponseTypesMapping.put("varchar", "chars");
00057 XResponseTypesMapping.put("character", "chars");
00058 XResponseTypesMapping.put("char", "chars");
00059 XResponseTypesMapping.put("text", "chars");
00060 XResponseTypesMapping.put("integer", "int");
00061 XResponseTypesMapping.put("int4", "int");
00062 XResponseTypesMapping.put("int", "int");
00063 XResponseTypesMapping.put("real", "float");
00064 XResponseTypesMapping.put("float", "float");
00065 XResponseTypesMapping.put("float4", "float");
00066 XResponseTypesMapping.put("timestamp", "chars");
00067 XResponseTypesMapping.put("timestamp without time zone", "chars");
00068 XResponseTypesMapping.put("timestamp with time zone", "chars");
00069 XResponseTypesMapping.put("timestamptz", "chars");
00070 XResponseTypesMapping.put("date","chars");
00071 }
00072
00086 public Object buildXresponse(boolean ok, String message)
00087 throws JAXBXResponseFactoryBuildingException {
00088
00089 Xresponse xresponse = null;
00090 Message xrespMessage = null;
00091
00092 try {
00093
00094 xresponse = objectFactory.createXresponse();
00095
00096
00097 xrespMessage = objectFactory.createMessage();
00098
00099 if ( ok ) xrespMessage.setResult("ok");
00100 else xrespMessage.setResult("error");
00101
00102 xrespMessage.getContent().add(message);
00103
00104
00105 xresponse.setMessage(xrespMessage);
00106 } catch ( JAXBException e ) {
00107 throw new JAXBXResponseFactoryBuildingException(exceptionPrefix + e);
00108 }
00109
00110 return (Object)xresponse;
00111
00112 }
00113
00125 public Object buildXresponse(ResultSet resultSet)
00126 throws JAXBXResponseFactoryBuildingException {
00127
00128 Xresponse xresponse = null;
00129 Rowset rowset = null;
00130 Row row = null;
00131 Column column = null;
00132 String columnTypeStr;
00133 String columnNameStr;
00134 String columnValueStr;
00135
00136 ResultSetMetaData resSetMeta = null;
00137 int columnsNumber = 0;
00138
00139 try {
00140
00141 xresponse = objectFactory.createXresponse();
00142
00143
00144 rowset = objectFactory.createRowset();
00145
00146
00147 resSetMeta = resultSet.getMetaData();
00148
00149 columnsNumber = resSetMeta.getColumnCount();
00150
00151 while ( resultSet.next() ) {
00152
00153 row = objectFactory.createRow();
00154
00155 for ( int i = 0; i < columnsNumber; i++ ) {
00156
00157 column = objectFactory.createColumn();
00158
00159
00160 columnTypeStr = resSetMeta.getColumnTypeName(i + 1);
00161
00162
00163
00164
00165 column.setType(
00166 (String)XResponseTypesMapping.get(
00167 (String) columnTypeStr.toLowerCase()
00168 )
00169 );
00170
00171
00172 columnNameStr = resSetMeta.getColumnName(i + 1);
00173
00174 column.setName(columnNameStr);
00175
00176
00177 columnValueStr = resultSet.getString(i + 1);
00178 if ( columnValueStr == null )
00179 columnValueStr = "NULL";
00180
00181 column.setValue(columnValueStr);
00182
00183
00184 row.getColumn().add(column);
00185 }
00186
00187
00188 rowset.getRow().add(row);
00189 }
00190
00191
00192
00193 xresponse.setRowset(rowset);
00194 } catch ( JAXBException e ) {
00195 throw new JAXBXResponseFactoryBuildingException(exceptionPrefix + e);
00196 } catch (SQLException sqle) {
00197 throw new JAXBXResponseFactoryBuildingException(exceptionPrefix + sqle);
00198 }
00199
00200 return (Object)xresponse;
00201 }
00202
00203 }