/** * Indicates whether the provided value is acceptable for use in an attribute with this syntax. If * it is not, then the reason may be appended to the provided buffer. * * @param value The value for which to make the determination. * @param invalidReason The buffer to which the invalid reason should be appended. * @return <CODE>true</CODE> if the provided value is acceptable for use with this syntax, or * <CODE>false</CODE> if not. */ public boolean valueIsAcceptable(ByteSequence value, MessageBuilder invalidReason) { // Check to see if the provided value was null. If so, then that's not // acceptable. if (value == null) { invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE.get()); return false; } // Get the value as a string and determine its length. If it is empty, then // that's not acceptable. String valueString = value.toString(); int valueLength = valueString.length(); if (valueLength == 0) { invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_EMPTY_VALUE.get()); return false; } // Iterate through the characters in the vale until we find a dollar sign. // Every character up to that point must be a printable string character. int pos = 0; for (; pos < valueLength; pos++) { char c = valueString.charAt(pos); if (c == '$') { if (pos == 0) { invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_NO_MBTYPE.get(valueString)); return false; } pos++; break; } else if (!PrintableString.isPrintableCharacter(c)) { invalidReason.append( ERR_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MBTYPE_CHAR.get( valueString, String.valueOf(c), pos)); return false; } } // Make sure there is at least one character left for the mailbox. if (pos >= valueLength) { invalidReason.append(ERR_ATTR_SYNTAX_OTHER_MAILBOX_NO_MAILBOX.get(valueString)); return false; } // The remaining characters in the value must be IA5 (ASCII) characters. for (; pos < valueLength; pos++) { char c = valueString.charAt(pos); if (c != (c & 0x7F)) { invalidReason.append( ERR_ATTR_SYNTAX_OTHER_MAILBOX_ILLEGAL_MB_CHAR.get(valueString, String.valueOf(c), pos)); return false; } } // If we've gotten here, then the value is OK. return true; }
public void setDateTimeStamp(PrintableString obj) { PrintableString it = getDateTimeStamp(); it.value(obj.value()); components.set(1, it); }