private ArrayStringMap<QueryParam> buildParams(String p_paramString) {
   ArrayStringMap<QueryParam> params =
       new ArrayStringMap<QueryParam>(KConfig.CACHE_INIT_SIZE, KConfig.CACHE_LOAD_FACTOR);
   int iParam = 0;
   int lastStart = iParam;
   while (iParam < p_paramString.length()) {
     if (p_paramString.charAt(iParam) == ',') {
       String p = p_paramString.substring(lastStart, iParam).trim();
       if (!p.equals("") && !p.equals("*")) {
         if (p.endsWith("=")) {
           p = p + "*";
         }
         String[] pArray = p.split("=");
         QueryParam pObject;
         if (pArray.length > 1) {
           String paramKey = pArray[0].trim();
           boolean negative = paramKey.endsWith("!");
           pObject =
               new QueryParam(
                   paramKey.replace("!", "").replace("*", ".*"),
                   pArray[1].trim().replace("*", ".*"),
                   negative);
           params.put(pObject.name(), pObject);
         }
       }
       lastStart = iParam + 1;
     }
     iParam = iParam + 1;
   }
   String lastParam = p_paramString.substring(lastStart, iParam).trim();
   if (!lastParam.equals("") && !lastParam.equals("*")) {
     if (lastParam.endsWith("=")) {
       lastParam = lastParam + "*";
     }
     String[] pArray = lastParam.split("=");
     QueryParam pObject;
     if (pArray.length > 1) {
       String paramKey = pArray[0].trim();
       boolean negative = paramKey.endsWith("!");
       pObject =
           new QueryParam(
               paramKey.replace("!", "").replace("*", ".*"),
               pArray[1].trim().replace("*", ".*"),
               negative);
       params.put(pObject.name(), pObject);
     }
   }
   return params;
 }