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 Double.

Author(s):
SAP AG
 
 public class EdmDouble extends AbstractSimpleType {
 
   // value-range limitations according to the CSDL document
   private static final int MAX_PRECISION = 15;
   private static final int MAX_SCALE = 308;
 
   private static final Pattern PATTERN = Pattern.compile(
       "(?:\\+|-)?\\p{Digit}{1,15}(?:\\.\\p{Digit}{1,15})?(?:(?:E|e)(?:\\+|-)?\\p{Digit}{1,3})?(D|d)?");
   private static final EdmDouble instance = new EdmDouble();
 
   public static EdmDouble 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;
   }
 
   @Override
   public Class<?> getDefaultType() {
     return Double.class;
   }
 
   @Override
   protected <T> T internalValueOfString(final String valuefinal EdmLiteralKind literalKindfinal EdmFacets facetsfinal Class<T> returnTypethrows EdmSimpleTypeException {
     String valueString = value;
     Double result = null;
     // Handle special values first.
     if (value.equals("-INF")) {
       result = .;
     } else if (value.equals("INF")) {
       result = .;
     } else if (value.equals("NaN")) {
       result = .;
     } else {
       // Now only "normal" numbers remain.
       final Matcher matcher = .matcher(value);
       if (!matcher.matches()
           || (literalKind == .) == (matcher.group(1) == null)) {
       }
 
       if (literalKind == .) {
         valueString = value.substring(0, value.length() - 1);
       }
 
       // The number format is checked above, so we don't have to catch NumberFormatException.
       result = Double.valueOf(valueString);
       // "Real" infinite values have been treated already above, so we can throw an exception
       // if the conversion to a float results in an infinite value.
       if (result.isInfinite()) {
       }
     }
 
     if (returnType.isAssignableFrom(Double.class)) {
       return returnType.cast(result);
     } else if (returnType.isAssignableFrom(Float.class)) {
       if (result.floatValue() == result) {
        return returnType.cast(result.floatValue());
      } else {
      }
    } else if (result.isInfinite() || result.isNaN()) {
    } else {
      try {
        final BigDecimal valueBigDecimal = new BigDecimal(valueString);
        if (returnType.isAssignableFrom(BigDecimal.class)) {
          return returnType.cast(valueBigDecimal);
        } 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 {
    if (value instanceof Long) {
      if (Math.abs((Longvalue) < Math.pow(10, )) {
        return value.toString();
      } else {
      }
    } else if (value instanceof Integer || value instanceof Short || value instanceof Byte) {
      return value.toString();
    } else if (value instanceof Double) {
      if (((Doublevalue).isInfinite()) {
        return value.toString().toUpperCase(.).substring(0, value.toString().length() - 5);
      } else {
        return value.toString();
      }
    } else if (value instanceof Float) {
      if (((Floatvalue).isInfinite()) {
        return value.toString().toUpperCase(.).substring(0, value.toString().length() - 5);
      } else {
        return value.toString();
      }
    } else if (value instanceof BigDecimal) {
      if (((BigDecimalvalue).precision() <=  && Math.abs(((BigDecimalvalue).scale()) <= ) {
        return ((BigDecimalvalue).toString();
      } else {
      }
    } else {
    }
  }
  public String toUriLiteral(final String literal) {
    return literal.equals("-INF") || literal.equals("INF") || literal.equals("NaN") ?
        literal : literal + "D";
  }
New to GrepCode? Check out our FAQ X