| | |
| | | import java.util.List; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2; |
| | | import org.forgerock.opendj.ldap.ByteSequence; |
| | | import org.forgerock.opendj.ldap.ResultCode; |
| | | import org.forgerock.opendj.ldap.schema.ObjectClassType; |
| | |
| | | { |
| | | StringBuilder woidBuffer = new StringBuilder(); |
| | | pos = readWOID(lowerStr, woidBuffer, (pos)); |
| | | attrs.add(getAttribute(schema, allowUnknownElements, valueStr, woidBuffer, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR)); |
| | | |
| | | AttributeType attr = schema.getAttributeType(woidBuffer.toString()); |
| | | if (attr == null) |
| | | { |
| | | // This isn't good because it means that the DIT content rule |
| | | // requires an attribute type that we don't know anything about. |
| | | if (allowUnknownElements) |
| | | { |
| | | attr = DirectoryServer.getDefaultAttributeType(woidBuffer.toString()); |
| | | } |
| | | else |
| | | { |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get(valueStr, woidBuffer)); |
| | | } |
| | | } |
| | | |
| | | attrs.add(attr); |
| | | |
| | | |
| | | // The next character must be either a dollar sign or a closing |
| | | // parenthesis. |
| | | // The next character must be either a dollar sign or a closing parenthesis. |
| | | c = valueStr.charAt(pos++); |
| | | if (c == ')') |
| | | { |
| | |
| | | { |
| | | StringBuilder woidBuffer = new StringBuilder(); |
| | | pos = readWOID(lowerStr, woidBuffer, (pos-1)); |
| | | |
| | | AttributeType attr = schema.getAttributeType(woidBuffer.toString()); |
| | | if (attr == null) |
| | | { |
| | | // This isn't good because it means that the DIT content rule |
| | | // requires an attribute type that we don't know anything about. |
| | | if (allowUnknownElements) |
| | | { |
| | | attr = DirectoryServer.getDefaultAttributeType( |
| | | woidBuffer.toString()); |
| | | } |
| | | else |
| | | { |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get(valueStr, woidBuffer)); |
| | | } |
| | | } |
| | | |
| | | attrs.add(attr); |
| | | attrs.add(getAttribute(schema, allowUnknownElements, valueStr, woidBuffer, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR)); |
| | | } |
| | | |
| | | requiredAttributes.addAll(attrs); |
| | |
| | | { |
| | | StringBuilder woidBuffer = new StringBuilder(); |
| | | pos = readWOID(lowerStr, woidBuffer, (pos)); |
| | | attrs.add(getAttribute(schema, allowUnknownElements, valueStr, woidBuffer, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR)); |
| | | |
| | | AttributeType attr = schema.getAttributeType(woidBuffer.toString()); |
| | | if (attr == null) |
| | | { |
| | | // This isn't good because it means that the DIT content rule |
| | | // allows an attribute type that we don't know anything about. |
| | | if (allowUnknownElements) |
| | | { |
| | | attr = DirectoryServer.getDefaultAttributeType( |
| | | woidBuffer.toString()); |
| | | } |
| | | else |
| | | { |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get(valueStr, woidBuffer)); |
| | | } |
| | | } |
| | | |
| | | attrs.add(attr); |
| | | |
| | | |
| | | // The next character must be either a dollar sign or a closing |
| | | // parenthesis. |
| | | // The next character must be either a dollar sign or a closing parenthesis. |
| | | c = valueStr.charAt(pos++); |
| | | if (c == ')') |
| | | { |
| | |
| | | { |
| | | StringBuilder woidBuffer = new StringBuilder(); |
| | | pos = readWOID(lowerStr, woidBuffer, (pos-1)); |
| | | |
| | | AttributeType attr = schema.getAttributeType(woidBuffer.toString()); |
| | | if (attr == null) |
| | | { |
| | | // This isn't good because it means that the DIT content rule allows |
| | | // an attribute type that we don't know anything about. |
| | | if (allowUnknownElements) |
| | | { |
| | | attr = DirectoryServer.getDefaultAttributeType( |
| | | woidBuffer.toString()); |
| | | } |
| | | else |
| | | { |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get(valueStr, woidBuffer)); |
| | | } |
| | | } |
| | | |
| | | attrs.add(attr); |
| | | attrs.add(getAttribute(schema, allowUnknownElements, valueStr, woidBuffer, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR)); |
| | | } |
| | | |
| | | optionalAttributes.addAll(attrs); |
| | |
| | | { |
| | | StringBuilder woidBuffer = new StringBuilder(); |
| | | pos = readWOID(lowerStr, woidBuffer, (pos)); |
| | | attrs.add(getAttribute(schema, allowUnknownElements, valueStr, woidBuffer, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR)); |
| | | |
| | | AttributeType attr = schema.getAttributeType(woidBuffer.toString()); |
| | | if (attr == null) |
| | | { |
| | | // This isn't good because it means that the DIT content rule |
| | | // prohibits an attribute type that we don't know anything about. |
| | | if (allowUnknownElements) |
| | | { |
| | | attr = DirectoryServer.getDefaultAttributeType( |
| | | woidBuffer.toString()); |
| | | } |
| | | else |
| | | { |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.get( |
| | | valueStr, woidBuffer)); |
| | | } |
| | | } |
| | | |
| | | attrs.add(attr); |
| | | |
| | | |
| | | // The next character must be either a dollar sign or a closing |
| | | // parenthesis. |
| | | // The next character must be either a dollar sign or a closing parenthesis. |
| | | c = valueStr.charAt(pos++); |
| | | if (c == ')') |
| | | { |
| | |
| | | { |
| | | StringBuilder woidBuffer = new StringBuilder(); |
| | | pos = readWOID(lowerStr, woidBuffer, (pos-1)); |
| | | |
| | | AttributeType attr = schema.getAttributeType(woidBuffer.toString()); |
| | | if (attr == null) |
| | | { |
| | | // This isn't good because it means that the DIT content rule |
| | | // prohibits an attribute type that we don't know anything about. |
| | | if (allowUnknownElements) |
| | | { |
| | | attr = DirectoryServer.getDefaultAttributeType( |
| | | woidBuffer.toString()); |
| | | } |
| | | else |
| | | { |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.get(valueStr, woidBuffer)); |
| | | } |
| | | } |
| | | |
| | | attrs.add(attr); |
| | | attrs.add(getAttribute(schema, allowUnknownElements, valueStr, woidBuffer, |
| | | ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR)); |
| | | } |
| | | |
| | | prohibitedAttributes.addAll(attrs); |
| | |
| | | isObsolete, extraProperties); |
| | | } |
| | | |
| | | private static AttributeType getAttribute(Schema schema, boolean allowUnknownElements, String valueStr, |
| | | StringBuilder woidBuffer, Arg2<Object, Object> msg) throws DirectoryException |
| | | { |
| | | String woidString = woidBuffer.toString(); |
| | | AttributeType attr = schema.getAttributeType(woidString); |
| | | if (attr == null) |
| | | { |
| | | // This isn't good because it means that the DIT content rule |
| | | // refers to an attribute type that we don't know anything about. |
| | | if (!allowUnknownElements) |
| | | { |
| | | throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, |
| | | msg.get(valueStr, woidString)); |
| | | } |
| | | attr = DirectoryServer.getDefaultAttributeType(woidString); |
| | | } |
| | | return attr; |
| | | } |
| | | |
| | | /** |
| | | * Reads the next token name from the DIT content rule definition, skipping |
| | | * over any leading or trailing spaces, and appends it to the provided buffer. |