Example #1
0
    public void readProperty(
        String group,
        String propertyName,
        VCardParameters parameters,
        VCardDataType dataType,
        JCardValue value) {
      if ("version".equalsIgnoreCase(propertyName)) {
        // don't unmarshal "version" because we don't treat it as a property
        versionFound = true;

        VCardVersion version = VCardVersion.valueOfByStr(value.asSingle());
        if (version != VCardVersion.V4_0) {
          warnings.add(reader.getLineNum(), propertyName, 30);
        }
        return;
      }

      VCardPropertyScribe<? extends VCardProperty> scribe = index.getPropertyScribe(propertyName);
      if (scribe == null) {
        scribe = new RawPropertyScribe(propertyName);
      }

      Result<? extends VCardProperty> result;
      try {
        result = scribe.parseJson(value, dataType, parameters);
        for (String warning : result.getWarnings()) {
          warnings.add(reader.getLineNum(), warning, propertyName);
        }
      } catch (SkipMeException e) {
        warnings.add(reader.getLineNum(), propertyName, 22, e.getMessage());
        return;
      } catch (CannotParseException e) {
        scribe = new RawPropertyScribe(propertyName);
        result = scribe.parseJson(value, dataType, parameters);

        VCardProperty property = result.getProperty();
        String valueStr = ((RawProperty) property).getValue();
        warnings.add(reader.getLineNum(), propertyName, 25, valueStr, e.getMessage());
      } catch (EmbeddedVCardException e) {
        warnings.add(reader.getLineNum(), propertyName, 31);
        return;
      }

      VCardProperty property = result.getProperty();
      property.setGroup(group);
      vcard.addProperty(property);
    }