Example #1
0
  @Override
  protected <T> T internalValueOfString(
      final String value,
      final EdmLiteralKind literalKind,
      final EdmFacets facets,
      final Class<T> returnType)
      throws EdmSimpleTypeException {
    Calendar valueCalendar;
    if (literalKind == EdmLiteralKind.URI) {
      if (value.length() > 6 && value.startsWith("time'") && value.endsWith("'")) {
        valueCalendar = parseLiteral(value.substring(5, value.length() - 1), facets);
      } else {
        throw new EdmSimpleTypeException(
            EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value));
      }
    } else {
      valueCalendar = parseLiteral(value, facets);
    }

    if (returnType.isAssignableFrom(Calendar.class)) {
      return returnType.cast(valueCalendar);
    } else if (returnType.isAssignableFrom(Long.class)) {
      return returnType.cast(valueCalendar.getTimeInMillis());
    } else if (returnType.isAssignableFrom(Date.class)) {
      return returnType.cast(valueCalendar.getTime());
    } else {
      throw new EdmSimpleTypeException(
          EdmSimpleTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType));
    }
  }
Example #2
0
  private Calendar parseLiteral(final String literal, final EdmFacets facets)
      throws EdmSimpleTypeException {
    final Matcher matcher = PATTERN.matcher(literal);
    if (!matcher.matches()
        || (matcher.group(1) == null && matcher.group(2) == null && matcher.group(3) == null)) {
      throw new EdmSimpleTypeException(
          EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(literal));
    }

    Calendar dateTimeValue = Calendar.getInstance();
    dateTimeValue.clear();

    dateTimeValue.set(
        Calendar.HOUR_OF_DAY, matcher.group(1) == null ? 0 : Integer.parseInt(matcher.group(1)));
    dateTimeValue.set(
        Calendar.MINUTE, matcher.group(2) == null ? 0 : Integer.parseInt(matcher.group(2)));
    dateTimeValue.set(
        Calendar.SECOND, matcher.group(3) == null ? 0 : Integer.parseInt(matcher.group(3)));

    if (matcher.group(4) != null) {
      if (facets == null
          || facets.getPrecision() == null
          || facets.getPrecision() >= matcher.group(4).length()) {
        if (matcher.group(4).length() <= 3) {
          dateTimeValue.set(
              Calendar.MILLISECOND,
              Short.parseShort(
                  matcher.group(4) + "000".substring(0, 3 - matcher.group(4).length())));
        } else {
          throw new EdmSimpleTypeException(
              EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(literal));
        }
      } else {
        throw new EdmSimpleTypeException(
            EdmSimpleTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(literal, facets));
      }
    }

    if (dateTimeValue.get(Calendar.DAY_OF_YEAR) == 1) {
      return dateTimeValue;
    } else {
      throw new EdmSimpleTypeException(
          EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(literal));
    }
  }