public PhoneNumber setValue()

in scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/PhoneNumber.java [116:150]


  public PhoneNumber setValue(String value, boolean strict) throws PhoneNumberParseException {
    if (value == null) {
      throw new PhoneNumberParseException("null values are illegal for phone numbers");
    }

      PhoneNumberLexer phoneNumberLexer = new PhoneNumberLexer(new ANTLRInputStream(value));
      PhoneNumberParser p = new PhoneNumberParser(new CommonTokenStream(phoneNumberLexer));
      p.setBuildParseTree(true);
      p.addErrorListener(new PhoneNumberErrorListener());
  
      PhoneNumberParseTreeListener tpl = new PhoneNumberParseTreeListener();
      try {
        ParseTree tree = p.phoneNumber();
        ParseTreeWalker.DEFAULT.walk(tpl, tree);
        PhoneNumber parsedPhoneNumber = tpl.getPhoneNumber();

        this.value = parsedPhoneNumber.getValue();
        this.number = parsedPhoneNumber.getNumber();
        this.extension = parsedPhoneNumber.getExtension();
        this.subAddress = parsedPhoneNumber.getSubAddress();
        this.phoneContext = parsedPhoneNumber.getPhoneContext();
        this.params = parsedPhoneNumber.getParams();
        this.isGlobalNumber = parsedPhoneNumber.isGlobalNumber();
        this.isDomainPhoneContext = parsedPhoneNumber.isDomainPhoneContext();
      } catch (IllegalStateException e) {
        // SCIM Core RFC section 4.1.2 states phone numbers SHOULD be formatted per RFC3966, e.g. 'tel:+1-201-555-0123'
        // but this is not required, if exception is thrown while parsing, fall back to original value, unless `strict`
        if (strict) {
          throw new PhoneNumberParseException(e);
        }
        log.debug("Failed to parse phone number '{}'", value, e);
        this.value = value;
      }
      return this;
  }