use of org.wso2.charon3.core.attributes.MultiValuedAttribute 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.attributes.MultiValuedAttribute in project charon by wso2.
the class Group method getMembers.
/*
* get the members of the group
* @return
*/
public List<Object> getMembers() {
List<Object> memberList = new ArrayList<>();
if (this.isAttributeExist(SCIMConstants.GroupSchemaConstants.MEMBERS)) {
MultiValuedAttribute members = (MultiValuedAttribute) this.attributeList.get(SCIMConstants.GroupSchemaConstants.MEMBERS);
List<Attribute> subValuesList = members.getAttributeValues();
for (Attribute subValue : subValuesList) {
ComplexAttribute complexAttribute = (ComplexAttribute) subValue;
Map<String, Attribute> subAttributesList = complexAttribute.getSubAttributesList();
if (subAttributesList != null && subAttributesList.containsKey(SCIMConstants.CommonSchemaConstants.VALUE)) {
memberList.add(((SimpleAttribute) (subAttributesList.get(SCIMConstants.CommonSchemaConstants.VALUE))).getValue());
}
}
return memberList;
} else {
return null;
}
}
use of org.wso2.charon3.core.attributes.MultiValuedAttribute in project charon by wso2.
the class ListedResource method setResources.
/*
* set the listed resources
* @param valueWithAttributes
*/
public void setResources(Map<String, Attribute> valueWithAttributes) {
if (!isAttributeExist(SCIMConstants.ListedResourceSchemaConstants.RESOURCES)) {
MultiValuedAttribute resourcesAttribute = new MultiValuedAttribute(SCIMConstants.ListedResourceSchemaConstants.RESOURCES);
resourcesAttribute.setComplexValueWithSetOfSubAttributes(valueWithAttributes);
attributeList.put(SCIMConstants.ListedResourceSchemaConstants.RESOURCES, resourcesAttribute);
} else {
((MultiValuedAttribute) attributeList.get(SCIMConstants.ListedResourceSchemaConstants.RESOURCES)).setComplexValueWithSetOfSubAttributes(valueWithAttributes);
}
}
use of org.wso2.charon3.core.attributes.MultiValuedAttribute in project charon by wso2.
the class User method setGroup.
private void setGroup(ComplexAttribute groupPropertiesAttribute) throws CharonException, BadRequestException {
MultiValuedAttribute groupsAttribute;
if (this.attributeList.containsKey(SCIMConstants.UserSchemaConstants.GROUPS)) {
groupsAttribute = (MultiValuedAttribute) this.attributeList.get(SCIMConstants.UserSchemaConstants.GROUPS);
groupsAttribute.setAttributeValue(groupPropertiesAttribute);
} else {
groupsAttribute = new MultiValuedAttribute(SCIMConstants.UserSchemaConstants.GROUPS);
groupsAttribute.setAttributeValue(groupPropertiesAttribute);
groupsAttribute = (MultiValuedAttribute) DefaultAttributeFactory.createAttribute(SCIMSchemaDefinitions.SCIMUserSchemaDefinition.GROUPS, groupsAttribute);
this.attributeList.put(SCIMConstants.UserSchemaConstants.GROUPS, groupsAttribute);
}
}
use of org.wso2.charon3.core.attributes.MultiValuedAttribute in project charon by wso2.
the class PatchOperationUtil method doPatchReplaceOnResource.
/*
*
* @param oldResource
* @param copyOfOldResource
* @param schema
* @param decoder
* @param operation
* @return
* @throws CharonException
*/
private static AbstractSCIMObject doPatchReplaceOnResource(AbstractSCIMObject oldResource, AbstractSCIMObject copyOfOldResource, SCIMResourceTypeSchema schema, JSONDecoder decoder, PatchOperation operation) throws CharonException {
try {
AbstractSCIMObject attributeHoldingSCIMObject = decoder.decode(operation.getValues().toString(), schema);
if (oldResource != null) {
for (String attributeName : attributeHoldingSCIMObject.getAttributeList().keySet()) {
Attribute oldAttribute = oldResource.getAttribute(attributeName);
if (oldAttribute != null) {
// if the attribute is there, append it.
if (oldAttribute.getMultiValued()) {
// this is multivalued complex case.
MultiValuedAttribute attributeValue = (MultiValuedAttribute) attributeHoldingSCIMObject.getAttribute(attributeName);
if (oldAttribute.getMutability().equals(SCIMDefinitions.Mutability.IMMUTABLE) || oldAttribute.getMutability().equals(SCIMDefinitions.Mutability.READ_ONLY)) {
throw new BadRequestException("Immutable or Read-Only attributes can not be modified.", ResponseCodeConstants.MUTABILITY);
} else {
// delete the old attribute
oldResource.deleteAttribute(attributeName);
// replace with new attribute
oldResource.setAttribute(attributeValue);
}
} else if (oldAttribute.getType().equals(SCIMDefinitions.DataType.COMPLEX)) {
// this is the complex attribute case.
Map<String, Attribute> subAttributeList = ((ComplexAttribute) attributeHoldingSCIMObject.getAttribute(attributeName)).getSubAttributesList();
for (Map.Entry<String, Attribute> subAttrib : subAttributeList.entrySet()) {
Attribute subAttribute = oldAttribute.getSubAttribute(subAttrib.getKey());
if (subAttribute != null) {
if (subAttribute.getType().equals(SCIMDefinitions.DataType.COMPLEX)) {
if (subAttribute.getMultiValued()) {
// extension schema is the only one who reaches here.
MultiValuedAttribute attributeSubValue = (MultiValuedAttribute) ((ComplexAttribute) attributeHoldingSCIMObject.getAttribute(attributeName)).getSubAttribute(subAttrib.getKey());
if (subAttribute.getMutability().equals(SCIMDefinitions.Mutability.IMMUTABLE) || subAttribute.getMutability().equals(SCIMDefinitions.Mutability.READ_ONLY)) {
throw new BadRequestException("Immutable or Read-Only attributes can not be modified.", ResponseCodeConstants.MUTABILITY);
} else {
// delete the old attribute
((ComplexAttribute) (oldAttribute)).removeSubAttribute(subAttribute.getName());
// replace with new attribute
((ComplexAttribute) (oldAttribute)).setSubAttribute(attributeSubValue);
}
} else {
// extension schema is the only one who reaches here.
Map<String, Attribute> subSubAttributeList = ((ComplexAttribute) (attributeHoldingSCIMObject.getAttribute(attributeName).getSubAttribute(subAttrib.getKey()))).getSubAttributesList();
for (Map.Entry<String, Attribute> subSubAttrb : subSubAttributeList.entrySet()) {
Attribute subSubAttribute = oldAttribute.getSubAttribute(subAttrib.getKey()).getSubAttribute(subSubAttrb.getKey());
if (subSubAttribute != null) {
if (subSubAttribute.getMultiValued()) {
if (subSubAttribute.getMutability().equals(SCIMDefinitions.Mutability.IMMUTABLE) || subSubAttribute.getMutability().equals(SCIMDefinitions.Mutability.READ_ONLY)) {
throw new BadRequestException("Immutable or Read-Only attributes " + "can not be modified.", ResponseCodeConstants.MUTABILITY);
} else {
// delete the old attribute
((ComplexAttribute) (oldAttribute.getSubAttribute(subAttrib.getKey()))).removeSubAttribute(subSubAttribute.getName());
// replace with new attribute
((ComplexAttribute) (oldAttribute.getSubAttribute(subAttrib.getKey()))).setSubAttribute(subSubAttribute);
}
} else {
((SimpleAttribute) subSubAttribute).setValue(((SimpleAttribute) subSubAttrb.getValue()));
}
} else {
((ComplexAttribute) (subAttribute)).setSubAttribute(subSubAttrb.getValue());
}
}
}
} else {
if (subAttribute.getMutability().equals(SCIMDefinitions.Mutability.IMMUTABLE) || subAttribute.getMutability().equals(SCIMDefinitions.Mutability.READ_ONLY)) {
throw new BadRequestException("Immutable or Read-Only " + "attributes can not be modified.", ResponseCodeConstants.MUTABILITY);
} else {
// delete the old attribute
((ComplexAttribute) (oldAttribute)).removeSubAttribute(subAttribute.getName());
// replace with new attribute
((ComplexAttribute) (oldAttribute)).setSubAttribute(subAttributeList.get(subAttribute.getName()));
}
}
} else {
// add the attribute
((ComplexAttribute) oldAttribute).setSubAttribute(subAttrib.getValue());
}
}
} else {
if (oldAttribute.getMutability().equals(SCIMDefinitions.Mutability.IMMUTABLE) || oldAttribute.getMutability().equals(SCIMDefinitions.Mutability.READ_ONLY)) {
throw new BadRequestException("Immutable or Read-Only attributes can not be modified.", ResponseCodeConstants.MUTABILITY);
} else {
// this is the simple attribute case.replace the value
((SimpleAttribute) oldAttribute).setValue(((SimpleAttribute) attributeHoldingSCIMObject.getAttribute(oldAttribute.getName())).getValue());
}
}
} else {
// add the attribute
oldResource.setAttribute(attributeHoldingSCIMObject.getAttributeList().get(attributeName));
}
}
AbstractSCIMObject validatedResource = ServerSideValidator.validateUpdatedSCIMObject(copyOfOldResource, oldResource, schema);
return validatedResource;
} else {
throw new CharonException("Error in getting the old resource.");
}
} catch (BadRequestException | CharonException e) {
throw new CharonException("Error in performing the add operation", e);
}
}
Aggregations