/Users/detro/workspace-nb/JAEBI/src/java/org/jaebi/server/service/xml/JAXBXResponseFactory.java

Vai alla documentazione di questo file.
00001 /*
00002  * JAXBXResponseFactory.java
00003  *
00004  * Created on May 31, 2005, 2:12 PM
00005  * Created by Detro - 566/2145
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         // Istanziazione Object Factory
00046         objectFactory = new org.jaebi.server.service.xml.xresponse.ObjectFactory();
00047         /* Filling della Hashmap di associazione SQL-xresponse column's type:
00048          * il parametro numerico in input permette di stabilire la capacita' iniziale
00049          * dell'Hashmap, che e' il numero di Bucket inizialmente istanziati 
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             // Creazione nuovo oggetto Xresponse
00094             xresponse = objectFactory.createXresponse();
00095             
00096             // Creazione nuovo oggetto Message
00097             xrespMessage = objectFactory.createMessage();
00098             // Settaggio attributo "result" per l'oggetto Message
00099             if ( ok ) xrespMessage.setResult("ok");
00100             else xrespMessage.setResult("error");
00101             // Settaggio contenuto per oggetto Message
00102             xrespMessage.getContent().add(message);
00103             
00104             // Aggiunta Oggetto Message nell'oggetto Xresponse
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             // Creazione nuovo oggetto Xresponse
00141             xresponse = objectFactory.createXresponse();
00142             
00143             // Creazione nuovo oggetto Rowset
00144             rowset = objectFactory.createRowset();
00145             
00146             // Recupero MetaData dal ResultSet
00147             resSetMeta = resultSet.getMetaData();
00148             // Recuper numero delle Colonne del ResultSet
00149             columnsNumber = resSetMeta.getColumnCount();
00150             
00151             while ( resultSet.next() ) {
00152                 // Creazione nuovo oggetto Row
00153                 row = objectFactory.createRow();
00154                                 
00155                 for ( int i = 0; i < columnsNumber; i++ ) {
00156                     // Creazione nuovo oggetto Column
00157                     column = objectFactory.createColumn();
00158                     
00159                     // Recupero nome del Type della Colonna
00160                     columnTypeStr = resSetMeta.getColumnTypeName(i + 1);
00161                     /* Settaggio attributo "type" per l'oggetto Column
00162                      * per mappare i tipi possibili dell'SQL con i tipi
00163                      * accettati dall'XSD xresponse si usa una Hashmap
00164                      */                    
00165                     column.setType( 
00166                             (String)XResponseTypesMapping.get( 
00167                                 (String) columnTypeStr.toLowerCase()
00168                                 ) 
00169                             );
00170                     
00171                     // Recupero nome della Colonna
00172                     columnNameStr = resSetMeta.getColumnName(i + 1);
00173                     // Settaggio valore Oggetto Name contenuto in Column
00174                     column.setName(columnNameStr);
00175                     
00176                     // Recupero valore della Colonna
00177                     columnValueStr = resultSet.getString(i + 1);
00178                                         if ( columnValueStr == null )
00179                                                 columnValueStr = "NULL";
00180                     // Settaggio valore Oggetto Value contenuto in Column
00181                     column.setValue(columnValueStr);
00182                     
00183                     // Inserimento Colonna nella Riga
00184                     row.getColumn().add(column);
00185                 }
00186                 
00187                 // Aggiunto oggetto Row al Rowset
00188                 rowset.getRow().add(row);
00189             }
00190             
00191             
00192             // Aggiunga Oggetto Message nell'oggetto Xresponse
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 }

Generato il Mon Jun 27 22:50:38 2005 per JAEBI - JAva Enterprice BackEnd Interfacement da  doxygen 1.4.3