/**
  * Create query param list according to table column names
  *
  * @param param -List of column names in the database table
  * @param tableName -
  * @return paramList-List of QueryParam
  * @throws IllegalArgumentException -""
  * @throws SQLException -""
  * @throws DataServiceFault -
  */
 private List<QueryParam> getQueryParamList(
     DatabaseMetaData metaData, String dbName, String schema, String tableName, List<String> param)
     throws IllegalArgumentException, SQLException, DataServiceFault {
   List<QueryParam> paramList = new ArrayList<QueryParam>();
   int ordinal = 1;
   for (String pName : param) {
     /* Get the SQL type of parameter */
     String sqlType = "";
     ResultSet rs = getColumnNames(metaData, schema, dbName, tableName, pName);
     while (rs.next()) {
       int type = rs.getInt(DBConstants.DataServiceGenerator.DATA_TYPE);
       if ((-1 == type) || (-16 == type) || (-15 == type) || (2009 == type)) {
         type = 1;
       }
       sqlType = DSSqlTypes.getDefinedTypes().get(type);
     }
     List<Validator> validator = new ArrayList<Validator>();
     QueryParam queryParam =
         new QueryParam(
             pName,
             sqlType,
             DBConstants.DataServiceGenerator.IN,
             DBConstants.DataServiceGenerator.SCALAR,
             ordinal,
             null,
             null,
             validator);
     paramList.add(queryParam);
     ordinal++; // increase the ordinal value one by one
   }
   return paramList;
 }
 /** This method construct the result object. */
 private Result getResult(
     DataService dataServiceObject,
     DatabaseMetaData metaData,
     String dbName,
     String schema,
     String tableName)
     throws DataServiceFault, IllegalArgumentException, SQLException {
   // row name is equal to table Name
   String rowElementName = tableName + DBConstants.DataServiceGenerator.ROW_ELEMENT_NAME_SUFFIX;
   Result result = new Result(rowElementName, tableName, null, null, ResultTypes.XML);
   ResultSet columnNames = getColumnNames(metaData, schema, dbName, tableName, null);
   OutputElementGroup defGroup = new OutputElementGroup(null, null, null, null);
   while (columnNames.next()) {
     String columnName = columnNames.getString(DBConstants.DataServiceGenerator.COLUMN_NAME);
     int typeInt = columnNames.getInt("DATA_TYPE");
     if ((-1 == typeInt) || (-16 == typeInt) || (-15 == typeInt) || (2009 == typeInt)) {
       typeInt = 1;
     }
     String type = DSSqlTypes.getQNameType(typeInt);
     QName qName = QueryFactory.getXsdTypeQName(type);
     Set<String> requiredRoles = new HashSet<String>(); // empty set
     StaticOutputElement outputElement =
         new StaticOutputElement(
             dataServiceObject,
             columnName,
             columnName,
             columnName,
             DBConstants.DataServiceGenerator.COLUMN,
             DBConstants.DataServiceGenerator.ELEMENT,
             null,
             qName,
             requiredRoles,
             0,
             0,
             null,
             ParamValue.PARAM_VALUE_SCALAR,
             null);
     defGroup.addAttributeEntry(outputElement);
   }
   result.setDefaultElementGroup(defGroup);
   return result;
 }