/*This retrieves two parameters, combines them and send back*/
 public static String[] getStringValuesFromDatabaseForInternalRoles(
     Connection dbConnection, String sqlStmt, Object... params) throws UserStoreException {
   String[] values = new String[0];
   PreparedStatement prepStmt = null;
   ResultSet rs = null;
   try {
     prepStmt = dbConnection.prepareStatement(sqlStmt);
     if (params != null && params.length > 0) {
       for (int i = 0; i < params.length; i++) {
         Object param = params[i];
         if (param == null) {
           throw new UserStoreException("Null data provided.");
         } else if (param instanceof String) {
           prepStmt.setString(i + 1, (String) param);
         } else if (param instanceof Integer) {
           prepStmt.setInt(i + 1, (Integer) param);
         }
       }
     }
     rs = prepStmt.executeQuery();
     List<String> lst = new ArrayList<String>();
     while (rs.next()) {
       String name = rs.getString(1);
       String domain = rs.getString(2);
       if (domain != null) {
         UserCoreUtil.addDomainToName(name, domain);
       }
       lst.add(name);
     }
     if (lst.size() > 0) {
       values = lst.toArray(new String[lst.size()]);
     }
     return values;
   } catch (SQLException e) {
     log.error(e.getMessage(), e);
     log.error("Using sql : " + sqlStmt);
     throw new UserStoreException(e.getMessage(), e);
   } finally {
     DatabaseUtil.closeAllConnections(null, rs, prepStmt);
   }
 }
  public static void udpateUserRoleMappingInBatchModeForInternalRoles(
      Connection dbConnection, String sqlStmt, String primaryDomain, Object... params)
      throws UserStoreException {
    PreparedStatement prepStmt = null;
    boolean localConnection = false;
    try {
      prepStmt = dbConnection.prepareStatement(sqlStmt);
      int batchParamIndex = -1;
      if (params != null && params.length > 0) {
        for (int i = 0; i < params.length; i++) {
          Object param = params[i];
          if (param == null) {
            throw new UserStoreException("Null data provided.");
          } else if (param instanceof String[]) {
            batchParamIndex = i;
          } else if (param instanceof String) {
            prepStmt.setString(i + 1, (String) param);
          } else if (param instanceof Integer) {
            prepStmt.setInt(i + 1, (Integer) param);
          }
        }
      }
      if (batchParamIndex != -1) {
        String[] values = (String[]) params[batchParamIndex];
        for (String value : values) {
          String strParam = (String) value;
          // add domain if not set
          strParam = UserCoreUtil.addDomainToName(strParam, primaryDomain);
          // get domain from name
          String domainParam = UserCoreUtil.extractDomainFromName(strParam);
          if (domainParam != null) {
            domainParam = domainParam.toUpperCase();
          }
          // set domain to sql
          prepStmt.setString(params.length + 1, domainParam);
          // remove domain before persisting
          String nameWithoutDomain = UserCoreUtil.removeDomainFromName(strParam);
          // set name in sql
          prepStmt.setString(batchParamIndex + 1, nameWithoutDomain);
          prepStmt.addBatch();
        }
      }

      int[] count = prepStmt.executeBatch();
      if (log.isDebugEnabled()) {
        log.debug(
            "Executed a batch update. Query is : "
                + sqlStmt
                + ": and result is"
                + Arrays.toString(count));
      }
      if (localConnection) {
        dbConnection.commit();
      }
    } catch (SQLException e) {
      log.error(e.getMessage(), e);
      log.error("Using sql : " + sqlStmt);
      throw new UserStoreException(e.getMessage(), e);
    } finally {
      if (localConnection) {
        DatabaseUtil.closeAllConnections(dbConnection);
      }
      DatabaseUtil.closeAllConnections(null, prepStmt);
    }
  }