001/*- 002 * #%L 003 * Smile CDR - CDR 004 * %% 005 * Copyright (C) 2016 - 2025 Smile CDR, Inc. 006 * %% 007 * All rights reserved. 008 * #L% 009 */ 010package ca.cdr.api.model.json; 011 012import ca.uhn.fhir.model.api.annotation.ExampleSupplier; 013import com.fasterxml.jackson.annotation.JsonProperty; 014import io.swagger.v3.oas.annotations.media.Schema; 015import jakarta.annotation.Nonnull; 016import org.apache.commons.lang3.Validate; 017 018import java.util.ArrayList; 019import java.util.List; 020import java.util.function.Supplier; 021 022/** 023 * This class implements the rules used for data tokenization in the 024 * FHIR Storage module. 025 */ 026@Schema( 027 name = "TokenizationRules", 028 description = 029 "Defines a collection of rules for [FHIR Repository Tokenization](/docs/fhir_repository/tokenization.md)") 030@ExampleSupplier(TokenizationRulesJson.ExampleSupplier.class) 031public class TokenizationRulesJson implements IModelJson { 032 033 @JsonProperty("rules") 034 private List<TokenizationRuleJson> myRules; 035 036 public List<TokenizationRuleJson> getRules() { 037 if (myRules == null) { 038 myRules = new ArrayList<>(); 039 } 040 return myRules; 041 } 042 043 public void setRules(List<TokenizationRuleJson> theRules) { 044 myRules = theRules; 045 } 046 047 public TokenizationRuleJson addRule() { 048 TokenizationRuleJson rule = new TokenizationRuleJson(); 049 addRule(rule); 050 return rule; 051 } 052 053 public TokenizationRulesJson addRule(@Nonnull TokenizationRuleJson theRule) { 054 Validate.notNull(theRule, "theRule must not be null"); 055 getRules().add(theRule); 056 return this; 057 } 058 059 public static class ExampleSupplier implements Supplier<TokenizationRulesJson> { 060 @Override 061 public TokenizationRulesJson get() { 062 TokenizationRulesJson rules = new TokenizationRulesJson(); 063 064 rules.addRule() 065 .setDescription("Rule for a path including a search parameter") 066 .setPath("Patient.identifier") 067 .setSearchParameter("identifier") 068 .setSearchValueNormalization(TokenizationValueNormalizationEnum.IDENTIFIER); 069 070 rules.addRule() 071 .setDescription("Another rule for a path including a search parameter") 072 .setPath("Patient.name.family") 073 .setSearchParameter("family") 074 .setSearchValueNormalization(TokenizationValueNormalizationEnum.STRING); 075 076 rules.addRule() 077 .setDescription("Rule for a path with no associated search parameter") 078 .setPath("Patient.maritalStatus") 079 .setSearchValueNormalization(TokenizationValueNormalizationEnum.NONE); 080 081 return rules; 082 } 083 } 084}