Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright 2013 SAP AG Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. /
 
 package com.sap.core.odata.core.edm;
 
 
Implementation of the EDM simple type Decimal.

Author(s):
SAP AG
 
 public class EdmDecimal extends AbstractSimpleType {
 
   private static final Pattern PATTERN = Pattern.compile("(?:\\+|-)?(?:0*(\\p{Digit}{1,29}?))(?:\\.(\\p{Digit}{1,29}?)0*)?(M|m)?");
   private static final EdmDecimal instance = new EdmDecimal();
 
   public static EdmDecimal getInstance() {
     return ;
   }
 
   @Override
   public boolean isCompatible(final EdmSimpleType simpleType) {
     return simpleType instanceof Bit
         || simpleType instanceof Uint7
         || simpleType instanceof EdmByte
         || simpleType instanceof EdmSByte
         || simpleType instanceof EdmInt16
         || simpleType instanceof EdmInt32
         || simpleType instanceof EdmInt64
         || simpleType instanceof EdmSingle
         || simpleType instanceof EdmDouble
         || simpleType instanceof EdmDecimal;
   }
 
   @Override
   public Class<?> getDefaultType() {
     return BigDecimal.class;
   }
 
   @Override
   public boolean validate(final String valuefinal EdmLiteralKind literalKindfinal EdmFacets facets) {
     if (value == null) {
       return facets == null || facets.isNullable() == null || facets.isNullable();
     }
 
     if (literalKind == null) {
       return false;
     }
 
     return validateLiteral(valueliteralKind) && validatePrecisionAndScale(valuefacets);
   }
 
   private static boolean validateLiteral(final String valuefinal EdmLiteralKind literalKind) {
     final Matcher matcher = .matcher(value);
     return matcher.matches()
         && (literalKind == .) != (matcher.group(3) == null);
   }
 
   private static final boolean validatePrecisionAndScale(final String valuefinal EdmFacets facets) {
     if (facets == null || facets.getPrecision() == null && facets.getScale() == null) {
       return true;
     }
 
     final Matcher matcher = .matcher(value);
     matcher.matches();
     final int significantIntegerDigits = matcher.group(1).equals("0") ? 0 : matcher.group(1).length();
     final int decimals = matcher.group(2) == null ? 0 : matcher.group(2).length();
     return (facets.getPrecision() == null || facets.getPrecision() >= significantIntegerDigits + decimals)
         && (facets.getScale() == null || facets.getScale() >= decimals);
   }
 
   @Override
   protected <T> T internalValueOfString(final String valuefinal EdmLiteralKind literalKindfinal EdmFacets facetsfinal Class<T> returnTypethrows EdmSimpleTypeException {
     if (!validateLiteral(valueliteralKind)) {
     }
     if (!validatePrecisionAndScale(valuefacets)) {
     }
    final BigDecimal valueBigDecimal = new BigDecimal(
        literalKind == . ? value.substring(0, value.length() - 1) : value);
    if (returnType.isAssignableFrom(BigDecimal.class)) {
      return returnType.cast(valueBigDecimal);
    } else if (returnType.isAssignableFrom(Double.class)) {
      if (BigDecimal.valueOf(valueBigDecimal.doubleValue()).compareTo(valueBigDecimal) == 0) {
        return returnType.cast(valueBigDecimal.doubleValue());
      } else {
      }
    } else if (returnType.isAssignableFrom(Float.class)) {
      if (BigDecimal.valueOf(valueBigDecimal.floatValue()).compareTo(valueBigDecimal) == 0) {
        return returnType.cast(valueBigDecimal.floatValue());
      } else {
      }
    } else {
      try {
        if (returnType.isAssignableFrom(BigInteger.class)) {
          return returnType.cast(valueBigDecimal.toBigIntegerExact());
        } else if (returnType.isAssignableFrom(Long.class)) {
          return returnType.cast(valueBigDecimal.longValueExact());
        } else if (returnType.isAssignableFrom(Integer.class)) {
          return returnType.cast(valueBigDecimal.intValueExact());
        } else if (returnType.isAssignableFrom(Short.class)) {
          return returnType.cast(valueBigDecimal.shortValueExact());
        } else if (returnType.isAssignableFrom(Byte.class)) {
          return returnType.cast(valueBigDecimal.byteValueExact());
        } else {
        }
      } catch (final ArithmeticException e) {
      }
    }
  }
  protected <T> String internalValueToString(final T valuefinal EdmLiteralKind literalKindfinal EdmFacets facetsthrows EdmSimpleTypeException {
    String result;
    if (value instanceof Long || value instanceof Integer || value instanceof Short || value instanceof Byte || value instanceof BigInteger) {
      result = value.toString();
      final int digits = result.startsWith("-") ? result.length() - 1 : result.length();
      if (facets != null && facets.getPrecision() != null && facets.getPrecision() < digits) {
      }
    } else if (value instanceof Double || value instanceof Float || value instanceof BigDecimal) {
      BigDecimal bigDecimalValue;
      try {
        if (value instanceof Double) {
          bigDecimalValue = BigDecimal.valueOf((Doublevalue);
        } else if (value instanceof Float) {
          bigDecimalValue = BigDecimal.valueOf((Floatvalue);
        } else {
          bigDecimalValue = (BigDecimalvalue;
        }
      } catch (final NumberFormatException e) {
      }
      int digits = bigDecimalValue.precision();
      if (bigDecimalValue.scale() < 0) {
        digits -= bigDecimalValue.scale();
      }
      if (bigDecimalValue.scale() > bigDecimalValue.precision()) {
        digits = bigDecimalValue.scale();
      }
      if (facets == null
          || (facets.getPrecision() == null || facets.getPrecision() >= digits)
          && (facets.getScale() == null || facets.getScale() >= bigDecimalValue.scale())) {
        result = bigDecimalValue.toPlainString();
      } else {
      }
    } else {
    }
    return result;
  }
  public String toUriLiteral(final String literalthrows EdmSimpleTypeException {
    return literal + "M";
  }
New to GrepCode? Check out our FAQ X