public static final Object getDominantSortAttributeValueFromString(
     String v, DataField dominantAttr) {
   Object value;
   switch (dominantAttr.getDataType()) {
     case BINARY:
       throw new IllegalStateException("cannot sort on a binary field");
     case LONG_STRING:
       throw new IllegalStateException("cannot sort on a long text field");
     case URI:
     case STRING:
       {
         value = v;
         break;
       }
     case INTEGER:
       {
         if (v == null) {
           value = null;
         } else {
           value = Long.valueOf(v);
         }
         break;
       }
     case DECIMAL:
       {
         if (v == null) {
           value = null;
         } else {
           BigDecimal bd = new BigDecimal(v);
           value = bd.setScale(dominantAttr.getNumericScale(), BigDecimal.ROUND_HALF_UP);
         }
         break;
       }
     case BOOLEAN:
       {
         if (v == null) {
           value = null;
         } else {
           value = WebUtils.parseBoolean(v);
         }
         break;
       }
     case DATETIME:
       {
         if (v == null) {
           value = null;
         } else {
           value = WebUtils.parseDate(v);
         }
         break;
       }
     default:
       throw new IllegalStateException("datatype not handled");
   }
   return value;
 }
 DataValue(String str, Integer n, Double bd, String dateStr, Boolean b) {
   this.str = str;
   this.l = (n == null) ? null : Long.valueOf(n);
   this.bd = (bd == null) ? null : BigDecimal.valueOf(bd);
   this.d = WebUtils.parseDate(dateStr);
   this.b = b;
 }
 public static final String getDominantSortAttributeValueAsString(
     CommonFieldsBase cb, DataField dominantAttr) {
   String value;
   switch (dominantAttr.getDataType()) {
     case BINARY:
       throw new IllegalStateException("cannot sort on a binary field");
     case LONG_STRING:
       throw new IllegalStateException("cannot sort on a long text field");
     case URI:
     case STRING:
       {
         value = cb.getStringField(dominantAttr);
         break;
       }
     case INTEGER:
       {
         Long l = cb.getLongField(dominantAttr);
         if (l == null) {
           value = null;
         } else {
           value = Long.toString(l);
         }
         break;
       }
     case DECIMAL:
       {
         BigDecimal bd = cb.getNumericField(dominantAttr);
         if (bd == null) {
           value = null;
         } else {
           value = bd.toString();
         }
         break;
       }
     case BOOLEAN:
       {
         Boolean b = cb.getBooleanField(dominantAttr);
         if (b == null) {
           value = null;
         } else {
           value = b.toString();
         }
         break;
       }
     case DATETIME:
       {
         Date d = cb.getDateField(dominantAttr);
         if (d == null) {
           value = null;
         } else {
           value = WebUtils.iso8601Date(d);
         }
         break;
       }
     default:
       throw new IllegalStateException("datatype not handled");
   }
   return value;
 }
 public static final String getAttributeValueAsString(Object o, DataField dominantAttr) {
   String value;
   switch (dominantAttr.getDataType()) {
     case BINARY:
       throw new IllegalStateException("cannot sort on a binary field");
     case LONG_STRING:
       throw new IllegalStateException("cannot sort on a long text field");
     case URI:
     case STRING:
       {
         value = (String) o;
         break;
       }
     case INTEGER:
       {
         Long l = (Long) o;
         if (l == null) {
           value = null;
         } else {
           value = Long.toString(l);
         }
         break;
       }
     case DECIMAL:
       {
         BigDecimal bd;
         if (o == null) {
           bd = null;
         } else if (o instanceof Double) {
           bd = new BigDecimal(((Double) o).toString());
         } else {
           bd = new BigDecimal(o.toString());
         }
         if (bd == null) {
           value = null;
         } else {
           value = bd.toString();
         }
         break;
       }
     case BOOLEAN:
       {
         Boolean b = (Boolean) o;
         if (b == null) {
           value = null;
         } else {
           value = b.toString();
         }
         break;
       }
     case DATETIME:
       {
         Date d = (Date) o;
         if (d == null) {
           value = null;
         } else {
           value = WebUtils.iso8601Date(d);
         }
         break;
       }
     default:
       throw new IllegalStateException("datatype not handled");
   }
   return value;
 }