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);
}
}
}
}
}
}
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);
}
}
}
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);
}
}
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);
}
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);
}
}
Aggregations