Search in sources :

Example 21 with AttributeSchema

use of org.wso2.charon3.core.schema.AttributeSchema in project charon by wso2.

the class AbstractValidator method removeAnyReadOnlySubAttributes.

/*
     * Check for readonlySubAttributes and remove them if they have been modified. - (create method)
     *
     * @param attribute
     * @param attributeSchema
     * @throws CharonException
     */
private static void removeAnyReadOnlySubAttributes(Attribute attribute, AttributeSchema attributeSchema) throws CharonException {
    if (attribute != null) {
        List<SCIMAttributeSchema> subAttributesSchemaList = ((SCIMAttributeSchema) attributeSchema).getSubAttributeSchemas();
        if (subAttributesSchemaList != null && !subAttributesSchemaList.isEmpty()) {
            for (SCIMAttributeSchema subAttributeSchema : subAttributesSchemaList) {
                if (subAttributeSchema.getMutability() == SCIMDefinitions.Mutability.READ_ONLY) {
                    if (attribute instanceof ComplexAttribute) {
                        if (attribute.getSubAttribute(subAttributeSchema.getName()) != null) {
                            String error = "Readonly sub attribute: " + subAttributeSchema.getName() + " is set in the SCIM Attribute: " + attribute.getName() + ". Removing it.";
                            logger.debug(error);
                            ((ComplexAttribute) attribute).removeSubAttribute(subAttributeSchema.getName());
                        }
                    } else if (attribute instanceof MultiValuedAttribute) {
                        List<Attribute> values = ((MultiValuedAttribute) attribute).getAttributeValues();
                        for (Attribute value : values) {
                            if (value instanceof ComplexAttribute) {
                                if (value.getSubAttribute(subAttributeSchema.getName()) != null) {
                                    String error = "Readonly sub attribute: " + subAttributeSchema.getName() + " is set in the SCIM Attribute: " + attribute.getName() + ". Removing it.";
                                    logger.debug(error);
                                    ((ComplexAttribute) value).removeSubAttribute(subAttributeSchema.getName());
                                }
                            }
                        }
                    }
                }
                // Otherwise no complex attribute can complex sub attributes.
                if (subAttributeSchema.getType().equals(SCIMDefinitions.DataType.COMPLEX)) {
                    // check for readonly sub-sub attributes in extension.
                    // get attributes from schema.
                    Map<String, Attribute> subAttributeList = ((ComplexAttribute) attribute).getSubAttributesList();
                    for (Attribute subSubAttribute : subAttributeList.values()) {
                        removeAnyReadOnlySubAttributes(subSubAttribute, subAttributeSchema);
                    }
                }
            }
        }
    }
}
Also used : MultiValuedAttribute(org.wso2.charon3.core.attributes.MultiValuedAttribute) ComplexAttribute(org.wso2.charon3.core.attributes.ComplexAttribute) AbstractAttribute(org.wso2.charon3.core.attributes.AbstractAttribute) Attribute(org.wso2.charon3.core.attributes.Attribute) SimpleAttribute(org.wso2.charon3.core.attributes.SimpleAttribute) ComplexAttribute(org.wso2.charon3.core.attributes.ComplexAttribute) ArrayList(java.util.ArrayList) List(java.util.List) MultiValuedAttribute(org.wso2.charon3.core.attributes.MultiValuedAttribute)

Example 22 with AttributeSchema

use of org.wso2.charon3.core.schema.AttributeSchema in project charon by wso2.

the class AbstractValidator method checkForSameValues.

/*
     * check for same values in a simple singular attributes or multivalued primitive type attributes
     *
     * @param oldAttributeList
     * @param newAttributeList
     * @param attributeSchema
     * @throws BadRequestException
     */
private static void checkForSameValues(Map<String, Attribute> oldAttributeList, Map<String, Attribute> newAttributeList, AttributeSchema attributeSchema) throws BadRequestException {
    Attribute newTemporyAttribute = newAttributeList.get(attributeSchema.getName());
    Attribute oldTemporyAttribute = oldAttributeList.get(attributeSchema.getName());
    if (newTemporyAttribute instanceof SimpleAttribute) {
        if (!((((SimpleAttribute) newTemporyAttribute).getValue()).equals(((SimpleAttribute) oldTemporyAttribute).getValue()))) {
            throw new BadRequestException(ResponseCodeConstants.MUTABILITY);
        }
    } else if (newTemporyAttribute instanceof MultiValuedAttribute && !attributeSchema.getType().equals(SCIMDefinitions.DataType.COMPLEX)) {
        if (!checkListEquality(((MultiValuedAttribute) newTemporyAttribute).getAttributePrimitiveValues(), ((MultiValuedAttribute) oldTemporyAttribute).getAttributePrimitiveValues())) {
            throw new BadRequestException(ResponseCodeConstants.MUTABILITY);
        }
    }
}
Also used : MultiValuedAttribute(org.wso2.charon3.core.attributes.MultiValuedAttribute) ComplexAttribute(org.wso2.charon3.core.attributes.ComplexAttribute) AbstractAttribute(org.wso2.charon3.core.attributes.AbstractAttribute) Attribute(org.wso2.charon3.core.attributes.Attribute) SimpleAttribute(org.wso2.charon3.core.attributes.SimpleAttribute) SimpleAttribute(org.wso2.charon3.core.attributes.SimpleAttribute) BadRequestException(org.wso2.charon3.core.exceptions.BadRequestException) MultiValuedAttribute(org.wso2.charon3.core.attributes.MultiValuedAttribute)

Example 23 with AttributeSchema

use of org.wso2.charon3.core.schema.AttributeSchema in project charon by wso2.

the class User method setSimpleAttribute.

/*
     * set simple attribute in the scim object
     * @param attributeName
     * @param attributeSchema
     * @param value
     * @throws CharonException
     * @throws BadRequestException
     */
private void setSimpleAttribute(String attributeName, AttributeSchema attributeSchema, Object value) throws CharonException, BadRequestException {
    if (this.isAttributeExist(attributeName)) {
        ((SimpleAttribute) this.attributeList.get(attributeName)).updateValue(value);
    } else {
        SimpleAttribute simpleAttribute = new SimpleAttribute(attributeName, value);
        simpleAttribute = (SimpleAttribute) DefaultAttributeFactory.createAttribute(attributeSchema, simpleAttribute);
        this.attributeList.put(attributeName, simpleAttribute);
    }
}
Also used : SimpleAttribute(org.wso2.charon3.core.attributes.SimpleAttribute)

Example 24 with AttributeSchema

use of org.wso2.charon3.core.schema.AttributeSchema in project charon by wso2.

the class AttributeUtil method getAttributeURI.

/*
     * Will iterate through <code>{@code SCIMAttributeSchema}</code> objects
     *
     * @param attributeName
     * @return
     */
public static String getAttributeURI(String attributeName, SCIMResourceTypeSchema schema) throws BadRequestException {
    Iterator<AttributeSchema> attributeSchemas = schema.getAttributesList().iterator();
    while (attributeSchemas.hasNext()) {
        AttributeSchema attributeSchema = attributeSchemas.next();
        if (attributeSchema.getName().equals(attributeName) || attributeSchema.getURI().equals(attributeName)) {
            return attributeSchema.getURI();
        }
        // check in sub attributes
        String subAttributeURI = checkSCIMSubAttributeURIs(((SCIMAttributeSchema) attributeSchema).getSubAttributeSchemas(), attributeSchema, attributeName);
        if (subAttributeURI != null) {
            return subAttributeURI;
        }
    }
    String error = "Not a valid attribute name/uri";
    throw new BadRequestException(error, ResponseCodeConstants.INVALID_VALUE);
}
Also used : AttributeSchema(org.wso2.charon3.core.schema.AttributeSchema) SCIMAttributeSchema(org.wso2.charon3.core.schema.SCIMAttributeSchema) BadRequestException(org.wso2.charon3.core.exceptions.BadRequestException)

Example 25 with AttributeSchema

use of org.wso2.charon3.core.schema.AttributeSchema in project charon by wso2.

the class DefaultAttributeFactory method createAttribute.

/*
     * Returns the defined type of attribute with the user defined value
     * included and necessary attribute characteristics set
     * @param attributeSchema - Attribute schema
     * @param attribute - attribute
     * @return Attribute
     */
public static Attribute createAttribute(AttributeSchema attributeSchema, AbstractAttribute attribute) throws CharonException, BadRequestException {
    attribute.setMutability(attributeSchema.getMutability());
    attribute.setRequired(attributeSchema.getRequired());
    attribute.setReturned(attributeSchema.getReturned());
    attribute.setCaseExact(attributeSchema.getCaseExact());
    attribute.setMultiValued(attributeSchema.getMultiValued());
    attribute.setDescription(attributeSchema.getDescription());
    attribute.setUniqueness(attributeSchema.getUniqueness());
    attribute.setURI(attributeSchema.getURI());
    // Default attribute factory knows about SCIMAttribute schema
    try {
        // set data type of the attribute value, if simple attribute
        if (attribute instanceof SimpleAttribute) {
            return createSimpleAttribute(attributeSchema, (SimpleAttribute) attribute);
        } else {
            attribute.setType(attributeSchema.getType());
        }
        return attribute;
    } catch (CharonException e) {
        String error = "Unknown attribute schema.";
        throw new CharonException(error);
    } catch (BadRequestException e) {
        String error = "Violation in attribute schema. DataType doesn't match that of the value.";
        throw new BadRequestException(error, ResponseCodeConstants.INVALID_VALUE);
    }
}
Also used : BadRequestException(org.wso2.charon3.core.exceptions.BadRequestException) CharonException(org.wso2.charon3.core.exceptions.CharonException)

Aggregations

SimpleAttribute (org.wso2.charon3.core.attributes.SimpleAttribute)19 MultiValuedAttribute (org.wso2.charon3.core.attributes.MultiValuedAttribute)18 BadRequestException (org.wso2.charon3.core.exceptions.BadRequestException)18 Attribute (org.wso2.charon3.core.attributes.Attribute)17 ComplexAttribute (org.wso2.charon3.core.attributes.ComplexAttribute)17 AttributeSchema (org.wso2.charon3.core.schema.AttributeSchema)11 ArrayList (java.util.ArrayList)10 JSONObject (org.json.JSONObject)10 JSONArray (org.json.JSONArray)8 AbstractAttribute (org.wso2.charon3.core.attributes.AbstractAttribute)8 AbstractSCIMObject (org.wso2.charon3.core.objects.AbstractSCIMObject)8 List (java.util.List)7 JSONException (org.json.JSONException)7 SCIMAttributeSchema (org.wso2.charon3.core.schema.SCIMAttributeSchema)7 SCIMObject (org.wso2.charon3.core.objects.SCIMObject)6 CharonException (org.wso2.charon3.core.exceptions.CharonException)5 JSONTokener (org.json.JSONTokener)4 HashMap (java.util.HashMap)3 Map (java.util.Map)3 SCIMDefinitions (org.wso2.charon3.core.schema.SCIMDefinitions)2