public ProcessResult Process(ElementNode node, ProcessContext context = null, Dictionary <string, object> settings = null) { EnsureArg.IsNotNull(node); EnsureArg.IsNotNull(context?.VisitedNodes); EnsureArg.IsNotNull(settings); var result = new ProcessResult(); if (!ModelInfo.IsPrimitive(node.InstanceType)) { throw new AnonymizerRuleNotApplicableException( $"Generalization is not applicable on the node with type {node.InstanceType}. Only FHIR primitive nodes (ref: https://www.hl7.org/fhir/datatypes.html#primitive) are applicable."); } if (node.Value == null) { return(result); } var generalizeSetting = GeneralizeSetting.CreateFromRuleSettings(settings); foreach (var eachCase in generalizeSetting.Cases) { try { if (node.Predicate(eachCase.Key)) { node.Value = node.Scalar(eachCase.Value.ToString()); result.AddProcessRecord(AnonymizationOperations.Generalize, node); return(result); } } catch (Exception ex) { throw new AnonymizerProcessingException($"Generalize failed when processing {eachCase}.", ex); } } if (generalizeSetting.OtherValues == GeneralizationOtherValuesOperation.Redact) { node.Value = null; } result.AddProcessRecord(AnonymizationOperations.Generalize, node); return(result); }
public ProcessResult Process(ElementNode node, ProcessContext context = null, Dictionary <string, object> settings = null) { EnsureArg.IsNotNull(node); EnsureArg.IsNotNull(context?.VisitedNodes); EnsureArg.IsNotNull(settings); var result = new ProcessResult(); if (!ModelInfo.IsPrimitive(node.InstanceType) || node.Value == null) { return(result); } var generalizeSetting = GeneralizeSetting.CreateFromRuleSettings(settings); foreach (var eachCase in generalizeSetting.Cases) { try { if (node.Predicate(eachCase.Key)) { node.Value = node.Scalar(eachCase.Value); result.AddProcessRecord(AnonymizationOperations.Generalize, node); return(result); } } catch (InvalidOperationException ex) { throw new AnonymizerConfigurationErrorsException( $"Invalid cases expression '{eachCase}': {ex.Message}", ex); } } if (generalizeSetting.OtherValues == GeneralizationOtherValuesOperation.Redact) { node.Value = null; } result.AddProcessRecord(AnonymizationOperations.Generalize, node); return(result); }