Author: sumedha
Date: Sat Dec 22 21:42:45 2007
New Revision: 11690

Log:

Added timestamp support

Modified:
   
trunk/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java

Modified: 
trunk/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java
==============================================================================
--- 
trunk/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java  
    (original)
+++ 
trunk/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java  
    Sat Dec 22 21:42:45 2007
@@ -33,6 +33,9 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -155,9 +158,7 @@
                                        getSelectResult(queryElement, inputs, 
params, paramOrder, axisService, false);
                        }
                } catch (Exception e) {
-                       if(e instanceof AxisFault){
-                               return 
generateErrorResponse(axisService.getTargetNamespace(), (AxisFault)e);
-                       }
+                       return 
generateErrorResponse(axisService.getTargetNamespace(), (AxisFault)e);
            }
                return resultElement;
        }
@@ -251,7 +252,6 @@
                        int responseCode = -1;
                        ResultSet rs = null;
                        
-                       DBCPConnectionManager.printDriverStats();
                        if (isDML) {
                                responseCode = 
preparedStatement.executeUpdate();
                        } else {
@@ -915,6 +915,12 @@
                log.debug("Processing prepared statement for SQL " + 
sqlStatement);
                Set paramNames = params.keySet();
                Object pramNameArray[] = paramNames.toArray();
+               
+               //SQL expects parameters, but not params set in config file
+               if(sqlStatement.indexOf("?") > -1 && pramNameArray.length == 0){
+                       throw new AxisFault("SQL : "+sqlStatement+" expects one 
or more parameters. " +
+                                       "But none is mentioned in the 
configuration file.");
+               }
 
                for (int i = 0; i < pramNameArray.length; i++) {
                        paramName = (String) paramOrder.get(new Integer(i + 1));
@@ -923,22 +929,27 @@
                        log.debug("Param name : "+paramName
                                +" SQL Type : "+sqlType
                                +" Value : "+value);
-
+                       
+                   if(value == null || value.trim().length() == 0){
+                   log.error("Empty value found for parameter : "+paramName);
+                   throw new AxisFault("Empty value found for parameter : 
"+paramName);                                
+                   }
+                   //work-a-round for setting NULL
+                   if("NULL".equalsIgnoreCase(value)){
+                       value = null;
+                   }
+                   //TODO : work-a-round for setting space
                        
                        if (sqlType == null) {
                                // Defaults to string
                                sqlQuery.setString(i + 1, value);
-                       } else if (sqlType.equals("INTEGER")) {
+                       } else if 
(DBConstants.DataTypes.INTEGER.equals(sqlType)) {
                                sqlQuery.setInt(i + 1, Integer.parseInt(value));
-                       } else if (sqlType.equals("STRING")) {
-                           if(value == null || value.trim().length() == 0){
-                           log.error("Empty value found for parameter : 
"+paramName);
-                           throw new AxisFault("Empty value found for 
parameter : "+paramName);                                
-                           }
+                       } else if 
(DBConstants.DataTypes.STRING.equals(sqlType)) {
                                sqlQuery.setString(i + 1, value);
-                       } else if (sqlType.equals("DOUBLE")) {
+                       } else if 
(DBConstants.DataTypes.DOUBLE.equals(sqlType)) {
                                sqlQuery.setDouble(i + 1, 
Double.parseDouble(value));
-                       }else if(sqlType.equals("DATE")){
+                       }else if(DBConstants.DataTypes.DATE.equals(sqlType)){
                            try{
                                sqlQuery.setDate(i+1, Date.valueOf(value));
                            }catch(IllegalArgumentException e){
@@ -946,6 +957,9 @@
                            throw new AxisFault("Incorrect date format for 
parameter  : "
                                    +paramName+".Date should be in yyyy-mm-dd 
format.", e);                             
                            }                       
+                       }else 
if(DBConstants.DataTypes.TIMESTAMP.equals(sqlType)){
+                               Timestamp timestamp = 
getTimestamp(value,paramName);
+                               sqlQuery.setTimestamp(i+1,timestamp);
                        }
                        
                }
@@ -959,4 +973,32 @@
                throw new AxisFault("Error occurred while preparing prepared 
statement for sql : "+sqlStatement, e); 
            }
        }
+       
+       /**
+        * @param value - String value to be converted to timestamp.
+        * Should be either in format "yyyy-MM-dd hh:mm:ss" or "yyyy-MM-dd 
hh:mm:ss.SSSSSS"
+        * @param paramName - name given to parameter in data service 
configuration file
+        */
+       private static Timestamp getTimestamp(String value,String paramName)
+       throws AxisFault{
+               java.sql.Timestamp timestamp;
+           try{
+               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 
hh:mm:ss.SSSSSS");
+               java.util.Date date = sdf.parse(value);
+               timestamp = new java.sql.Timestamp(date.getTime());             
        
+           }catch(ParseException e){
+           try{
+               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 
hh:mm:ss");
+               java.util.Date date = sdf.parse(value);
+               timestamp = new java.sql.Timestamp(date.getTime());     
+           }catch(ParseException e1){
+                log.error("Incorrect Timestamp format for parameter : 
"+paramName
+                               +".Timestamp should be either in format 
yyyy-MM-dd hh:mm:ss.SSSSSS or yyyy-MM-dd hh:mm:ss", e);
+                throw new AxisFault("Incorrect Timestamp format for parameter 
: "+paramName
+                               +".Timestamp should be either in format 
yyyy-MM-dd hh:mm:ss.SSSSSS or yyyy-MM-dd hh:mm:ss", e);                
+           }            
+           }
+           return timestamp;
+       }
+               
 }

_______________________________________________
Commons-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/commons-dev

Reply via email to