private IEnumerable <PatchOperationResult> ReplaceInternal(string path, object value, object objectToApplyTo, Operation operation) { var treeAnalysisResult = new ScimPatchObjectAnalysis( _ServerConfiguration, objectToApplyTo, path, ContractResolver, operation); if (treeAnalysisResult.ErrorType != null) { throw new ScimPatchException( treeAnalysisResult.ErrorType, operation); } var operations = new List <PatchOperationResult>(); foreach (var patchMember in treeAnalysisResult.PatchMembers) { if (treeAnalysisResult.UseDynamicLogic) { throw new NotSupportedException(); // TODO: (DG) Added support if needed. } else { operations.AddRange(ReplaceNonDynamic(value, operation, patchMember)); } } return(operations); }
/// <summary> /// The "remove" operation removes the value at the target location /// specified by the required attribute "path". /// </summary> /// <param name="operation"></param> /// <param name="objectToApplyTo"></param> /// <returns></returns> public IEnumerable <PatchOperationResult> Remove(Operation operation, object objectToApplyTo) { if (operation == null) { throw new ArgumentNullException("operation"); } if (objectToApplyTo == null) { throw new ArgumentNullException("objectToApplyTo"); } // o If "path" is unspecified, the operation fails with HTTP status // code 400 and a "scimType" error code of "noTarget". if (string.IsNullOrWhiteSpace(operation.Path)) { throw new ScimPatchException(ScimErrorType.NoTarget, operation); } var treeAnalysisResult = new ScimPatchObjectAnalysis( _ServerConfiguration, objectToApplyTo, operation.Path, ContractResolver, operation); if (treeAnalysisResult.ErrorType != null) { throw new ScimPatchException( treeAnalysisResult.ErrorType, operation); } var operations = new List <PatchOperationResult>(); foreach (var patchMember in treeAnalysisResult.PatchMembers) { if (treeAnalysisResult.UseDynamicLogic) { throw new NotSupportedException(); // TODO: (DG) If actually needed. } else { operations.Add(RemoveNonDynamic(operation, patchMember)); } } return(operations); }
private IEnumerable <PatchOperationResult> AddInternal( string path, object value, object objectToApplyTo, Operation operation) { if (objectToApplyTo == null) { throw new ArgumentNullException("objectToApplyTo"); } if (operation == null) { throw new ArgumentNullException("operation"); } // ScimPatchObjectAnalysis.cs will handle resolving the actual // path to object members and parsing any filters. var patchAnalysis = new ScimPatchObjectAnalysis( _ServerConfiguration, objectToApplyTo, path, ContractResolver, operation); if (patchAnalysis.ErrorType != null) { throw new ScimPatchException( patchAnalysis.ErrorType, operation); } var operations = new List <PatchOperationResult>(); foreach (var patchMember in patchAnalysis.PatchMembers) { if (patchAnalysis.UseDynamicLogic) { throw new NotSupportedException(); // TODO: (DG) Add support if needed. } operations.AddRange(AddNonDynamic(value, operation, patchMember)); } return(operations); }