From b2e2c68f7ebdc40217e63c9c160ab1ef01277af2 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 22 Nov 2022 12:45:33 -0300 Subject: [PATCH 1/5] minor typo fixes in validation messages --- .../src/main/resources/Messages.properties | 107 +++++++++--------- pom.xml | 2 +- 2 files changed, 54 insertions(+), 55 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages.properties b/org.hl7.fhir.utilities/src/main/resources/Messages.properties index 8ee460063..4a0e57ae1 100644 --- a/org.hl7.fhir.utilities/src/main/resources/Messages.properties +++ b/org.hl7.fhir.utilities/src/main/resources/Messages.properties @@ -47,7 +47,7 @@ Extension_EXT_URL_Absolute = Extension.url must be an absolute URL Extension_EXT_Unknown = Unknown extension {0} Extension_EXT_Unknown_NotHere = The extension {0} is unknown, and not allowed here Extension_EXT_Url_NotFound = Extension.url is required -Extension_EXT_Version_Internal = Extension url ''{0}'' evaluation state illegal +Extension_EXT_Version_Internal = Extension url ''{0}'' evaluation state invalid Extension_EXT_Version_Invalid = Extension url ''{0}'' is not valid (invalid Version ''{1}'') Extension_EXT_Version_InvalidId = Extension url ''{0}'' is not valid (invalid Element id ''{1}'') Extension_EXT_Version_NoChange = Extension url ''{0}'' is not valid (Element id ''{1}'' is valid, but cannot be used in a cross-version paradigm because there has been no changes across the relevant versions) @@ -184,11 +184,11 @@ Terminology_TX_System_ValueSet2 = The Coding references a value set, not a code Terminology_TX_ValueSet_NotFound = ValueSet {0} not found by validator Terminology_TX_ValueSet_NotFound_CS = Found a reference to a CodeSystem ({0}) where a ValueSet belongs Type_Specific_Checks_DT_Base64_Valid = The value ''{0}'' is not a valid Base64 value -Type_Specific_Checks_DT_Boolean_Value = boolean values must be ''true'' or ''false'' +Type_Specific_Checks_DT_Boolean_Value = Boolean values must be ''true'' or ''false'' Type_Specific_Checks_DT_Code_WS = The code ''{0}'' is not valid (whitespace rules) Type_Specific_Checks_DT_DateTime_Reasonable = The value ''{0}'' is outside the range of reasonable years - check for data entry error Type_Specific_Checks_DT_DateTime_Regex = The instant ''{0}'' is not valid (by regex) -Type_Specific_Checks_DT_DateTime_TZ = if a date has a time, it must have a timezone +Type_Specific_Checks_DT_DateTime_TZ = If a date has a time, it must have a timezone Type_Specific_Checks_DT_DateTime_Valid = Not a valid date/time ({0}) Type_Specific_Checks_DT_Date_Valid = Not a valid date ({0}) Type_Specific_Checks_DT_Decimal_Range = The value ''{0}'' is outside the range of commonly/reasonably supported decimals @@ -207,7 +207,7 @@ Type_Specific_Checks_DT_Integer_Valid = The value ''{0}'' is not a valid integer Type_Specific_Checks_DT_OID_Start = OIDs must start with urn:oid: Type_Specific_Checks_DT_OID_Valid = OIDs must be valid ({0}) Type_Specific_Checks_DT_Primitive_Length = value is longer than permitted maximum length of {0} -Type_Specific_Checks_DT_Primitive_NotEmpty = @value cannot be empty +Type_Specific_Checks_DT_Primitive_NotEmpty = value cannot be empty Type_Specific_Checks_DT_Primitive_Regex = Element value ''{0}'' does not meet regex ''{1}'' Type_Specific_Checks_DT_Primitive_ValueExt = Primitive types must have a value or must have child extensions Type_Specific_Checks_DT_Primitive_WS = Primitive types should not only be whitespace @@ -238,21 +238,21 @@ Validation_VAL_Profile_MultipleMatches_other = Found multiple matching profiles Validation_VAL_Profile_NoDefinition = No definition found for resource type ''{0}'' Validation_VAL_Profile_NoMatch = Unable to find a match for the specified profile among choices: {0} Validation_VAL_Profile_NoSnapshot = StructureDefinition {0} has no snapshot - validation is against the snapshot, so it must be provided -Validation_VAL_Profile_NoType = The type of element {0} is not known, which is illegal. Valid types at this point are {1} +Validation_VAL_Profile_NoType = The type of element {0} is not known, which is invalid. Valid types at this point are {1} Validation_VAL_Profile_NotAllowed = This element is not allowed by the profile {0} Validation_VAL_Profile_NotSlice = This element does not match any known slice {0} and slicing is CLOSED: {1} Validation_VAL_Profile_OutOfOrder = As specified by profile {0}, Element ''{1}'' is out of order (found after {2}) Validation_VAL_Profile_SliceOrder = As specified by profile {0}, Element ''{1}'' is out of order in ordered slice -Validation_VAL_Profile_Unknown = Profile reference ''{0}'' has not been checked because it is unknown +Validation_VAL_Profile_Unknown = Profile reference ''{0}'' has not been checked because it is unknown VALIDATION_VAL_PROFILE_UNKNOWN_NOT_POLICY = Profile reference ''{0}'' has not been checked because it is unknown, and the validator is set to not fetch unknown profiles VALIDATION_VAL_PROFILE_UNKNOWN_ERROR = Profile reference ''{0}'' has not been checked because it is unknown, and fetching it resulted in the error {1} VALIDATION_VAL_PROFILE_UNKNOWN_ERROR_NETWORK = Profile reference ''{0}'' has not been checked because it is unknown, and the host {1} cannot be found Validation_VAL_Unknown_Profile = Unknown profile {0} VALIDATION_VAL_PROFILE_DEPENDS_NOT_RESOLVED = Profile {1} identifies {2} as a dependency (using the extension http://hl7.org/fhir/StructureDefinition/structuredefinition-dependencies), but this profile could not be found -XHTML_XHTML_Attribute_Illegal = Illegal attribute name in the XHTML (''{0}'' on ''{1}'') -XHTML_XHTML_Element_Illegal = Illegal element name in the XHTML (''{0}'') -XHTML_XHTML_Entity_Illegal = Illegal entity in the XHTML (''{0}'') -XHTML_XHTML_Image_Reference_Illegal = Illegal Image Reference in the XHTML (''{0}'') +XHTML_XHTML_Attribute_Illegal = Invalid attribute name in the XHTML (''{0}'' on ''{1}'') +XHTML_XHTML_Element_Illegal = Invalid element name in the XHTML (''{0}'') +XHTML_XHTML_Entity_Illegal = Invalid entity in the XHTML (''{0}'') +XHTML_XHTML_Image_Reference_Illegal = Invalid Image Reference in the XHTML (''{0}'') XHTML_XHTML_NS_InValid = Wrong namespace on the XHTML (''{0}'', should be ''{1}'') XHTML_XHTML_Name_Invalid = Wrong name on the XHTML (''{0}'') - must start with div _DT_Fixed_Wrong = Value is ''{0}'' but must be ''{1}'' @@ -307,8 +307,8 @@ Not_done_yet_ValidatorHostServicesresolveFunction_ = Not done yet (ValidatorHost Unable_to_find_base_definition_for_logical_model__from_ = Unable to find base definition for logical model: {0} from {1} Same_id_on_multiple_elements__in_ = Same id ''{0}'' on multiple elements {1}/{2} in {3} No_path_on_element_Definition__in_ = No path on element Definition {0} in {1} -needs_a_snapshot = needs a snapshot -not_the_right_kind_of_structure_to_generate_schematrons_for = not the right kind of structure to generate schematrons for +needs_a_snapshot = Needs a snapshot +not_the_right_kind_of_structure_to_generate_schematrons_for = Not the right kind of structure to generate schematrons for Not_handled_yet_sortElements_ = Not handled yet (sortElements: {0}:{1}) Unable_to_resolve_profile__in_element_ = Unable to resolve profile {0} in element {1} Cant_have_children_on_an_element_with_a_polymorphic_type__you_must_slice_and_constrain_the_types_first_sortElements_ = Can''t have children on an element with a polymorphic type - you must slice and constrain the types first (sortElements: {0}:{1}) @@ -318,18 +318,18 @@ Internal_recursion_detection_find_loop_path_recursion____check_paths_are_valid_f Internal_error___type_not_known_ = Internal error - type not known {0} Unable_to_find_element_ = Unable to find element {0} Error_generating_table_for_profile__ = Error generating table for profile {0}: {1} -StructureDefinition__at__illegal_constrained_type__from__in_ = StructureDefinition {0} at {1}: illegal constrained type {2} from {3} in {4} +StructureDefinition__at__illegal_constrained_type__from__in_ = StructureDefinition {0} at {1}: invalid constrained type {2} from {3} in {4} Error_at__The_target_profile__is_not__valid_constraint_on_the_base_ = Error at {0}#{1}: The target profile {2} is not a valid constraint on the base ({3}) Error_in_profile__at__Base_isSummary___derived_isSummary__ = Error in profile {0} at {1}: Base isSummary = {2}, derived isSummary = {3} -StructureDefinition__at__illegal_attempt_to_change_a_binding_from__to_ = StructureDefinition {0} at {1}: illegal attempt to change a binding from {2} to {3} +StructureDefinition__at__illegal_attempt_to_change_a_binding_from__to_ = StructureDefinition {0} at {1}: invalid attempt to change a binding from {2} to {3} Unexpected_condition_in_differential_typeslicetypelistsize__1_at_ = Unexpected condition in differential: type-slice.type-list.size() != 1 at {0}/{1} Unexpected_condition_in_differential_typeslicetypelistsize__10_and_implicit_slice_name_does_not_contain_a_valid_type__at_ = Unexpected condition in differential: type-slice.type-list.size() == 10 and implicit slice name does not contain a valid type (''{0}''?) at {1}/{2} Attempt_to_use_a_snapshot_on_profile__as__before_it_is_generated = Attempt to use a snapshot on profile ''{0}'' as {1} before it is generated -null_min = null min +null_min = Null min _has_children__for_type__in_profile__but_cant_find_type = {0} has children ({1}) for type {2} in profile {3}, but can''t find type _has_children__and_multiple_types__in_profile_ = {0} has children ({1}) and multiple types ({2}) in profile {3} Adding_wrong_path = Adding wrong path -Named_items_are_out_of_order_in_the_slice=Named items are out of order in the slice +Named_items_are_out_of_order_in_the_slice = Named items are out of order in the slice The_base_snapshot_marks_a_slicing_as_closed_but_the_differential_tries_to_extend_it_in__at__ = The base snapshot marks a slicing as closed, but the differential tries to extend it in {0} at {1} ({2}) Not_done_yet = Not done yet Unknown_type__at_ = Unknown type {0} at {1} @@ -337,7 +337,7 @@ Differential_walks_into____but_the_base_does_not_and_there_is_not_a_single_fixed Slicing_rules_on_differential__do_not_match_those_on_base___rule___ = Slicing rules on differential ({0}) do not match those on base ({1}) - rule @ {2} ({3}) Slicing_rules_on_differential__do_not_match_those_on_base___disciminator___ = Slicing rules on differential ({0}) do not match those on base ({1}) - disciminator @ {2} ({3}) Slicing_rules_on_differential__do_not_match_those_on_base___order___ = Slicing rules on differential ({0}) do not match those on base ({1}) - order @ {2} ({3}) -not_done_yet__slicing__types__ = not done yet - slicing / types @ {0} +not_done_yet__slicing__types__ = Not done yet - slicing / types @ {0} Invalid_slicing__there_is_more_than_one_type_slice_at__but_one_of_them__has_min__1_so_the_other_slices_cannot_exist=Invalid slicing: there is more than one type slice at {0}, but one of them ({1}) has min = 1, so the other slices cannot exist Did_not_find_type_root_ = Did not find type root: {0} Error_at_path__Slice_for_type__has_wrong_type_ = Error at path {0}: Slice for type ''{1}'' has wrong type ''{2}'' @@ -349,7 +349,6 @@ Error_at_path__in__Type_slicing_with_slicingdiscriminatorcount__1 = Error at pat Error_at_path__in__Type_slicing_with_slicingordered__true = Error at path {0} in {1}: Type slicing with slicing.ordered = true Adding_wrong_path_in_profile___vs_ = Adding wrong path in profile {0}: {1} vs {2} _has_no_children__and_no_types_in_profile_ = {0} has no children ({1}) and no types in profile {2} -not_done_yet = not done yet Did_not_find_single_slice_ = Did not find single slice: {0} Differential_does_not_have_a_slice__b_of_____in_profile_ = Differential in profile {5} does not have a slice at {6} (on {0}, position {1} of {2} / {3} / {4}) Attempt_to_a_slice_an_element_that_does_not_repeat__from__in_ = Attempt to a slice an element that does not repeat: {0}/{1} from {2} in {3}, at element {4} (slice = {5}) @@ -357,33 +356,33 @@ Unable_to_resolve_reference_to_ = Unable to resolve reference to {0} Unable_to_find_element__in_ = Unable to find element {0} in {1} Unable_to_find_base__for_ = Unable to find base {0} for {1} Adding_wrong_path__outcomegetPath___resultPathBase__ = Adding wrong path - outcome.getPath() = {0}, resultPathBase = {1} -Illegal_path__in_differential_in__illegal_characters_ = Illegal path ''{0}'' in differential in {1}: illegal characters [] -Illegal_path__in_differential_in__illegal_character_ = Illegal path ''{0}'' in differential in {1}: illegal character ''{2}'' -Illegal_path__in_differential_in__no_unicode_whitespace = Illegal path ''{0}'' in differential in {1}: no unicode whitespace -Illegal_path__in_differential_in__name_portion_exceeds_64_chars_in_length = Illegal path ''{0}'' in differential in {1}: name portion exceeds 64 chars in length -Illegal_path__in_differential_in__name_portion_mising_ = Illegal path ''{0}'' in differential in {1}: name portion missing (''..'') -Illegal_path__in_differential_in__must_start_with_ = Illegal path ''{0}'' in differential in {1}: must start with {2}.{3} +Illegal_path__in_differential_in__illegal_characters_ = Invalid path ''{0}'' in differential in {1}: invalid characters [] +Illegal_path__in_differential_in__illegal_character_ = Invalid path ''{0}'' in differential in {1}: invalid character ''{2}'' +Illegal_path__in_differential_in__no_unicode_whitespace = Invalid path ''{0}'' in differential in {1}: no unicode whitespace +Illegal_path__in_differential_in__name_portion_exceeds_64_chars_in_length = Invalid path ''{0}'' in differential in {1}: name portion exceeds 64 chars in length +Illegal_path__in_differential_in__name_portion_mising_ = Invalid path ''{0}'' in differential in {1}: name portion missing (''..'') +Illegal_path__in_differential_in__must_start_with_ = Invalid path ''{0}'' in differential in {1}: must start with {2}.{3} No_path_value_on_element_in_differential_in_ = No path value on element in differential in {0} No_path_on_element_in_differential_in_ = No path on element in differential in {0} Unxpected_internal_condition__no_source_on_diff_element = Unexpected internal condition - no source on diff element -type_on_first_snapshot_element_for__in__from_ = type on first snapshot element for {0} in {1} from {2} -type_on_first_differential_element = type on first differential element! +type_on_first_snapshot_element_for__in__from_ = Type on first snapshot element for {0} in {1} from {2} +type_on_first_differential_element = Type on first differential element! Circular_snapshot_references_detected_cannot_generate_snapshot_stack__ = Circular snapshot references detected; cannot generate snapshot (stack = {0}) Base__Derived_profiles_have_different_types____vs___ = Base & Derived profiles have different types ({0} = {1} vs {2} = {3}) Derived_profile__has_no_derivation_value_and_so_cant_be_processed = Derived profile {0} has no derivation value and so can''t be processed Derived_profile__has_no_type = Derived profile {0} has no type Base_profile__has_no_type = Base profile {0} has no type -no_derived_structure_provided = no derived structure provided -no_base_profile_provided = no base profile provided -element_id__null__on_ = element id = null: {0} on {1} -element__null_ = element = null: {0} +no_derived_structure_provided = No derived structure provided +no_base_profile_provided = No base profile provided +element_id__null__on_ = Element id = null: {0} on {1} +element__null_ = Element = null: {0} getSliceList_should_only_be_called_when_the_element_has_slicing = getSliceList should only be called when the element has slicing Unable_to_resolve_name_reference__at_path_ = Unable to resolve name reference {0} at path {1} Details_for__matching_against_Profile_ = Details for {0} matching against profile {1} Does_not_match_slice_ = Does not match slice ''{0}'' (discriminator: {1}) Profile__does_not_match_for__because_of_the_following_profile_issues__ = Profile {0} does not match for {1} because of the following profile issues: {2} This_element_does_not_match_any_known_slice_ = This element does not match any known slice {0} -defined_in_the_profile = defined in the profile +defined_in_the_profile = Defined in the profile This_does_not_appear_to_be_a_FHIR_resource_unknown_name_ = This does not appear to be a FHIR resource (unknown name ''{0}'') This_cannot_be_parsed_as_a_FHIR_object_no_name = This cannot be parsed as a FHIR object (no name) This_does_not_appear_to_be_a_FHIR_resource_unknown_namespacename_ = This does not appear to be a FHIR resource (unknown namespace/name ''{0}::{1}'') @@ -426,16 +425,16 @@ Contained_resource_does_not_appear_to_be_a_FHIR_resource_unknown_name_ = Contain Unknown_Date_format_ = Unknown Date format ''{0}'' Unknown_Data_format_ = Unknown Data format ''{0}'' No_type_found_on_ = No type found on ''{0}'' -error_writing_number__to_JSON = error writing number ''{0}'' to JSON +error_writing_number__to_JSON = Error writing number ''{0}'' to JSON Unable_to_process_request_for_resource_for___ = Unable to process request for resource for {0} / {1} Resource_type_mismatch_for___ = Resource type mismatch for {0} / {1} -not_done_yet_cant_fetch_ = not done yet: can''t fetch {0} +not_done_yet_cant_fetch_ = Not done yet: can''t fetch {0} Attempt_to_use_Terminology_server_when_no_Terminology_server_is_available = Attempt to use Terminology server when no Terminology server is available No_ExpansionProfile_provided = No ExpansionProfile provided Can_only_specify_profile_in_the_context = Can only specify profile in the context -no_url_in_expand_value_set_2 = no url in expand value set 2 -no_url_in_expand_value_set = no url in expand value set -no_value_set = value set has no url property +no_url_in_expand_value_set_2 = No url in expand value set 2 +no_url_in_expand_value_set = No url in expand value set +no_value_set = ValueSet has no url property No_Parameters_provided_to_expandVS = No Parameters provided to expandVS No_Expansion_Parameters_provided = No Expansion Parameters provided Unable_to_resolve_value_Set_ = Unable to resolve value Set {0} @@ -474,7 +473,7 @@ Unable_to_resolve_system__no_value_set = Unable to resolve system - no value set This_base_property_must_be_an_Array_not_ = This base property must be an Array, not {0} This_property_must_be_an_Array_not_ = This property must be an Array, not {0} documentmsg = (document) -xml_attr_value_invalid = The XML Attribute {0} has an illegal character +xml_attr_value_invalid = The XML Attribute {0} has an invalid character xml_encoding_invalid = The XML encoding is invalid (must be UTF-8) xml_stated_encoding_invalid = The XML encoding stated in the header is invalid (must be ''UTF-8'' if stated) XHTML_URL_INVALID = The URL is not valid because ''({1})'': {0} @@ -539,7 +538,7 @@ TYPE_SPECIFIC_CHECKS_DT_BASE64_TOO_LONG = Base64 size is {0} bytes which exceeds TYPE_SPECIFIC_CHECKS_DT_DECIMAL_CHARS = Found {0} decimal places which exceeds the stated limit of {1} digits Validation_VAL_Profile_WrongType = Specified profile type was ''{0}'' in profile ''{2}'', but found type ''{1}'' Validation_VAL_Profile_WrongType2 = Type mismatch processing profile {0} at path {1}: The element type is {4}, but the profile {3} is for a different type {2} -VALIDATION_VAL_ILLEGAL_TYPE_CONSTRAINT = Illegal constraint in profile {0} at path {1} - cannot constrain to type {2} from base types {3} +VALIDATION_VAL_ILLEGAL_TYPE_CONSTRAINT = Invalid constraint in profile {0} at path {1} - cannot constrain to type {2} from base types {3} EXTENSION_EXTP_CONTEXT_WRONG_XVER = The extension {0} from FHIR version {3} is not allowed to be used at this point (allowed = {1}; this element is [{2}; this is a warning since contexts may be renamed between FHIR versions) EXTENSION_EXTM_CONTEXT_WRONG_XVER = The modifier extension {0} from FHIR version {3} is not allowed to be used at this point (allowed = {1}; this element is [{2}; this is a warning since contexts may be renamed between FHIR versions) SECURITY_STRING_CONTENT_ERROR = The string value contains text that looks like embedded HTML tags, which are not allowed for security reasons in this context @@ -584,7 +583,7 @@ FHIRPATH_LEFT_VALUE_WRONG_TYPE = Error evaluating FHIRPath expression: left oper FHIRPATH_RIGHT_VALUE_one = FHIRPATH_RIGHT_VALUE_other = Error evaluating FHIRPath expression: right operand to {1} can only have 1 value, but has {0} values FHIRPATH_RIGHT_VALUE_WRONG_TYPE = Error evaluating FHIRPath expression: right operand to {0} has the wrong type {1} -FHIRPATH_OP_INCOMPATIBLE = Error evaluating FHIRPath expression {0}: left and right operand have incompatible or illegal types ({1}, {2}) +FHIRPATH_OP_INCOMPATIBLE = Error evaluating FHIRPath expression {0}: left and right operand have incompatible or invalid types ({1}, {2}) FHIRPATH_HO_HOST_SERVICES = Internal Error evaluating FHIRPath expression: No host services are provided ({0}) FHIRPATH_WRONG_PARAM_TYPE = Error evaluating FHIRPath expression: The parameter type {2} is not legal for {0} parameter {1}. expecting {3} FHIRPATH_ORDERED_ONLY = Error evaluating FHIRPath expression: The function {0} can only be used on ordered collections @@ -599,21 +598,21 @@ FHIRPATH_CHECK_FAILED = Error evaluating FHIRPath expression: The check {0} fail FHIRPATH_NO_TYPE = Error evaluating FHIRPath expression: The type ''{0}'' is unknown or not supported at {1} FHIRPATH_DISCRIMINATOR_NAME_ALREADY_SLICED = Error in discriminator at {0}: found a sliced element while resolving the fixed value for one of the slices FHIRPATH_DISCRIMINATOR_THIS_CANNOT_FIND = Problem with use of resolve() - profile {0} on {1} could not be resolved -FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE = illegal use of resolve() in discriminator - no type on element {0} +FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE = Invalid use of resolve() in discriminator - no type on element {0} #The following error cannot occur for a single item. _one case left intentionally blank. FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_one = -FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_other = Illegal use of resolve() in discriminator - {0} possible types on {1} (can only be one) -FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE = illegal use of resolve() in discriminator - type on {0} is not Reference {1} +FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_other = Invalid use of resolve() in discriminator - {0} possible types on {1} (can only be one) +FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE = Invalid use of resolve() in discriminator - type on {0} is not Reference {1} #The following error cannot occur for a single item. _one case left intentionally blank. FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_one = -FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_other = illegal use of resolve() in discriminator - {0} possible target type profiles on {1} (can only be one) +FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_other = Invalid use of resolve() in discriminator - {0} possible target type profiles on {1} (can only be one) FHIRPATH_RESOLVE_DISCRIMINATOR_CANT_FIND = Problem with use of resolve() - profile {0} on {1} could not be resolved -FHIRPATH_DISCRIMINATOR_TYPE_NONE = illegal use of ofType() in discriminator - no type on element {0} -FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE = illegal use of ofType() in discriminator - Multiple possible types on {0} -FHIRPATH_DISCRIMINATOR_NO_CODE = illegal use of ofType() in discriminator - Type has no code on {0} -FHIRPATH_DISCRIMINATOR_BAD_NAME = illegal function name {0}() in discriminator -FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_GROUP = illegal expression syntax in discriminator (group ''{0}'') -FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_CONST = illegal expression syntax in discriminator (const) +FHIRPATH_DISCRIMINATOR_TYPE_NONE = Invalid use of ofType() in discriminator - no type on element {0} +FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE = Invalid use of ofType() in discriminator - Multiple possible types on {0} +FHIRPATH_DISCRIMINATOR_NO_CODE = Invalid use of ofType() in discriminator - Type has no code on {0} +FHIRPATH_DISCRIMINATOR_BAD_NAME = Invalid function name {0}() in discriminator +FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_GROUP = Invalid expression syntax in discriminator (group ''{0}'') +FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_CONST = Invalid expression syntax in discriminator (const) FHIRPATH_DISCRIMINATOR_CANT_FIND = Unable to resolve discriminator in definitions: {0} in profile {1} on element {2}, looking in profile {3} FHIRPATH_DISCRIMINATOR_CANT_FIND_EXTENSION = Unable to resolve discriminator {0} on {2} found in the definitions because the extension {1} wasn''t found in the profile {3} FHIRPATH_DISCRIMINATOR_NOTYPE = Error in discriminator at {0}: no children, no type @@ -640,8 +639,8 @@ RENDER_BUNDLE_HEADER_ENTRY = Entry {0} RENDER_BUNDLE_HEADER_ENTRY_URL = Entry {0} - fullUrl = {1} RENDER_BUNDLE_RESOURCE = Resource {0}: RENDER_BUNDLE_SEARCH = Search: -RENDER_BUNDLE_SEARCH_MODE = mode = {0} -RENDER_BUNDLE_SEARCH_SCORE = score = {0} +RENDER_BUNDLE_SEARCH_MODE = Mode = {0} +RENDER_BUNDLE_SEARCH_SCORE = Score = {0} RENDER_BUNDLE_RESPONSE = Response: RENDER_BUNDLE_LOCATION = Location = {0} RENDER_BUNDLE_ETAG = ETag = {0} @@ -661,7 +660,7 @@ RENDER_BUNDLE_HEADER_DOC_ENTRY_U = {0}. {1} RENDER_BUNDLE_HEADER_DOC_ENTRY_RD = {0}. {2}/{3} UNABLE_TO_CHECK_IF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_ = Unable to determine whether the provided codes are in the value set {0} because the value set or a code system it depends on is not known to the validator TERMINOLOGY_TX_SYSTEM_WRONG_HTML = The code system reference {0} is wrong - the code system reference cannot be to an HTML page. This may be the correct reference: {1} -TERMINOLOGY_TX_SYSTEM_WRONG_BUILD = The code system reference {0} is wrong - the code system reference cannot be a reference to build.fhir.org. This may be the correct reference: {1} +TERMINOLOGY_TX_SYSTEM_WRONG_BUILD = The code system reference {0} is wrong - the code system reference cannot be a reference to build.fhir.org. This may be the correct reference: {1} FHIRPATH_BAD_DATE = Unable to parse Date {0} FHIRPATH_NUMERICAL_ONLY = Error evaluating FHIRPath expression: The function {0} can only be used on integer, decimal or Quantity but found {1} FHIRPATH_DECIMAL_ONLY = Error evaluating FHIRPath expression: The function {0} can only be used on a decimal but found {1} @@ -671,7 +670,7 @@ FHIRPATH_FOCUS_one = FHIRPATH_FOCUS_other = Error evaluating FHIRPath expression: focus for {0} can only have one value, but has {0} values REFERENCE_REF_SUSPICIOUS = The syntax of the reference ''{0}'' looks incorrect, and it should be checked TYPE_SPECIFIC_CHECKS_DT_QTY_NO_ANNOTATIONS = UCUM Codes that contain human readable annotations like {0} can be misleading. Best Practice is not to use annotations in the UCUM code, and rather to make sure that Quantity.unit is correctly human readable -XHTML_XHTML_ELEMENT_ILLEGAL_IN_PARA = Illegal element name inside in a paragraph in the XHTML (''{0}'') +XHTML_XHTML_ELEMENT_ILLEGAL_IN_PARA = Invalid element name inside in a paragraph in the XHTML (''{0}'') UNSUPPORTED_IDENTIFIER_PATTERN_PROPERTY_NOT_SUPPORTED_FOR_DISCRIMINATOR_FOR_SLICE = Unsupported property {3} on type {2} for pattern for discriminator ({0}) for slice {1} UNSUPPORTED_IDENTIFIER_PATTERN_NO_PROPERTY_NOT_SUPPORTED_FOR_DISCRIMINATOR_FOR_SLICE = Unsupported: no properties with values found on type {2} for pattern for discriminator ({0}) for slice {1} SD_NESTED_MUST_SUPPORT_DIFF = The element {0} has types/profiles/targets that are marked as must support, but the element itself is not marked as must-support. The inner must-supports will be ignored unless the element inherits must-support = true @@ -779,7 +778,7 @@ MEASURE_SHAREABLE_EXTRA_MISSING = The ShareableMeasure profile recommends that t MEASURE_SHAREABLE_MISSING_HL7 = The ShareableMeasure profile says that the {0} element is mandatory, but it is not found. HL7 Published measures SHALL conform to the ShareableMeasure profile MEASURE_SHAREABLE_EXTRA_MISSING_HL7 = The ShareableMeasure profile recommends that the {0} element is populated, but it is not found. HL7 Published measures SHALL conform to the ShareableMeasure profile TYPE_SPECIFIC_CHECKS_DT_MARKDOWN_HTML = The markdown contains content that appears to be an embedded HTML tag starting at ''{0}''. This will (or SHOULD) be escaped by the presentation layer. The content should be checked to confirm that this is the desired behaviour -TYPE_SPECIFIER_ILLEGAL_TYPE = The Type specifier {1} specified an illegal type {0} +TYPE_SPECIFIER_ILLEGAL_TYPE = The Type specifier {1} specified an invalid type {0} TYPE_SPECIFIER_ABSTRACT_TYPE = The Type specifier {1} specified an abstract type {0} TYPE_SPECIFIER_NM_ILLEGAL_TYPE = No Type specifier matched, and the underlying type {0} is not valid TYPE_SPECIFIER_NM_ABSTRACT_TYPE = No Type specifier matched, and the underlying type {0} is not abstract diff --git a/pom.xml b/pom.xml index 6903327e5..c37fa911a 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 5.4.0 - 1.1.126 + 1.1.127-SNAPSHOT 5.7.1 1.8.2 3.0.0-M5 From 80f275ff188d853008169593b479350a9e13ed3c Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Thu, 24 Nov 2022 17:57:46 -0300 Subject: [PATCH 2/5] upgrade to new JSON parser --- .../convertors/analytics/PackageVisitor.java | 37 ++-- .../convertors/misc/CorePackageTools.java | 6 +- .../misc/ExamplesPackageBuilder.java | 11 +- .../fhir/convertors/misc/ICD11Generator.java | 91 +++++---- .../fhir/convertors/misc/JsonProcessor.java | 13 +- .../misc/NpmPackageVersionConverter.java | 21 +- .../convertors/misc/PackageMaintainer.java | 13 +- .../convertors/misc/XMLPackageConvertor.java | 14 +- .../xver/CorePackageVersionConvertor.java | 15 +- .../dstu3/context/SimpleWorkerContext.java | 2 +- .../fhir/r4/context/SimpleWorkerContext.java | 2 +- .../fhir/r4b/context/SimpleWorkerContext.java | 2 +- .../fhir/r5/context/SimpleWorkerContext.java | 2 +- .../fhir/r5/utils/NPMPackageGenerator.java | 85 ++++---- .../fhir/r5/utils/XVerExtensionManager.java | 14 +- .../fhir/utilities/json/model/JsonArray.java | 50 ++++- .../utilities/json/model/JsonBoolean.java | 15 ++ .../utilities/json/model/JsonComment.java | 5 - .../utilities/json/model/JsonElement.java | 67 +++++++ .../fhir/utilities/json/model/JsonNull.java | 12 +- .../fhir/utilities/json/model/JsonNumber.java | 19 ++ .../fhir/utilities/json/model/JsonObject.java | 175 ++++++++++++++-- .../utilities/json/model/JsonPrimitive.java | 5 + .../utilities/json/model/JsonProperty.java | 5 + .../fhir/utilities/json/model/JsonString.java | 24 ++- .../utilities/json/parser/JsonParser.java | 7 +- .../npm/FilesystemPackageCacheManager.java | 93 ++++----- .../hl7/fhir/utilities/npm/NpmPackage.java | 188 +++++++++--------- .../utilities/npm/NpmPackageIndexBuilder.java | 42 ++-- .../hl7/fhir/utilities/npm/PackageClient.java | 82 ++++---- .../fhir/utilities/npm/PackageGenerator.java | 61 +++--- .../hl7/fhir/utilities/npm/PackageHacker.java | 13 +- .../fhir/utilities/npm/PackageScanner.java | 7 +- .../fhir/utilities/npm/ResourceRenamer.java | 24 +-- .../hl7/fhir/utilities/DateTimeUtilTests.java | 15 +- .../hl7/fhir/utilities/DurationUtilTest.java | 13 +- .../hl7/fhir/utilities/FileFormatTest.java | 8 +- .../fhir/utilities/SimpleHTTPClientTest.java | 5 +- .../org/hl7/fhir/utilities/UtilitiesTest.java | 10 +- .../fhir/utilities/VersionUtilitiesTest.java | 5 +- .../hl7/fhir/utilities/i18n/I18nBaseTest.java | 19 +- .../hl7/fhir/utilities/i18n/ICU4JTests.java | 7 +- .../fhir/utilities/json/JsonParserTests.java | 4 +- .../fhir/utilities/npm/PackageClientTest.java | 22 +- .../tests/CachingPackageClientTests.java | 6 +- .../utilities/tests/PackageCacheTests.java | 8 +- .../tests/XLSXmlNormaliserTests.java | 5 - .../fhir/utilities/tests/XhtmlNodeTest.java | 8 +- .../execution/ModuleTestExecutorTests.java | 8 +- 49 files changed, 815 insertions(+), 550 deletions(-) delete mode 100644 org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonComment.java diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/analytics/PackageVisitor.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/analytics/PackageVisitor.java index 2ae51713b..67c6c0071 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/analytics/PackageVisitor.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/analytics/PackageVisitor.java @@ -16,8 +16,10 @@ import org.hl7.fhir.utilities.SimpleHTTPClient; import org.hl7.fhir.utilities.SimpleHTTPClient.HTTPResult; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; -import org.hl7.fhir.utilities.json.JsonUtilities; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonElement; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; import org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager; import org.hl7.fhir.utilities.npm.NpmPackage; import org.hl7.fhir.utilities.npm.PackageClient; @@ -28,10 +30,6 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - public class PackageVisitor { public interface IPackageVisitorProcessor { @@ -140,11 +138,11 @@ public class PackageVisitor { } i++; } - JsonObject json = JsonTrackingParser.fetchJson("https://raw.githubusercontent.com/FHIR/ig-registry/master/fhir-ig-list.json"); + JsonObject json = JsonParser.parseObjectFromUrl("https://raw.githubusercontent.com/FHIR/ig-registry/master/fhir-ig-list.json"); i = 0; - List objects = JsonUtilities.objects(json, "guides"); + List objects = json.getJsonObjects("guides"); for (JsonObject o : objects) { - String pid = JsonUtilities.str(o, "npm-name"); + String pid = o.asString("npm-name"); if (pid != null && !cpidSet.contains(pid)) { cpidSet.add(pid); List vList = listVersions(pid); @@ -195,11 +193,10 @@ public class PackageVisitor { private Map getAllCIPackages() throws IOException { Map res = new HashMap<>(); if (current) { - JsonArray json = JsonTrackingParser.fetchJsonArray("https://build.fhir.org/ig/qas.json"); - for (JsonElement j : json) { - JsonObject o = (JsonObject) j; - String url = JsonUtilities.str(o, "repo"); - res.put(url, JsonUtilities.str(o, "package-id")); + JsonArray json = (JsonArray) JsonParser.parseFromUrl("https://build.fhir.org/ig/qas.json"); + for (JsonObject o : json.asJsonObjects()) { + String url = o.asString("repo"); + res.put(url, o.asString("package-id")); } } return res; @@ -220,13 +217,13 @@ public class PackageVisitor { for (PackageInfo i : pc.search(null, null, null, false)) { list.add(i.getId()); } - JsonObject json = JsonTrackingParser.fetchJson("https://raw.githubusercontent.com/FHIR/ig-registry/master/fhir-ig-list.json"); - for (JsonObject ig : JsonUtilities.objects(json, "guides")) { - list.add(JsonUtilities.str(ig, "npm-name")); + JsonObject json = JsonParser.parseObjectFromUrl("https://raw.githubusercontent.com/FHIR/ig-registry/master/fhir-ig-list.json"); + for (JsonObject ig : json.getJsonObjects("guides")) { + list.add(ig.asString("npm-name")); } - json = JsonTrackingParser.fetchJson("https://raw.githubusercontent.com/FHIR/ig-registry/master/package-feeds.json"); - for (JsonObject feed : JsonUtilities.objects(json, "feeds")) { - processFeed(list, JsonUtilities.str(feed, "url")); + json = JsonParser.parseObjectFromUrl("https://raw.githubusercontent.com/FHIR/ig-registry/master/package-feeds.json"); + for (JsonObject feed : json.getJsonObjects("feeds")) { + processFeed(list, feed.asString("url")); } return list; diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/CorePackageTools.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/CorePackageTools.java index ea3da93bb..61fef5bb5 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/CorePackageTools.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/CorePackageTools.java @@ -7,10 +7,10 @@ import java.io.IOException; import org.hl7.fhir.exceptions.FHIRFormatError; import org.hl7.fhir.utilities.Utilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; import org.hl7.fhir.utilities.npm.NpmPackage; -import com.google.gson.JsonObject; public class CorePackageTools { @@ -33,7 +33,7 @@ public class CorePackageTools { private void buildXml(String json, String xml, String version) throws FHIRFormatError, IOException { for (File f : new File(Utilities.path(json, "package")).listFiles()) { if (f.getName().endsWith(".json")) { - JsonObject j = new JsonTrackingParser().parseJson(f); + JsonObject j = JsonParser.parseObject(f); if (j.has("resourceType")) { if ("1.4".equals(version)) { String n = f.getName(); diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/ExamplesPackageBuilder.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/ExamplesPackageBuilder.java index c80be57c8..7397e6f64 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/ExamplesPackageBuilder.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/ExamplesPackageBuilder.java @@ -10,9 +10,8 @@ import java.util.Set; import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50; import org.hl7.fhir.exceptions.FHIRFormatError; import org.hl7.fhir.utilities.TextFile; -import org.hl7.fhir.utilities.json.JsonTrackingParser; - -import com.google.gson.JsonObject; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; public class ExamplesPackageBuilder { @@ -25,10 +24,10 @@ public class ExamplesPackageBuilder { Set set = new HashSet<>(); for (File f : new File(source).listFiles()) { if (f.getName().endsWith(".json")) { - JsonObject obj = JsonTrackingParser.parseJson(new FileInputStream(f)); + JsonObject obj = JsonParser.parseObject(new FileInputStream(f)); if (obj.has("resourceType") && obj.has("id")) { - String type = obj.get("resourceType").getAsString(); - String id = obj.get("id").getAsString(); + String type = obj.asString("resourceType"); + String id = obj.asString("id"); byte[] content = TextFile.fileToBytes(f); if (type.equals("ConceptMap")) { System.out.println("convert "+f.getName()); diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/ICD11Generator.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/ICD11Generator.java index 208cf3e74..61b498057 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/ICD11Generator.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/ICD11Generator.java @@ -28,10 +28,9 @@ import org.hl7.fhir.r4.utils.ToolingExtensions; import org.hl7.fhir.utilities.SimpleHTTPClient; import org.hl7.fhir.utilities.SimpleHTTPClient.HTTPResult; import org.hl7.fhir.utilities.Utilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; +import org.hl7.fhir.utilities.json.model.JsonElement; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; public class ICD11Generator { @@ -42,12 +41,12 @@ public class ICD11Generator { private void execute(String base, String dest) throws IOException { CodeSystem cs = makeMMSCodeSystem(); JsonObject version = fetchJson(Utilities.pathURL(base, "/icd/release/11/mms")); - String[] p = version.get("latestRelease").getAsString().split("\\/"); + String[] p = version.asString("latestRelease").split("\\/"); cs.setVersion(p[6]); - JsonObject root = fetchJson(url(base, version.get("latestRelease").getAsString())); - cs.setDateElement(new DateTimeType(root.get("releaseDate").getAsString())); - for (JsonElement child : root.getAsJsonArray("child")) { - processMMSEntity(cs, base, child.getAsString(), cs.addConcept(), dest); + JsonObject root = fetchJson(url(base, version.asString("latestRelease"))); + cs.setDateElement(new DateTimeType(root.asString("releaseDate"))); + for (JsonElement child : root.getJsonArray("child")) { + processMMSEntity(cs, base, child.asString(), cs.addConcept(), dest); System.out.println(); } new XmlParser(XmlVersion.V1_1).setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream(Utilities.path(dest, "icd-11-mms.xml")), cs); @@ -55,12 +54,12 @@ public class ICD11Generator { cs = makeEntityCodeSystem(); root = fetchJson(Utilities.pathURL(base, "/icd/entity")); - cs.setVersion(root.get("releaseId").getAsString()); - cs.setDateElement(new DateTimeType(root.get("releaseDate").getAsString())); + cs.setVersion(root.asString("releaseId")); + cs.setDateElement(new DateTimeType(root.asString("releaseDate"))); cs.setTitle(readString(root, "title")); Set ids = new HashSet<>(); - for (JsonElement child : root.getAsJsonArray("child")) { - processEntity(cs, ids, base, tail(child.getAsString()), dest); + for (JsonElement child : root.getJsonArray("child")) { + processEntity(cs, ids, base, tail(child.asString()), dest); System.out.println(); } new XmlParser(XmlVersion.V1_1).setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream(Utilities.path(dest, "icd-11-foundation.xml")), cs); @@ -80,34 +79,34 @@ public class ICD11Generator { cc.setDefinition(d); } if (entity.has("inclusion")) { - for (JsonElement child : entity.getAsJsonArray("inclusion")) { + for (JsonElement child : entity.getJsonArray("inclusion")) { JsonObject co = (JsonObject) child; String v = readString(co, "label"); if (v != null) { if (co.has("foundationReference")) { - cc.addProperty().setValue(new Coding().setSystem("http://id.who.int/icd11/foundation").setCode(tail(co.get("foundationReference").getAsString())).setDisplay(v)).setCode("inclusion"); + cc.addProperty().setValue(new Coding().setSystem("http://id.who.int/icd11/foundation").setCode(tail(co.asString("foundationReference"))).setDisplay(v)).setCode("inclusion"); } } } } if (entity.has("exclusion")) { - for (JsonElement child : entity.getAsJsonArray("exclusion")) { + for (JsonElement child : entity.getJsonArray("exclusion")) { JsonObject co = (JsonObject) child; String v = readString(co, "label"); if (v != null) { if (co.has("foundationReference")) { - cc.addProperty().setValue(new Coding().setSystem("http://id.who.int/icd11/foundation").setCode(tail(co.get("foundationReference").getAsString())).setDisplay(v)).setCode("exclusion"); + cc.addProperty().setValue(new Coding().setSystem("http://id.who.int/icd11/foundation").setCode(tail(co.asString("foundationReference"))).setDisplay(v)).setCode("exclusion"); } } } } if (entity.has("narrowerTerm")) { - for (JsonElement child : entity.getAsJsonArray("narrowerTerm")) { + for (JsonElement child : entity.getJsonArray("narrowerTerm")) { JsonObject co = (JsonObject) child; String v = readString(co, "label"); if (v != null) { if (co.has("narrowerTerm")) { - cc.addProperty().setValue(new Coding().setSystem("http://id.who.int/icd11/foundation").setCode(tail(co.get("foundationReference").getAsString())).setDisplay(v)).setCode("narrowerTerm"); + cc.addProperty().setValue(new Coding().setSystem("http://id.who.int/icd11/foundation").setCode(tail(co.asString("foundationReference"))).setDisplay(v)).setCode("narrowerTerm"); } } } @@ -115,22 +114,22 @@ public class ICD11Generator { addDesignation(readString(entity, "longDefinition"), cc, "http://id.who.int/icd11/mms/designation", "longDefinition"); addDesignation(readString(entity, "fullySpecifiedName"), cc, "http://snomed.info/sct", "900000000000003001"); if (entity.has("synonym")) { - for (JsonElement j : entity.getAsJsonArray("synonym")) { + for (JsonElement j : entity.getJsonArray("synonym")) { String v = readString((JsonObject) j, "label"); if (v != null && !v.equals(cc.getDisplay())) { addDesignation(v, cc, "http://id.who.int/icd11/mms/designation", "synonym"); } } } - for (JsonElement j : entity.getAsJsonArray("parent")) { - String v = j.getAsString(); + for (JsonElement j : entity.getJsonArray("parent")) { + String v = j.asString(); if (!"http://id.who.int/icd/entity".equals(v)) { cc.addProperty().setValue(new CodeType(tail(v))).setCode("narrowerTerm"); } } if (entity.has("child")) { - for (JsonElement j : entity.getAsJsonArray("child")) { - String v = j.getAsString(); + for (JsonElement j : entity.getJsonArray("child")) { + String v = j.asString(); cc.addProperty().setValue(new CodeType(tail(v))).setCode("child"); processEntity(cs, ids, base, tail(v), dest); } @@ -180,16 +179,16 @@ public class ICD11Generator { System.out.print("."); JsonObject entity = fetchJson(url(base, ref)); cc.setId(tail(ref)); - if (entity.has("code") && !Utilities.noString(entity.get("code").getAsString())) { - cc.setCode(entity.get("code").getAsString()); - } else if (entity.has("blockId") && !Utilities.noString(entity.get("blockId").getAsString())) { - cc.setCode(entity.get("blockId").getAsString()); + if (entity.has("code") && !Utilities.noString(entity.asString("code"))) { + cc.setCode(entity.asString("code")); + } else if (entity.has("blockId") && !Utilities.noString(entity.asString("blockId"))) { + cc.setCode(entity.asString("blockId")); } else { cc.setCode(cc.getId()); cc.addProperty().setCode("abstract").setValue(new BooleanType(true)); } - if (entity.has("classKind") && !Utilities.noString(entity.get("classKind").getAsString()) && !"category".equals(entity.get("classKind").getAsString())) { - cc.addProperty().setCode("kind").setValue(new CodeType(entity.get("classKind").getAsString())); + if (entity.has("classKind") && !Utilities.noString(entity.asString("classKind")) && !"category".equals(entity.asString("classKind"))) { + cc.addProperty().setCode("kind").setValue(new CodeType(entity.asString("classKind"))); } cc.setDisplay(readString(entity, "title")); StringBuilder defn = new StringBuilder(); @@ -203,7 +202,7 @@ public class ICD11Generator { if (entity.has("inclusion")) { defn.append(". Includes: "); boolean first = true; - for (JsonElement child : entity.getAsJsonArray("inclusion")) { + for (JsonElement child : entity.getJsonArray("inclusion")) { if (first) first = false; else defn.append(", "); defn.append(readString((JsonObject) child, "label")); @@ -212,7 +211,7 @@ public class ICD11Generator { if (entity.has("exclusion")) { defn.append(". Excludes: "); boolean first = true; - for (JsonElement child : entity.getAsJsonArray("exclusion")) { + for (JsonElement child : entity.getJsonArray("exclusion")) { if (first) first = false; else defn.append(", "); JsonObject co = (JsonObject) child; @@ -220,7 +219,7 @@ public class ICD11Generator { if (v != null) { defn.append(v); if (co.has("linearizationReference")) { - cc.addProperty().setValue(new Coding().setSystem("http://id.who.int/icd11/mms").setCode(tail(co.get("linearizationReference").getAsString())).setDisplay(v)).setCode("exclusion"); + cc.addProperty().setValue(new Coding().setSystem("http://id.who.int/icd11/mms").setCode(tail(co.asString("linearizationReference"))).setDisplay(v)).setCode("exclusion"); } } } @@ -231,33 +230,33 @@ public class ICD11Generator { addProperty(readString(entity, "codingNote"), cc, "codingNote"); if (entity.has("indexTerm")) { // CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder("; "); -// for (JsonElement child : entity.getAsJsonArray("indexTerm")) { +// for (JsonElement child : entity.getJsonArray("indexTerm")) { // processIndexTerm(cc, b, (JsonObject) child); // } // if (b.length() > 0) { // cc.addProperty().setCode("terms").setValue(new StringType(b.toString())); // } - for (JsonElement child : entity.getAsJsonArray("indexTerm")) { + for (JsonElement child : entity.getJsonArray("indexTerm")) { processIndexTerm(cc, (JsonObject) child); } } if (entity.has("postcoordinationScale")) { - for (JsonElement child : entity.getAsJsonArray("postcoordinationScale")) { + for (JsonElement child : entity.getJsonArray("postcoordinationScale")) { JsonObject o = (JsonObject) child; - String name = tail(o.get("axisName").getAsString()); + String name = tail(o.asString("axisName")); ConceptPropertyComponent prop = cc.addProperty(); prop.setCode("postcoordinationScale"); prop.setValue(new CodeType(name)); - ToolingExtensions.addBooleanExtension(prop, "http://id.who.int/icd11/extensions/required", o.get("requiredPostcoordination").getAsBoolean()); - ToolingExtensions.addBooleanExtension(prop, "http://id.who.int/icd11/extensions/repeats", o.get("allowMultipleValues").getAsBoolean()); + ToolingExtensions.addBooleanExtension(prop, "http://id.who.int/icd11/extensions/required", o.asBoolean("requiredPostcoordination")); + ToolingExtensions.addBooleanExtension(prop, "http://id.who.int/icd11/extensions/repeats", o.asBoolean("allowMultipleValues")); if (o.has("scaleEntity")) { ToolingExtensions.addUriExtension(prop, "http://id.who.int/icd11/extensions/valueSet", buildValueSet(cs, cc.getCode(), name, o, dest)); } } } if (entity.has("child")) { - for (JsonElement child : entity.getAsJsonArray("child")) { - processMMSEntity(cs, base, child.getAsString(), cc.addConcept(), dest); + for (JsonElement child : entity.getJsonArray("child")) { + processMMSEntity(cs, base, child.asString(), cc.addConcept(), dest); } } } @@ -279,8 +278,8 @@ public class ICD11Generator { vs.setStatus(cs.getStatus()); ConceptSetComponent inc = vs.getCompose().addInclude(); inc.setSystem(cs.getUrl()); - for (JsonElement e : o.getAsJsonArray("scaleEntity")) { - inc.addFilter().setProperty("concept").setOp(FilterOperator.ISA).setValue(tail(e.getAsString())); + for (JsonElement e : o.getJsonArray("scaleEntity")) { + inc.addFilter().setProperty("concept").setOp(FilterOperator.ISA).setValue(tail(e.asString())); } new XmlParser(XmlVersion.V1_1).setOutputStyle(OutputStyle.PRETTY).compose(new FileOutputStream(Utilities.path(dest, "vs-" + id + ".xml")), vs); return url; @@ -328,12 +327,12 @@ public class ICD11Generator { } private String readString(JsonObject obj, String name) { - JsonObject p = obj.getAsJsonObject(name); + JsonObject p = obj.getJsonObject(name); if (p == null) { return null; } if (p.has("@value")) { - return p.get("@value").getAsString(); + return p.get("@value").asString(); } return null; } @@ -400,7 +399,7 @@ public class ICD11Generator { http.addHeader("Accept-Language", "en"); HTTPResult res = http.get(source, "application/json"); res.checkThrowException(); - return JsonTrackingParser.parseJson(res.getContent()); + return JsonParser.parseObject(res.getContent()); } diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/JsonProcessor.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/JsonProcessor.java index a46bd5c5b..2a0b11ec2 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/JsonProcessor.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/JsonProcessor.java @@ -1,11 +1,12 @@ package org.hl7.fhir.convertors.misc; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; -import org.hl7.fhir.utilities.json.JsonTrackingParser; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; -import com.google.gson.JsonObject; public class JsonProcessor { public static void main(String[] args) throws Exception { @@ -13,9 +14,9 @@ public class JsonProcessor { } private void process(String source) throws IOException { - JsonObject json = JsonTrackingParser.parseJsonFile(source); + JsonObject json = JsonParser.parseObjectFromFile(source); process(json); - JsonTrackingParser.write(json, new File(source), true); + JsonParser.compose(json, new FileOutputStream(source), true); } @@ -178,11 +179,11 @@ public class JsonProcessor { } private void process(JsonObject json, String name) { - JsonObject j = json.getAsJsonObject(name); + JsonObject j = json.getJsonObject(name); if (j == null) { System.out.println("Can't find "+name); } else { - j.addProperty("modifier", true); + j.add("modifier", true); } } diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/NpmPackageVersionConverter.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/NpmPackageVersionConverter.java index 4b7a6d345..6c19fea01 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/NpmPackageVersionConverter.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/NpmPackageVersionConverter.java @@ -29,13 +29,12 @@ import org.hl7.fhir.convertors.factory.VersionConvertorFactory_30_50; import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.VersionUtilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; -import org.hl7.fhir.utilities.json.JsonUtilities; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; import org.hl7.fhir.utilities.npm.NpmPackageIndexBuilder; import com.google.common.base.Charsets; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; public class NpmPackageVersionConverter { @@ -105,7 +104,7 @@ public class NpmPackageVersionConverter { if (!e.getKey().equals("package/package.json")) { byte[] cnv = e.getValue(); try { - JsonObject json = JsonTrackingParser.parseJson(e.getValue()); + JsonObject json = JsonParser.parseObject(e.getValue()); if (json.has("resourceType")) { cnv = convertResource(e.getKey(), e.getValue()); } @@ -174,11 +173,11 @@ public class NpmPackageVersionConverter { } private byte[] convertPackage(byte[] cnt) throws IOException { - JsonObject json = JsonTrackingParser.parseJson(cnt); - currentVersion = json.getAsJsonArray("fhirVersions").get(0).getAsString(); - String name = JsonUtilities.str(json, "name"); + JsonObject json = JsonParser.parseObject(cnt); + currentVersion = json.getJsonArray("fhirVersions").get(0).asString(); + String name = json.asString("name"); json.remove("name"); - json.addProperty("name", name + "." + vCode); + json.add("name", name + "." + vCode); json.remove("fhirVersions"); json.remove("dependencies"); JsonArray fv = new JsonArray(); @@ -186,8 +185,8 @@ public class NpmPackageVersionConverter { fv.add(version); JsonObject dep = new JsonObject(); json.add("dependencies", dep); - dep.addProperty(VersionUtilities.packageForVersion(version), version); - return JsonTrackingParser.write(json).getBytes(Charsets.UTF_8); + dep.add(VersionUtilities.packageForVersion(version), version); + return JsonParser.composeBytes(json); } private byte[] convertResource(String n, byte[] cnt) { diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/PackageMaintainer.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/PackageMaintainer.java index 021066544..198823f85 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/PackageMaintainer.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/PackageMaintainer.java @@ -7,7 +7,8 @@ import java.util.List; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; /* Copyright (c) 2011+, HL7, Inc. @@ -38,11 +39,6 @@ import org.hl7.fhir.utilities.json.JsonTrackingParser; */ - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; - public class PackageMaintainer { @@ -96,11 +92,10 @@ public class PackageMaintainer { if (f.isDirectory()) strip(f); else if (f.getName().endsWith(".json")) { - JsonObject json = JsonTrackingParser.parseJson(f); + JsonObject json = JsonParser.parseObject(f); if (json.has("resourceType") && json.has("text")) { json.remove("text"); - Gson gson = new GsonBuilder().create(); - String src = gson.toJson(json); + String src = JsonParser.compose(json); TextFile.stringToFile(src, f.getAbsolutePath()); } } diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/XMLPackageConvertor.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/XMLPackageConvertor.java index 974eb2093..8de59681a 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/XMLPackageConvertor.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/XMLPackageConvertor.java @@ -5,12 +5,10 @@ import java.io.FileInputStream; import java.io.IOException; import java.util.Map.Entry; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.model.JsonProperty; import org.hl7.fhir.utilities.npm.NpmPackage; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - - public class XMLPackageConvertor { public static void main(String[] args) throws IOException { @@ -26,13 +24,13 @@ public class XMLPackageConvertor { System.out.println("Package " + f.getAbsolutePath()); NpmPackage p = NpmPackage.fromPackage(new FileInputStream(f)); if (p.getNpm().has("dependencies")) { - JsonObject dep = p.getNpm().getAsJsonObject("dependencies"); - if (dep.entrySet().isEmpty()) { + JsonObject dep = p.getNpm().getJsonObject("dependencies"); + if (dep.getProperties().isEmpty()) { System.out.println(" Dependencies: none"); } else { System.out.println(" Dependencies:"); - for (Entry e : dep.entrySet()) { - System.out.println(" " + e.getKey() + ": " + e.getValue().getAsString()); + for (JsonProperty e : dep.getProperties()) { + System.out.println(" " + e.getName() + ": " + e.getValue().toString()); } } } else { diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/xver/CorePackageVersionConvertor.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/xver/CorePackageVersionConvertor.java index 5df0aaadd..7c8069c53 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/xver/CorePackageVersionConvertor.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/misc/xver/CorePackageVersionConvertor.java @@ -17,13 +17,12 @@ import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50; import org.hl7.fhir.convertors.misc.xver.CorePackageVersionConvertor.BaseConvertor; import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.VersionUtilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; -import org.hl7.fhir.utilities.json.JsonUtilities; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; import org.hl7.fhir.utilities.npm.NpmPackage; import org.hl7.fhir.utilities.npm.NpmPackage.NpmPackageFolder; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; public class CorePackageVersionConvertor { @@ -582,13 +581,13 @@ public class CorePackageVersionConvertor { } private byte[] convertPackage(byte[] cnt, String version) throws IOException { - JsonObject json = JsonTrackingParser.parseJson(cnt); + JsonObject json = JsonParser.parseObject(cnt); json.remove("fhir-version-list"); JsonArray vl = new JsonArray(); json.add("fhirVersions", vl); vl.add(version); - json.addProperty("name", JsonUtilities.str(json, "name")+".as."+VersionUtilities.getNameForVersion(version).toLowerCase()); - json.addProperty("title", JsonUtilities.str(json, "title")+" (as Version "+VersionUtilities.getNameForVersion(version).toLowerCase()+")"); - return JsonTrackingParser.write(json).getBytes(StandardCharsets.UTF_8); + json.add("name", json.asString("name")+".as."+VersionUtilities.getNameForVersion(version).toLowerCase()); + json.add("title", json.asString("title")+" (as Version "+VersionUtilities.getNameForVersion(version).toLowerCase()+")"); + return JsonParser.composeBytes(json); } } diff --git a/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/context/SimpleWorkerContext.java b/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/context/SimpleWorkerContext.java index 0dd0887fe..bc6b2bec3 100644 --- a/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/context/SimpleWorkerContext.java +++ b/org.hl7.fhir.dstu3/src/main/java/org/hl7/fhir/dstu3/context/SimpleWorkerContext.java @@ -156,7 +156,7 @@ public class SimpleWorkerContext extends BaseWorkerContext implements IWorkerCon public static SimpleWorkerContext fromPackage(NpmPackage pi, IContextResourceLoader loader) throws FileNotFoundException, IOException, FHIRException { SimpleWorkerContext res = new SimpleWorkerContext(); res.setAllowLoadingDuplicates(true); - res.version = pi.getNpm().get("version").getAsString(); + res.version = pi.getNpm().asString("version"); res.loadFromPackage(pi, loader); return res; } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/context/SimpleWorkerContext.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/context/SimpleWorkerContext.java index c2c5c332f..2d273468d 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/context/SimpleWorkerContext.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/context/SimpleWorkerContext.java @@ -163,7 +163,7 @@ public class SimpleWorkerContext extends BaseWorkerContext implements IWorkerCon public static SimpleWorkerContext fromPackage(NpmPackage pi, IContextResourceLoader loader) throws FileNotFoundException, IOException, FHIRException { SimpleWorkerContext res = new SimpleWorkerContext(); res.setAllowLoadingDuplicates(true); - res.version = pi.getNpm().get("version").getAsString(); + res.version = pi.getNpm().asString("version"); res.loadFromPackage(pi, loader); return res; } diff --git a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/SimpleWorkerContext.java b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/SimpleWorkerContext.java index c87ea3b92..6dedc8028 100644 --- a/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/SimpleWorkerContext.java +++ b/org.hl7.fhir.r4b/src/main/java/org/hl7/fhir/r4b/context/SimpleWorkerContext.java @@ -216,7 +216,7 @@ public class SimpleWorkerContext extends BaseWorkerContext implements IWorkerCon public static SimpleWorkerContext fromPackage(NpmPackage pi, IContextResourceLoader loader) throws FileNotFoundException, IOException, FHIRException { SimpleWorkerContext res = new SimpleWorkerContext(); res.setAllowLoadingDuplicates(true); - res.version = pi.getNpm().get("version").getAsString(); + res.version = pi.getNpm().asString("version"); res.loadFromPackage(pi, loader); res.finishLoading(); return res; diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/SimpleWorkerContext.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/SimpleWorkerContext.java index 014838813..f046e386a 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/SimpleWorkerContext.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/context/SimpleWorkerContext.java @@ -250,7 +250,7 @@ public class SimpleWorkerContext extends BaseWorkerContext implements IWorkerCon public SimpleWorkerContext fromPackage(NpmPackage pi, IContextResourceLoader loader) throws IOException, FHIRException { SimpleWorkerContext context = getSimpleWorkerContextInstance(); context.setAllowLoadingDuplicates(allowLoadingDuplicates); - context.version = pi.getNpm().get("version").getAsString(); + context.version = pi.getNpm().asString("version"); context.loadFromPackage(pi, loader); context.finishLoading(); return build(context); diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/NPMPackageGenerator.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/NPMPackageGenerator.java index fa68b2629..bc11bf9c4 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/NPMPackageGenerator.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/NPMPackageGenerator.java @@ -62,16 +62,14 @@ import org.hl7.fhir.r5.model.ImplementationGuide.ImplementationGuideDependsOnCom import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.model.JsonString; +import org.hl7.fhir.utilities.json.parser.JsonParser; import org.hl7.fhir.utilities.npm.NpmPackageIndexBuilder; import org.hl7.fhir.utilities.npm.ToolsVersion; import org.hl7.fhir.utilities.npm.PackageGenerator.PackageType; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; - public class NPMPackageGenerator { public enum Category { @@ -118,13 +116,13 @@ public class NPMPackageGenerator { public static NPMPackageGenerator subset(NPMPackageGenerator master, String destFile, String id, String name, Date date, boolean notForPublication) throws FHIRException, IOException { JsonObject p = master.packageJ.deepCopy(); p.remove("name"); - p.addProperty("name", id); + p.add("name", id); p.remove("type"); - p.addProperty("type", PackageType.CONFORMANCE.getCode()); + p.add("type", PackageType.CONFORMANCE.getCode()); p.remove("title"); - p.addProperty("title", name); + p.add("title", name); if (notForPublication) { - p.addProperty("notForPublication", true); + p.add("notForPublication", true); } return new NPMPackageGenerator(destFile, p, date, notForPublication); @@ -142,17 +140,16 @@ public class NPMPackageGenerator { String dt = new SimpleDateFormat("yyyyMMddHHmmss").format(date); packageJ = npm; packageManifest = new JsonObject(); - packageManifest.addProperty("version", npm.get("version").getAsString()); - packageManifest.addProperty("date", dt); + packageManifest.set("version", npm.asString("version")); + packageManifest.set("date", dt); if (notForPublication) { - packageManifest.addProperty("notForPublication", true); + packageManifest.add("notForPublication", true); } - npm.addProperty("date", dt); - packageManifest.addProperty("name", npm.get("name").getAsString()); + npm.set("date", dt); + packageManifest.set("name", npm.asString("name")); this.destFile = destFile; start(); - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(npm); + String json = JsonParser.compose(npm, true); try { addFile(Category.RESOURCE, "package.json", json.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { @@ -183,31 +180,31 @@ public class NPMPackageGenerator { } JsonObject npm = new JsonObject(); - npm.addProperty("name", ig.getPackageId()); - npm.addProperty("version", ig.getVersion()); + npm.add("name", ig.getPackageId()); + npm.add("version", ig.getVersion()); igVersion = ig.getVersion(); - npm.addProperty("tools-version", ToolsVersion.TOOLS_VERSION); - npm.addProperty("type", kind.getCode()); - npm.addProperty("date", dt); + npm.add("tools-version", ToolsVersion.TOOLS_VERSION); + npm.add("type", kind.getCode()); + npm.add("date", dt); if (ig.hasLicense()) { - npm.addProperty("license", ig.getLicense().toCode()); + npm.add("license", ig.getLicense().toCode()); } - npm.addProperty("canonical", canonical); + npm.add("canonical", canonical); if (notForPublication) { - npm.addProperty("notForPublication", true); + npm.add("notForPublication", true); } - npm.addProperty("url", web); + npm.add("url", web); if (ig.hasTitle()) { - npm.addProperty("title", ig.getTitle()); + npm.add("title", ig.getTitle()); } if (ig.hasDescription()) { - npm.addProperty("description", ig.getDescription()+ " (built "+dtHuman+timezone()+")"); + npm.add("description", ig.getDescription()+ " (built "+dtHuman+timezone()+")"); } JsonArray vl = new JsonArray(); npm.add("fhirVersions", vl); for (String v : fhirVersion) { - vl.add(new JsonPrimitive(v)); + vl.add(new JsonString(v)); } if (kind != PackageType.CORE) { @@ -216,15 +213,15 @@ public class NPMPackageGenerator { for (String v : fhirVersion) { String vp = packageForVersion(v); if (vp != null ) { - dep.addProperty(vp, v); + dep.add(vp, v); } } for (ImplementationGuideDependsOnComponent d : ig.getDependsOn()) { - dep.addProperty(d.getPackageId(), d.getVersion()); + dep.add(d.getPackageId(), d.getVersion()); } } if (ig.hasPublisher()) { - npm.addProperty("author", ig.getPublisher()); + npm.add("author", ig.getPublisher()); } JsonArray m = new JsonArray(); for (ContactDetail t : ig.getContact()) { @@ -233,23 +230,22 @@ public class NPMPackageGenerator { if (t.hasName() & (email != null || url != null)) { JsonObject md = new JsonObject(); m.add(md); - md.addProperty("name", t.getName()); + md.add("name", t.getName()); if (email != null) - md.addProperty("email", email); + md.add("email", email); if (url != null) - md.addProperty("url", url); + md.add("url", url); } } if (m.size() > 0) npm.add("maintainers", m); if (ig.getManifest().hasRendering()) - npm.addProperty("homepage", ig.getManifest().getRendering()); + npm.add("homepage", ig.getManifest().getRendering()); JsonObject dir = new JsonObject(); npm.add("directories", dir); - dir.addProperty("lib", "package"); - dir.addProperty("example", "example"); - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(npm); + dir.add("lib", "package"); + dir.add("example", "example"); + String json = JsonParser.compose(npm, true); try { addFile(Category.RESOURCE, "package.json", json.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { @@ -257,14 +253,14 @@ public class NPMPackageGenerator { packageJ = npm; packageManifest = new JsonObject(); - packageManifest.addProperty("version", ig.getVersion()); + packageManifest.add("version", ig.getVersion()); JsonArray fv = new JsonArray(); for (String v : fhirVersion) { fv.add(v); } packageManifest.add("fhirVersion", fv); - packageManifest.addProperty("date", dt); - packageManifest.addProperty("name", ig.getPackageId()); + packageManifest.add("date", dt); + packageManifest.add("name", ig.getPackageId()); } @@ -380,8 +376,7 @@ public class NPMPackageGenerator { OutputStream.close(); TextFile.bytesToFile(OutputStream.toByteArray(), destFile); // also, for cache management on current builds, generate a little manifest - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(packageManifest); + String json = JsonParser.compose(packageManifest, true); TextFile.stringToFile(json, Utilities.changeFileExt(destFile, ".manifest.json"), false); } diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/XVerExtensionManager.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/XVerExtensionManager.java index 6e36e6be6..efec9156f 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/XVerExtensionManager.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/utils/XVerExtensionManager.java @@ -62,9 +62,9 @@ public class XVerExtensionManager { } } JsonObject root = lists.get(v); - JsonObject path = root.getObject(e); + JsonObject path = root.getJsonObject(e); if (path == null) { - path = root.getObject(e+"[x]"); + path = root.getJsonObject(e+"[x]"); } if (path == null) { return XVerExtensionStatus.Unknown; @@ -85,9 +85,9 @@ public class XVerExtensionManager { String verTarget = VersionUtilities.getMajMin(context.getVersion()); String e = url.substring(54); JsonObject root = lists.get(verSource); - JsonObject path = root.getObject(e); + JsonObject path = root.getJsonObject(e); if (path == null) { - path = root.getObject(e+"[x]"); + path = root.getJsonObject(e+"[x]"); } StructureDefinition sd = new StructureDefinition(); @@ -116,9 +116,9 @@ public class XVerExtensionManager { populateTypes(path, val, verSource, verTarget); } else if (path.has("elements")) { for (JsonElement i : path.forceArray("elements").getItems()) { - JsonObject elt = root.getObject(e+"."+i.toString()); + JsonObject elt = root.getJsonObject(e+"."+i.asString()); if (elt != null) { - String s = i.toString().replace("[x]", ""); + String s = i.asString().replace("[x]", ""); sd.getDifferential().addElement().setPath("Extension.extension").setSliceName(s); sd.getDifferential().addElement().setPath("Extension.extension.extension").setMax("0"); sd.getDifferential().addElement().setPath("Extension.extension.url").setFixed(new UriType(s)); @@ -144,7 +144,7 @@ public class XVerExtensionManager { public void populateTypes(JsonObject path, ElementDefinition val, String verSource, String verTarget) { for (JsonElement i : path.forceArray("types").getItems()) { - String s = i.toString(); + String s = i.asString(); if (!s.startsWith("!")) { if (s.contains("(")) { String t = s.substring(0, s.indexOf("(")); diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonArray.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonArray.java index 7a46c1acc..33ff0411b 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonArray.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonArray.java @@ -1,12 +1,13 @@ package org.hl7.fhir.utilities.json.model; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import org.hl7.fhir.utilities.json.JsonException; -public class JsonArray extends JsonElement { +public class JsonArray extends JsonElement implements Iterable { private List items = new ArrayList<>(); private List noCommas; // validator use private List unQuoted; // validator use @@ -15,7 +16,7 @@ public class JsonArray extends JsonElement { List list = new ArrayList<>(); for (JsonElement n : items) { if (n instanceof JsonPrimitive) { - list.add(n.toString()); + list.add(n.asJsonPrimitive().getValue()); } } return list; @@ -25,7 +26,7 @@ public class JsonArray extends JsonElement { return items; } - public List asObjects() { + public List asJsonObjects() { List list = new ArrayList<>(); for (JsonElement n : items) { if (n instanceof JsonObject) { @@ -79,11 +80,50 @@ public class JsonArray extends JsonElement { public JsonObject findByStringProp(JsonArray arr, String prop, String value) { - for (JsonObject obj : asObjects()) { - if (obj.has(prop) && value.equals(obj.getString(prop))) + for (JsonObject obj : asJsonObjects()) { + if (obj.has(prop) && value.equals(obj.asString(prop))) return obj; } return null; } + public Iterator iterator() { + return items.iterator(); + } + + public JsonElement get(int i) { + return items.get(i); + } + + public JsonArray deepCopy() { + return (JsonArray) make().copy(this); + } + + @Override + protected JsonElement copy(JsonElement other) { + JsonArray o = (JsonArray) other; + for (JsonElement p : o.getItems()) { + add(p.deepCopy()); + } + return this; + } + + @Override + protected JsonElement make() { + return new JsonArray(); + } + + @Override + public String toString() { + StringBuilder b = new StringBuilder(); + b.append("[ "); + boolean first = true; + for (JsonElement p : items) { + if (first) first = false; else b.append(", "); + b.append(p.toString()); + } + b.append(" ]"); + return b.toString(); + } + } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonBoolean.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonBoolean.java index 9d63174f2..4f9b34816 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonBoolean.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonBoolean.java @@ -8,6 +8,9 @@ public class JsonBoolean extends JsonPrimitive { this.value = value; } + private JsonBoolean() { + } + public JsonElementType elementType() { return JsonElementType.BOOLEAN; } @@ -20,6 +23,7 @@ public class JsonBoolean extends JsonPrimitive { this.value = value; } + @Override public String getValue() { return value ? "true" : "false"; } @@ -28,4 +32,15 @@ public class JsonBoolean extends JsonPrimitive { public String toString() { return getValue(); } + + @Override + protected JsonElement copy(JsonElement other) { + value = ((JsonBoolean) other).value; + return this; + } + + @Override + protected JsonElement make() { + return new JsonBoolean(); + } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonComment.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonComment.java deleted file mode 100644 index c5fb78ba0..000000000 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonComment.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.hl7.fhir.utilities.json.model; - -public class JsonComment { - -} diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonElement.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonElement.java index 456792aae..aa60d31ca 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonElement.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonElement.java @@ -45,4 +45,71 @@ public abstract class JsonElement { public boolean hasComments() { return comments != null && !comments.isEmpty(); } + + public JsonElement deepCopy() { + return make().copy(this); + } + + protected abstract JsonElement copy(JsonElement jsonElement); + protected abstract JsonElement make(); + + public boolean isJsonObject() { + return elementType() == JsonElementType.OBJECT; + } + + public boolean isJsonArray() { + return elementType() == JsonElementType.ARRAY; + } + + public boolean isJsonPrimitive() { + return isJsonBoolean() || isJsonString() || isJsonNull() || isJsonNumber(); + } + + public boolean isJsonBoolean() { + return elementType() == JsonElementType.BOOLEAN; + } + + public boolean isJsonString() { + return elementType() == JsonElementType.STRING; + } + + public boolean isJsonNumber() { + return elementType() == JsonElementType.NUMBER; + } + + public boolean isJsonNull() { + return elementType() == JsonElementType.NULL; + } + + public JsonObject asJsonObject() { + return isJsonObject() ? (JsonObject) this : null; + } + + public JsonArray asJsonArray() { + return isJsonArray() ? (JsonArray) this : null; + } + + public JsonPrimitive asJsonPrimitive() { + return isJsonPrimitive() ? (JsonPrimitive) this : null; + } + + public JsonBoolean asJsonBoolean() { + return isJsonBoolean() ? (JsonBoolean) this : null; + } + + public JsonString asJsonString() { + return isJsonString() ? (JsonString) this : null; + } + + public JsonNumber asJsonNumber() { + return isJsonNumber() ? (JsonNumber) this : null; + } + + public JsonNull asJsonNull() { + return isJsonNull() ? (JsonNull) this : null; + } + + public String asString() { + return isJsonPrimitive() ? ((JsonPrimitive) this).getValue() : null; + } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonNull.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonNull.java index 2b5f15c65..48785ce24 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonNull.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonNull.java @@ -6,7 +6,7 @@ public class JsonNull extends JsonPrimitive { return JsonElementType.NULL; } - + @Override public String getValue() { return "null"; } @@ -15,4 +15,14 @@ public class JsonNull extends JsonPrimitive { public String toString() { return getValue(); } + + @Override + protected JsonElement copy(JsonElement other) { + return this; + } + + @Override + protected JsonElement make() { + return new JsonNull(); + } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonNumber.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonNumber.java index 58cc923cc..4941423e5 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonNumber.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonNumber.java @@ -10,10 +10,18 @@ public class JsonNumber extends JsonPrimitive { this.value = value; } + public JsonNumber(int value) { + this.value = Integer.toString(value); + } + + private JsonNumber() { + } + public JsonElementType elementType() { return JsonElementType.NUMBER; } + @Override public String getValue() { return value; } @@ -30,4 +38,15 @@ public class JsonNumber extends JsonPrimitive { return null; } } + + @Override + protected JsonElement copy(JsonElement other) { + value = ((JsonNumber) other).value; + return this; + } + + @Override + protected JsonElement make() { + return new JsonNumber(); + } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonObject.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonObject.java index fadec26b3..b28c18152 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonObject.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonObject.java @@ -1,9 +1,12 @@ package org.hl7.fhir.utilities.json.model; +import java.time.Instant; +import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.json.JsonException; @@ -19,8 +22,8 @@ public class JsonObject extends JsonElement { } public JsonObject add(String name, JsonElement value) throws JsonException { - check(name != null, "Numm is null"); - check(value != null, "Numm is null"); + check(name != null, "Name is null"); + check(value != null, "Value is null"); check(get(name) == null, "Name '"+name+"' already exists"); JsonProperty p = new JsonProperty(name, value); properties.add(p); @@ -30,8 +33,8 @@ public class JsonObject extends JsonElement { // this is used by the parser which can allow duplicates = true (for the validator). You should not otherwise use it public JsonObject addForParser(String name, JsonElement value, boolean noComma, boolean nameUnquoted, boolean valueUnquoted) throws JsonException { - check(name != null, "Numm is null"); - check(value != null, "Numm is null"); + check(name != null, "Name is null"); + check(value != null, "Value is null"); JsonProperty p = new JsonProperty(name, value); p.setNoComma(noComma); p.setUnquotedName(nameUnquoted); @@ -42,13 +45,64 @@ public class JsonObject extends JsonElement { } public JsonObject add(String name, String value) throws JsonException { + check(name != null, "Name is null"); return add(name, new JsonString(value)); } public JsonObject add(String name, boolean value) throws JsonException { + check(name != null, "Name is null"); return add(name, new JsonBoolean(value)); } + public JsonObject add(String name, int value) throws JsonException { + check(name != null, "Name is null"); + return add(name, new JsonNumber(value)); + } + + public JsonObject set(String name, JsonElement value) throws JsonException { + check(name != null, "Name is null"); + check(value != null, "Value is null"); + JsonProperty p = propMap.get(name); + if (p != null) { + p.setValue(value); + return this; + } else { + return add(name, value); + } + } + + public JsonObject set(String name, String value) throws JsonException { + check(name != null, "Name is null"); + JsonProperty p = propMap.get(name); + if (p != null) { + p.setValue(new JsonString(value)); + return this; + } else { + return add(name, new JsonString(value)); + } + } + + public JsonObject set(String name, boolean value) throws JsonException { + check(name != null, "Name is null"); + JsonProperty p = propMap.get(name); + if (p != null) { + p.setValue(new JsonBoolean(value)); + return this; + } else { + return add(name, new JsonBoolean(value)); + } + } + + public JsonObject set(String name, int value) throws JsonException { + check(name != null, "Name is null"); + JsonProperty p = propMap.get(name); + if (p != null) { + p.setValue(new JsonNumber(value)); + return this; + } else { + return add(name, new JsonNumber(value)); + } + } public JsonElement get(String name) { if (propMap.containsKey(name)) { @@ -62,7 +116,7 @@ public class JsonObject extends JsonElement { return propMap.containsKey(name); } - public void drop(String name) { + public void remove(String name) { if (propMap.containsKey(name)) { propMap.remove(name); properties.removeIf((JsonProperty item) -> name.equals(item.getName())); @@ -74,8 +128,8 @@ public class JsonObject extends JsonElement { } public String str(String name) { - if (has(name)) { - return get(name).toString(); + if (hasPrimitive(name)) { + return get(name).asJsonPrimitive().getValue(); } else { return null; } @@ -110,27 +164,27 @@ public class JsonObject extends JsonElement { } - public JsonObject getObject(String name) { + public JsonObject getJsonObject(String name) { return hasObject(name) ? (JsonObject) get(name) : null; } - public JsonString getString(String name) { + public JsonString getJsonString(String name) { return hasString(name) ? (JsonString) get(name) : null; } - public JsonBoolean getBoolean(String name) { + public JsonBoolean getJsonBoolean(String name) { return hasBoolean(name) ? (JsonBoolean) get(name) : null; } - public JsonNumber getNumber(String name) { + public JsonNumber getJsonNumber(String name) { return hasNumber(name) ? (JsonNumber) get(name) : null; } - public JsonNull getNull(String name) { + public JsonNull getJsonNull(String name) { return hasNull(name) ?(JsonNull) get(name) : null; } - public JsonArray getArray(String name) { + public JsonArray getJsonArray(String name) { return hasArray(name) ? (JsonArray) get(name) : null; } @@ -148,7 +202,16 @@ public class JsonObject extends JsonElement { } public String asString(String name) { - return hasPrimitive(name) ? ((JsonPrimitive) get(name)).toString() : null; + return hasPrimitive(name) ? ((JsonPrimitive) get(name)).getValue() : null; + } + + public String asString(String... names) { + for (String n : names) { + if (hasPrimitive(n)) { + return asString(n); + } + } + return null; } public boolean asBoolean(String name) { @@ -167,25 +230,101 @@ public class JsonObject extends JsonElement { return false; } + public Instant asDate(String name) { + String source = asString(name); + if (Utilities.noString(source)) { + return null; + } else { + OffsetDateTime odt = OffsetDateTime.parse(source); + return odt.toInstant(); + } + } + public JsonObject forceObject(String name) throws JsonException { if (has(name) && !hasObject(name)) { - drop(name); + remove(name); } if (!has(name)) { add(name, new JsonObject()); } - return getObject(name); + return getJsonObject(name); } public JsonArray forceArray(String name) throws JsonException { if (has(name) && !hasArray(name)) { - drop(name); + remove(name); } if (!has(name)) { add(name, new JsonArray()); } - return getArray(name); + return getJsonArray(name); + } + + public List getJsonObjects(String name) { + List res = new ArrayList<>(); + if (hasArray(name)) { + res.addAll(getJsonArray(name).asJsonObjects()); + } else if (hasObject(name)) { + res.add(getJsonObject(name)); + } + return res; } + public List getStrings(String name) { + List res = new ArrayList<>(); + if (hasArray(name)) { + res.addAll(getJsonArray(name).asStrings()); + } else if (hasPrimitive(name)) { + res.add(asString(name)); + } + return res; + } + + public JsonObject deepCopy() { + return (JsonObject) make().copy(this); + } + @Override + protected JsonElement copy(JsonElement other) { + JsonObject o = (JsonObject) other; + for (JsonProperty p : o.getProperties()) { + add(p.getName(), p.getValue().deepCopy()); + } + return this; + } + + @Override + protected JsonElement make() { + return new JsonObject(); + } + + public void merge(JsonObject source) { + for (JsonProperty pp : source.getProperties()) { + if (has(pp.getName())) { + JsonElement te = get(pp.getName()); + if (te.isJsonObject() && pp.getValue().isJsonObject()) { + ((JsonObject) te).merge((JsonObject) pp.getValue()); + } else { + set(pp.getName(), pp.getValue()); + } + } else { + add(pp.getName(), pp.getValue()); + } + } + } + + + @Override + public String toString() { + StringBuilder b = new StringBuilder(); + b.append("{ "); + boolean first = true; + for (JsonProperty p : properties) { + if (first) first = false; else b.append(", "); + b.append(p.toString()); + } + b.append(" }"); + return b.toString(); + } + } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonPrimitive.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonPrimitive.java index b2b280469..7c1d76b77 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonPrimitive.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonPrimitive.java @@ -2,4 +2,9 @@ package org.hl7.fhir.utilities.json.model; public abstract class JsonPrimitive extends JsonElement { + public abstract String getValue(); + + public String toJson() { + return getValue(); + } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonProperty.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonProperty.java index 7999d279b..d5e89225e 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonProperty.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonProperty.java @@ -49,5 +49,10 @@ public class JsonProperty { public void setUnquotedValue(boolean unquotedValue) { this.unquotedValue = unquotedValue; } + + @Override + public String toString() { + return "\""+name+"\" : "+value.toString(); + } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonString.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonString.java index 978650c49..c80d013a2 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonString.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/model/JsonString.java @@ -1,5 +1,7 @@ package org.hl7.fhir.utilities.json.model; +import org.hl7.fhir.utilities.Utilities; + public class JsonString extends JsonPrimitive { private String value; @@ -8,10 +10,14 @@ public class JsonString extends JsonPrimitive { this.value = value; } + private JsonString() { + } + public JsonElementType elementType() { return JsonElementType.STRING; } + @Override public String getValue() { return value; } @@ -22,7 +28,23 @@ public class JsonString extends JsonPrimitive { @Override public String toString() { - return value; + throw new Error("This should not be called"); + // return "\""+ Utilities.escapeJson(value)+"\""; } + @Override + public String toJson() { + return "\""+ Utilities.escapeJson(value)+"\""; + } + + @Override + protected JsonElement copy(JsonElement other) { + value = ((JsonString) other).value; + return this; + } + + @Override + protected JsonElement make() { + return new JsonString(); + } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/parser/JsonParser.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/parser/JsonParser.java index a6fbb5b3c..28ee5175a 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/parser/JsonParser.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/json/parser/JsonParser.java @@ -220,8 +220,11 @@ public class JsonParser { lexer.next(); lexer.getStates().push(new State("", true)); } - else + else if (lexer.getType() != null) { throw lexer.error("Unexpected content at start of JSON: "+lexer.getType().toString()); + } else { + throw lexer.error("Unexpected content at start of JSON"); + } if (lexer.getType() != TokenType.Close) { parseProperty(); @@ -568,7 +571,7 @@ public class JsonParser { int length = 0; for (JsonElement i : arr.getItems()) { if (i instanceof JsonPrimitive) { - length = length + i.toString().length(); + length = length + ((JsonPrimitive)i).toJson().length(); } if (i.elementType() == JsonElementType.ARRAY || i.elementType() == JsonElementType.OBJECT || i.hasComments()) { // 20 is a somewhat arbitrary cut off diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java index f2a6380d0..d5ebd2092 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/FilesystemPackageCacheManager.java @@ -32,8 +32,10 @@ import org.hl7.fhir.utilities.SimpleHTTPClient.HTTPResult; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.VersionUtilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; -import org.hl7.fhir.utilities.json.JsonUtilities; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonElement; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; import org.hl7.fhir.utilities.npm.NpmPackage.NpmPackageFolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,12 +69,6 @@ import org.slf4j.LoggerFactory; */ - -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - /** * This is a package cache manager implementation that uses a local disk cache * @@ -420,18 +416,18 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple log(" done."); } pck = loadPackageInfo(packRoot); - if (!id.equals(JsonUtilities.str(npm.getNpm(), "name")) || !v.equals(JsonUtilities.str(npm.getNpm(), "version"))) { - if (!id.equals(JsonUtilities.str(npm.getNpm(), "name"))) { - npm.getNpm().addProperty("original-name", JsonUtilities.str(npm.getNpm(), "name")); + if (!id.equals(npm.getNpm().asString("name")) || !v.equals(npm.getNpm().asString("version"))) { + if (!id.equals(npm.getNpm().asString("name"))) { + npm.getNpm().add("original-name", npm.getNpm().asString("name")); npm.getNpm().remove("name"); - npm.getNpm().addProperty("name", id); + npm.getNpm().add("name", id); } - if (!v.equals(JsonUtilities.str(npm.getNpm(), "version"))) { - npm.getNpm().addProperty("original-version", JsonUtilities.str(npm.getNpm(), "version")); + if (!v.equals(npm.getNpm().asString("version"))) { + npm.getNpm().add("original-version", npm.getNpm().asString("version")); npm.getNpm().remove("version"); - npm.getNpm().addProperty("version", v); + npm.getNpm().add("version", v); } - TextFile.stringToFile(new GsonBuilder().setPrettyPrinting().create().toJson(npm.getNpm()), Utilities.path(cacheFolder, id + "#" + v, "package", "package.json"), false); + TextFile.stringToFile(JsonParser.compose(npm.getNpm(), true), Utilities.path(cacheFolder, id + "#" + v, "package", "package.json"), false); } } catch (Exception e) { try { @@ -570,10 +566,9 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple private String getPackageUrlFromBuildList(String packageId) throws IOException { checkBuildLoaded(); - for (JsonElement n : buildInfo) { - JsonObject o = (JsonObject) n; - if (packageId.equals(JsonUtilities.str(o, "package-id"))) { - return JsonUtilities.str(o, "url"); + for (JsonObject o : buildInfo.asJsonObjects()) { + if (packageId.equals(o.asString("package-id"))) { + return o.asString("url"); } } return null; @@ -583,8 +578,8 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple checkBuildLoaded(); for (JsonElement n : buildInfo) { JsonObject o = (JsonObject) n; - if (!specList.containsKey(JsonUtilities.str(o, "package-id"))) { - specList.put(JsonUtilities.str(o, "package-id"), JsonUtilities.str(o, "url")); + if (!specList.containsKey(o.asString("package-id"))) { + specList.put(o.asString("package-id"), o.asString("url")); } } } @@ -609,9 +604,9 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple try { for (String pf : listPackages()) { if (new File(Utilities.path(cacheFolder, pf, "package", "package.json")).exists()) { - JsonObject npm = JsonTrackingParser.parseJsonFile(Utilities.path(cacheFolder, pf, "package", "package.json")); - if (canonicalUrl.equals(JsonUtilities.str(npm, "canonical"))) { - return JsonUtilities.str(npm, "name"); + JsonObject npm = JsonParser.parseObjectFromFile(Utilities.path(cacheFolder, pf, "package", "package.json")); + if (canonicalUrl.equals(npm.asString("canonical"))) { + return npm.asString("name"); } } } @@ -630,14 +625,14 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple if (buildInfo != null) { for (JsonElement n : buildInfo) { JsonObject o = (JsonObject) n; - if (canonical.equals(JsonUtilities.str(o, "url"))) { - return JsonUtilities.str(o, "package-id"); + if (canonical.equals(o.asString("url"))) { + return o.asString("package-id"); } } for (JsonElement n : buildInfo) { JsonObject o = (JsonObject) n; - if (JsonUtilities.str(o, "url").startsWith(canonical + "/ImplementationGuide/")) { - return JsonUtilities.str(o, "package-id"); + if (o.asString("url").startsWith(canonical + "/ImplementationGuide/")) { + return o.asString("package-id"); } } } @@ -649,8 +644,8 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple // special case: current versions roll over, and we have to check their currency try { String url = ciList.get(id); - JsonObject json = JsonTrackingParser.fetchJson(Utilities.pathURL(url, "package.manifest.json")); - String currDate = JsonUtilities.str(json, "date"); + JsonObject json = JsonParser.parseObjectFromUrl(Utilities.pathURL(url, "package.manifest.json")); + String currDate = json.asString("date"); String packDate = p.date(); if (!currDate.equals(packDate)) { return null; // nup, we need a new copy @@ -678,17 +673,17 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple HTTPResult res = http.get("https://build.fhir.org/ig/qas.json?nocache=" + System.currentTimeMillis()); res.checkThrowException(); - buildInfo = (JsonArray) new com.google.gson.JsonParser().parse(TextFile.bytesToString(res.getContent())); + buildInfo = (JsonArray) JsonParser.parse(TextFile.bytesToString(res.getContent())); List builds = new ArrayList<>(); for (JsonElement n : buildInfo) { JsonObject o = (JsonObject) n; - if (o.has("url") && o.has("package-id") && o.get("package-id").getAsString().contains(".")) { - String u = o.get("url").getAsString(); + if (o.has("url") && o.has("package-id") && o.asString("package-id").contains(".")) { + String u = o.asString("url"); if (u.contains("/ImplementationGuide/")) u = u.substring(0, u.indexOf("/ImplementationGuide/")); - builds.add(new BuildRecord(u, o.get("package-id").getAsString(), getRepo(o.get("repo").getAsString()), readDate(o.get("date").getAsString()))); + builds.add(new BuildRecord(u, o.asString("package-id"), getRepo(o.asString("repo")), readDate(o.asString("date")))); } } Collections.sort(builds, new BuildRecordSorter()); @@ -735,7 +730,7 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple String aurl = pu; JsonObject json; try { - json = JsonTrackingParser.fetchJson(pu); + json = JsonParser.parseObjectFromUrl(pu); } catch (Exception e) { String pv = Utilities.pathURL(url, v, "package.tgz"); try { @@ -746,13 +741,12 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple throw new FHIRException("Error fetching package directly (" + pv + "), or fetching package list for " + id + " from " + pu + ": " + e1.getMessage(), e1); } } - if (!id.equals(JsonUtilities.str(json, "package-id"))) - throw new FHIRException("Package ids do not match in " + pu + ": " + id + " vs " + JsonUtilities.str(json, "package-id")); - for (JsonElement e : json.getAsJsonArray("list")) { - JsonObject vo = (JsonObject) e; - if (v.equals(JsonUtilities.str(vo, "version"))) { - aurl = Utilities.pathURL(JsonUtilities.str(vo, "path"), "package.tgz"); - String u = Utilities.pathURL(JsonUtilities.str(vo, "path"), "package.tgz"); + if (!id.equals(json.asString("package-id"))) + throw new FHIRException("Package ids do not match in " + pu + ": " + id + " vs " + json.asString("package-id")); + for (JsonObject vo : json.getJsonObjects("list")) { + if (v.equals(vo.asString("version"))) { + aurl = Utilities.pathURL(vo.asString("path"), "package.tgz"); + String u = Utilities.pathURL(vo.asString("path"), "package.tgz"); return new InputStreamWithSrc(fetchFromUrlSpecific(u, true), u, v); } } @@ -776,13 +770,12 @@ public class FilesystemPackageCacheManager extends BasePackageCacheManager imple throw new FHIRException("Unable to resolve package id " + id); } String pu = Utilities.pathURL(url, "package-list.json"); - JsonObject json = JsonTrackingParser.fetchJson(pu); - if (!id.equals(JsonUtilities.str(json, "package-id"))) - throw new FHIRException("Package ids do not match in " + pu + ": " + id + " vs " + JsonUtilities.str(json, "package-id")); - for (JsonElement e : json.getAsJsonArray("list")) { - JsonObject vo = (JsonObject) e; - if (JsonUtilities.bool(vo, "current")) { - return JsonUtilities.str(vo, "version"); + JsonObject json = JsonParser.parseObjectFromUrl(pu); + if (!id.equals(json.asString("package-id"))) + throw new FHIRException("Package ids do not match in " + pu + ": " + id + " vs " + json.asString("package-id")); + for (JsonObject vo : json.getJsonObjects("list")) { + if (vo.asBoolean("current")) { + return vo.asString("version"); } } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/NpmPackage.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/NpmPackage.java index 7e6e96b9d..67b1df1f2 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/NpmPackage.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/NpmPackage.java @@ -66,15 +66,13 @@ import org.hl7.fhir.utilities.SimpleHTTPClient; import org.hl7.fhir.utilities.SimpleHTTPClient.HTTPResult; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; -import org.hl7.fhir.utilities.json.JsonUtilities; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonElement; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.model.JsonProperty; +import org.hl7.fhir.utilities.json.parser.JsonParser; import org.hl7.fhir.utilities.npm.PackageGenerator.PackageType; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - /** * info and loader for a package * @@ -111,13 +109,13 @@ public class NpmPackage { public PackageResourceInformation(String root, JsonObject fi) throws IOException { super(); - id = JsonUtilities.str(fi, "id"); - resourceType = JsonUtilities.str(fi, "resourceType"); - url = JsonUtilities.str(fi, "url"); - version = JsonUtilities.str(fi, "version"); - filename = Utilities.path(root, JsonUtilities.str(fi, "filename")); - supplements = JsonUtilities.str(fi, "supplements"); - stype = JsonUtilities.str(fi, "type"); + id = fi.asString("id"); + resourceType = fi.asString("resourceType"); + url = fi.asString("url"); + version = fi.asString("version"); + filename = Utilities.path(root, fi.asString("filename")); + supplements = fi.asString("supplements"); + stype = fi.asString("type"); } public String getId() { return id; @@ -146,8 +144,8 @@ public class NpmPackage { @Override public int compare(JsonObject o0, JsonObject o1) { - String v0 = JsonUtilities.str(o0, "version"); - String v1 = JsonUtilities.str(o1, "version"); + String v0 = o0.asString("version"); + String v1 = o1.asString("version"); return v0.compareTo(v1); } } @@ -181,14 +179,13 @@ public class NpmPackage { } public boolean readIndex(JsonObject index) { - if (!index.has("index-version") || (index.get("index-version").getAsInt() != 1)) { + if (!index.has("index-version") || (index.asInteger("index-version") != 1)) { return false; } this.index = index; - for (JsonElement e : index.getAsJsonArray("files")) { - JsonObject file = (JsonObject) e; - String type = JsonUtilities.str(file, "resourceType"); - String name = JsonUtilities.str(file, "filename"); + for (JsonObject file : index.getJsonObjects("files")) { + String type = file.asString("resourceType"); + String name = file.asString("filename"); if (!types.containsKey(type)) types.put(type, new ArrayList<>()); types.get(type).add(name); @@ -301,7 +298,7 @@ public class NpmPackage { } public void loadFiles(String path, File source, String... exemptions) throws FileNotFoundException, IOException { - this.npm = (JsonObject) new com.google.gson.JsonParser().parse(TextFile.fileToString(Utilities.path(path, "package", "package.json"))); + this.npm = JsonParser.parseObject(TextFile.fileToString(Utilities.path(path, "package", "package.json"))); this.path = path; File dir = new File(path); @@ -318,7 +315,7 @@ public class NpmPackage { File ij = new File(Utilities.path(f.getAbsolutePath(), ".index.json")); if (ij.exists()) { try { - if (!folder.readIndex(JsonTrackingParser.parseJson(ij))) { + if (!folder.readIndex(JsonParser.parseObject(ij))) { indexFolder(folder.getName(), folder); } } catch (Exception e) { @@ -353,7 +350,7 @@ public class NpmPackage { File ij = new File(Utilities.path(f.getAbsolutePath(), ".index.json")); if (ij.exists()) { try { - if (!folder.readIndex(JsonTrackingParser.parseJson(ij))) { + if (!folder.readIndex(JsonParser.parseObject(ij))) { indexFolder(folder.getName(), folder); } } catch (Exception e) { @@ -374,7 +371,7 @@ public class NpmPackage { if (!res.folders.get("package").hasFile("package.json") && defType != null) { TextFile.stringToFile("{ \"type\" : \""+defType.getCode()+"\"}", Utilities.path(res.folders.get("package").folder.getAbsolutePath(), "package.json")); } - res.npm = (JsonObject) new com.google.gson.JsonParser().parse(new String(res.folders.get("package").fetchFile("package.json"))); + res.npm = JsonParser.parseObject(new String(res.folders.get("package").fetchFile("package.json"))); return res; } @@ -439,7 +436,7 @@ public class NpmPackage { } } try { - npm = JsonTrackingParser.parseJson(folders.get("package").fetchFile("package.json")); + npm = JsonParser.parseObject(folders.get("package").fetchFile("package.json")); } catch (Exception e) { throw new IOException("Error parsing "+(desc == null ? "" : desc+"#")+"package/package.json: "+e.getMessage(), e); } @@ -482,7 +479,7 @@ public class NpmPackage { } String json = indexer.build(); try { - folder.readIndex(JsonTrackingParser.parseJson(json)); + folder.readIndex(JsonParser.parseObject(json)); if (folder.folder != null) { TextFile.stringToFile(json, Utilities.path(folder.folder.getAbsolutePath(), ".index.json")); } @@ -520,7 +517,7 @@ public class NpmPackage { } zip.close(); try { - res.npm = JsonTrackingParser.parseJson(res.folders.get("package").fetchFile("package.json")); + res.npm = JsonParser.parseObject(res.folders.get("package").fetchFile("package.json")); } catch (Exception e) { throw new IOException("Error parsing "+(desc == null ? "" : desc+"#")+"package/package.json: "+e.getMessage(), e); } @@ -561,9 +558,8 @@ public class NpmPackage { List res = new ArrayList(); for (NpmPackageFolder folder : folders.values()) { if (folder.index != null) { - for (JsonElement e : folder.index.getAsJsonArray("files")) { - JsonObject fi = e.getAsJsonObject(); - if (Utilities.existsInList(JsonUtilities.str(fi, "resourceType"), types)) { + for (JsonObject fi : folder.index.getJsonObjects("files")) { + if (Utilities.existsInList(fi.asString("resourceType"), types)) { res.add(new PackageResourceInformation(folder.folder == null ? "@"+folder.getName() : folder.folder.getAbsolutePath(), fi)); } } @@ -634,21 +630,20 @@ public class NpmPackage { public InputStream loadByCanonicalVersion(String folder, String canonical, String version) throws IOException { NpmPackageFolder f = folders.get(folder); List matches = new ArrayList<>(); - for (JsonElement e : f.index.getAsJsonArray("files")) { - JsonObject file = (JsonObject) e; - if (canonical.equals(JsonUtilities.str(file, "url"))) { - if (version != null && version.equals(JsonUtilities.str(file, "version"))) { - return load("package", JsonUtilities.str(file, "filename")); + for (JsonObject file : f.index.getJsonObjects("files")) { + if (canonical.equals(file.asString("url"))) { + if (version != null && version.equals(file.asString("version"))) { + return load("package", file.asString("filename")); } else if (version == null) { matches.add(file); } } if (matches.size() > 0) { if (matches.size() == 1) { - return load("package", JsonUtilities.str(matches.get(0), "filename")); + return load("package", matches.get(0).asString("filename")); } else { Collections.sort(matches, new IndexVersionSorter()); - return load("package", JsonUtilities.str(matches.get(matches.size()-1), "filename")); + return load("package", matches.get(matches.size()-1).asString("filename")); } } } @@ -708,7 +703,7 @@ public class NpmPackage { * @return */ public String name() { - return JsonUtilities.str(npm, "name"); + return npm.asString("name"); } /** @@ -716,15 +711,15 @@ public class NpmPackage { * @return */ public String id() { - return JsonUtilities.str(npm, "name"); + return npm.asString("name"); } public String date() { - return JsonUtilities.str(npm, "date"); + return npm.asString("date"); } public String canonical() { - return JsonUtilities.str(npm, "canonical"); + return npm.asString("canonical"); } /** @@ -732,7 +727,7 @@ public class NpmPackage { * @return */ public String version() { - return JsonUtilities.str(npm, "version"); + return npm.asString("version"); } /** @@ -740,28 +735,28 @@ public class NpmPackage { * @return */ public String fhirVersion() { - if ("hl7.fhir.core".equals(JsonUtilities.str(npm, "name"))) - return JsonUtilities.str(npm, "version"); - else if (JsonUtilities.str(npm, "name").startsWith("hl7.fhir.r2.") || JsonUtilities.str(npm, "name").startsWith("hl7.fhir.r2b.") || JsonUtilities.str(npm, "name").startsWith("hl7.fhir.r3.") || - JsonUtilities.str(npm, "name").startsWith("hl7.fhir.r4.") || JsonUtilities.str(npm, "name").startsWith("hl7.fhir.r4b.") || JsonUtilities.str(npm, "name").startsWith("hl7.fhir.r5.")) - return JsonUtilities.str(npm, "version"); + if ("hl7.fhir.core".equals(npm.asString("name"))) + return npm.asString("version"); + else if (npm.asString("name").startsWith("hl7.fhir.r2.") || npm.asString("name").startsWith("hl7.fhir.r2b.") || npm.asString("name").startsWith("hl7.fhir.r3.") || + npm.asString("name").startsWith("hl7.fhir.r4.") || npm.asString("name").startsWith("hl7.fhir.r4b.") || npm.asString("name").startsWith("hl7.fhir.r5.")) + return npm.asString("version"); else { JsonObject dep = null; - if (npm.has("dependencies") && npm.get("dependencies").isJsonObject()) { - dep = npm.getAsJsonObject("dependencies"); + if (npm.hasObject("dependencies")) { + dep = npm.getJsonObject("dependencies"); if (dep != null) { - for (Entry e : dep.entrySet()) { - if (Utilities.existsInList(e.getKey(), "hl7.fhir.r2.core", "hl7.fhir.r2b.core", "hl7.fhir.r3.core", "hl7.fhir.r4.core")) - return e.getValue().getAsString(); - if (Utilities.existsInList(e.getKey(), "hl7.fhir.core")) // while all packages are updated - return e.getValue().getAsString(); + for (JsonProperty e : dep.getProperties()) { + if (Utilities.existsInList(e.getName(), "hl7.fhir.r2.core", "hl7.fhir.r2b.core", "hl7.fhir.r3.core", "hl7.fhir.r4.core")) + return e.getValue().asString(); + if (Utilities.existsInList(e.getName(), "hl7.fhir.core")) // while all packages are updated + return e.getValue().asString(); } } } - if (npm.has("fhirVersions")) { - JsonElement e = npm.get("fhirVersions"); - if (e.isJsonArray() && e.getAsJsonArray().size() > 0) { - return npm.getAsJsonArray("fhirVersions").get(0).getAsString(); + if (npm.hasArray("fhirVersions")) { + JsonArray e = npm.getJsonArray("fhirVersions"); + if (e.size() > 0) { + return e.getItems().get(0).asString(); } } if (dep != null) { @@ -789,11 +784,11 @@ public class NpmPackage { } public String type() { - return JsonUtilities.str(npm, "type"); + return npm.asString("type"); } public String description() { - return JsonUtilities.str(npm, "description"); + return npm.asString("description"); } public String getPath() { @@ -803,32 +798,32 @@ public class NpmPackage { public List dependencies() { List res = new ArrayList<>(); if (npm.has("dependencies")) { - for (Entry e : npm.getAsJsonObject("dependencies").entrySet()) { - res.add(e.getKey()+"#"+e.getValue().getAsString()); + for (JsonProperty e : npm.getJsonObject("dependencies").getProperties()) { + res.add(e.getName()+"#"+e.getValue().asString()); } } return res; } public String homepage() { - return JsonUtilities.str(npm, "homepage"); + return npm.asString("homepage"); } public String url() { - return JsonUtilities.str(npm, "url"); + return npm.asString("url"); } public String title() { - return JsonUtilities.str(npm, "title"); + return npm.asString("title"); } public String toolsVersion() { - return JsonUtilities.str(npm, "tools-version"); + return npm.asString("tools-version"); } public String license() { - return JsonUtilities.str(npm, "license"); + return npm.asString("license"); } // /** @@ -841,20 +836,20 @@ public class NpmPackage { // } public String getWebLocation() { - if (npm.has("url") && npm.get("url").isJsonPrimitive()) { - return PackageHacker.fixPackageUrl(npm.get("url").getAsString()); + if (npm.hasPrimitive("url")) { + return PackageHacker.fixPackageUrl(npm.asString("url")); } else { - return JsonUtilities.str(npm, "canonical"); + return npm.asString("canonical"); } } public InputStream loadResource(String type, String id) throws IOException { NpmPackageFolder f = folders.get("package"); - JsonArray files = f.index.getAsJsonArray("files"); - for (JsonElement e : files) { + JsonArray files = f.index.getJsonArray("files"); + for (JsonElement e : files.getItems()) { JsonObject i = (JsonObject) e; - if (type.equals(JsonUtilities.str(i, "resourceType")) && id.equals(JsonUtilities.str(i, "id"))) { - return load("package", JsonUtilities.str(i, "filename")); + if (type.equals(i.asString("resourceType")) && id.equals(i.asString("id"))) { + return load("package", i.asString("filename")); } } return null; @@ -866,11 +861,11 @@ public class NpmPackage { f = folders.get("package/example"); } if (f != null) { - JsonArray files = f.index.getAsJsonArray("files"); - for (JsonElement e : files) { + JsonArray files = f.index.getJsonArray("files"); + for (JsonElement e : files.getItems()) { JsonObject i = (JsonObject) e; - if (type.equals(JsonUtilities.str(i, "resourceType")) && id.equals(JsonUtilities.str(i, "id"))) { - return load("example", JsonUtilities.str(i, "filename")); + if (type.equals(i.asString("resourceType")) && id.equals(i.asString("id"))) { + return load("example", i.asString("filename")); } } } @@ -909,7 +904,7 @@ public class NpmPackage { byte[] cnt = indexer.build().getBytes(StandardCharsets.UTF_8); TextFile.bytesToFile(cnt, Utilities.path(dir.getAbsolutePath(), n, ".index.json")); } - byte[] cnt = TextFile.stringToBytes(new GsonBuilder().setPrettyPrinting().create().toJson(npm), false); + byte[] cnt = TextFile.stringToBytes(JsonParser.compose(npm, true), false); TextFile.bytesToFile(cnt, Utilities.path(dir.getAbsolutePath(), "package", "package.json")); } @@ -955,7 +950,7 @@ public class NpmPackage { tar.write(cnt); tar.closeArchiveEntry(); } - byte[] cnt = TextFile.stringToBytes(new GsonBuilder().setPrettyPrinting().create().toJson(npm), false); + byte[] cnt = TextFile.stringToBytes(JsonParser.compose(npm, true), false); TarArchiveEntry entry = new TarArchiveEntry("package/package.json"); entry.setSize(cnt.length); tar.putArchiveEntry(entry); @@ -981,13 +976,13 @@ public class NpmPackage { public String fhirVersionList() { if (npm.has("fhirVersions")) { CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(); - if (npm.get("fhirVersions").isJsonArray()) { - for (JsonElement n : npm.getAsJsonArray("fhirVersions")) { - b.append(n.getAsString()); + if (npm.hasArray("fhirVersions")) { + for (String n : npm.getJsonArray("fhirVersions").asStrings()) { + b.append(n); } } - if (npm.get("fhirVersions").isJsonPrimitive()) { - b.append(npm.get("fhirVersions").getAsString()); + if (npm.hasPrimitive("fhirVersions")) { + b.append(npm.asString("fhirVersions")); } return b.toString(); } else @@ -997,8 +992,8 @@ public class NpmPackage { public String dependencySummary() { if (npm.has("dependencies")) { CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(); - for (Entry e : npm.getAsJsonObject("dependencies").entrySet()) { - b.append(e.getKey()+"#"+e.getValue().getAsString()); + for (JsonProperty e : npm.getJsonObject("dependencies").getProperties()) { + b.append(e.getName()+"#"+e.getValue().asString()); } return b.toString(); } else @@ -1080,7 +1075,7 @@ public class NpmPackage { folder.types.get(type).add(name); if ("package".equals(folderName) && "package.json".equals(name)) { try { - npm = JsonTrackingParser.parseJson(cnt); + npm = JsonParser.parseObject(cnt); } catch (IOException e) { } } @@ -1118,11 +1113,11 @@ public class NpmPackage { } public boolean isCore() { - return Utilities.existsInList(JsonUtilities.str(npm, "type"), "fhir.core", "Core"); + return Utilities.existsInList(npm.asString("type"), "fhir.core", "Core"); } public boolean isTx() { - return JsonUtilities.str(npm, "name").startsWith("hl7.terminology"); + return npm.asString("name").startsWith("hl7.terminology"); } public boolean hasCanonical(String url) { @@ -1133,10 +1128,9 @@ public class NpmPackage { String v = url.contains("|") ? url.substring(url.indexOf("|")+1) : null; NpmPackageFolder folder = folders.get("package"); if (folder != null) { - for (JsonElement e : folder.index.getAsJsonArray("files")) { - JsonObject o = (JsonObject) e; - if (u.equals(JsonUtilities.str(o, "url"))) { - if (v == null || v.equals(JsonUtilities.str(o, "version"))) { + for (JsonObject o : folder.index.getJsonObjects("files")) { + if (u.equals(o.asString("url"))) { + if (v == null || v.equals(o.asString("version"))) { return true; } } @@ -1154,7 +1148,7 @@ public class NpmPackage { if (Utilities.existsInList(name(), "fhir.test.data.r2", "fhir.test.data.r3", "fhir.test.data.r4", "fhir.tx.support.r2", "fhir.tx.support.r3", "fhir.tx.support.r4", "us.nlm.vsac")) { return true; } - if (JsonUtilities.bool(npm, "lazy-load")) { + if (npm.asBoolean("lazy-load")) { return true; } if (!hasFile("other", "spec.internals")) { @@ -1164,7 +1158,7 @@ public class NpmPackage { } public boolean isNotForPublication() { - return JsonUtilities.bool(npm, "notForPublication"); + return npm.asBoolean("notForPublication"); } public InputStream load(PackageResourceInformation p) throws FileNotFoundException { diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/NpmPackageIndexBuilder.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/NpmPackageIndexBuilder.java index 15fffc704..57c735456 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/NpmPackageIndexBuilder.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/NpmPackageIndexBuilder.java @@ -6,11 +6,9 @@ import java.io.IOException; import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; - -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; /** * This class builds the .index.json for a package @@ -25,7 +23,7 @@ public class NpmPackageIndexBuilder { public void start() { index = new JsonObject(); - index.addProperty("index-version", 1); + index.add("index-version", 1); files = new JsonArray(); index.add("files", files); } @@ -33,30 +31,30 @@ public class NpmPackageIndexBuilder { public boolean seeFile(String name, byte[] content) { if (name.endsWith(".json")) { try { - JsonObject json = JsonTrackingParser.parseJson(content); + JsonObject json = JsonParser.parseObject(content); if (json.has("resourceType")) { // ok we treat it as a resource JsonObject fi = new JsonObject(); files.add(fi); - fi.addProperty("filename", name); - fi.addProperty("resourceType", json.get("resourceType").getAsString()); - if (json.has("id") && json.get("id").isJsonPrimitive()) { - fi.addProperty("id", json.get("id").getAsString()); + fi.add("filename", name); + fi.add("resourceType", json.asString("resourceType")); + if (json.hasPrimitive("id")) { + fi.add("id", json.asString("id")); } - if (json.has("url") && json.get("url").isJsonPrimitive()) { - fi.addProperty("url", json.get("url").getAsString()); + if (json.hasPrimitive("url")) { + fi.add("url", json.asString("url")); } - if (json.has("version") && json.get("version").isJsonPrimitive()) { - fi.addProperty("version", json.get("version").getAsString()); + if (json.hasPrimitive("version")) { + fi.add("version", json.asString("version")); } - if (json.has("kind") && json.get("kind").isJsonPrimitive()) { - fi.addProperty("kind", json.get("kind").getAsString()); + if (json.hasPrimitive("kind")) { + fi.add("kind", json.asString("kind")); } - if (json.has("type") && json.get("type").isJsonPrimitive()) { - fi.addProperty("type", json.get("type").getAsString()); + if (json.hasPrimitive("type")) { + fi.add("type", json.asString("type")); } - if (json.has("supplements") && json.get("supplements").isJsonPrimitive()) { - fi.addProperty("supplements", json.get("supplements").getAsString()); + if (json.hasPrimitive("supplements")) { + fi.add("supplements", json.asString("supplements")); } } } catch (Exception e) { @@ -70,7 +68,7 @@ public class NpmPackageIndexBuilder { } public String build() { - String res = new GsonBuilder().setPrettyPrinting().create().toJson(index); + String res = JsonParser.compose(index, true); index = null; files = null; return res; diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageClient.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageClient.java index 2445ac714..f1a854739 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageClient.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageClient.java @@ -17,12 +17,10 @@ import org.hl7.fhir.utilities.SimpleHTTPClient.HTTPResult; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.VersionUtilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; -import org.hl7.fhir.utilities.json.JsonUtilities; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.model.JsonProperty; +import org.hl7.fhir.utilities.json.parser.JsonParser; public class PackageClient { @@ -81,21 +79,21 @@ public class PackageClient { JsonObject json; try { json = fetchJson(Utilities.pathURL(address, id)); - JsonObject versions = json.getAsJsonObject("versions"); + JsonObject versions = json.getJsonObject("versions"); boolean hasDates = true; if (versions != null) { - for (String v : versions.keySet()) { - JsonObject obj = versions.getAsJsonObject(v); - Instant d = obj.has("date") ? JsonUtilities.parseDate(obj, "date") : null; + for (JsonProperty v : versions.getProperties()) { + JsonObject obj = versions.getJsonObject(v.getName()); + Instant d = obj.hasString("date") ? obj.asDate("date") : null; if (d == null) { hasDates = false; } - res.add(new PackageInfo(JsonUtilities.str(obj, "Name", "name"), - JsonUtilities.str(obj, "Version", "version"), - JsonUtilities.str(obj, "FhirVersion", "fhirVersion"), - JsonUtilities.str(obj, "Description", "description"), - JsonUtilities.str(obj, "url"), - JsonUtilities.str(obj, "canonical"), + res.add(new PackageInfo(obj.asString("Name", "name"), + obj.asString("Version", "version"), + obj.asString("FhirVersion", "fhirVersion"), + obj.asString("Description", "description"), + obj.asString("url"), + obj.asString("canonical"), address, d)); } } @@ -127,18 +125,17 @@ public class PackageClient { try { JsonArray json = fetchJsonArray(Utilities.pathURL(address, "catalog?")+params.toString()); boolean hasDates = true; - for (JsonElement e : json) { - JsonObject obj = (JsonObject) e; - Instant d = obj.has("date") ? JsonUtilities.parseDate(obj, "date") : null; + for (JsonObject obj : json.asJsonObjects()) { + Instant d = obj.has("date") ? obj.asDate("date") : null; if (d == null) { hasDates = false; } - res.add(new PackageInfo(JsonUtilities.str(obj, "Name", "name"), - JsonUtilities.str(obj, "Version", "version"), - JsonUtilities.str(obj, "FhirVersion", "fhirVersion"), - JsonUtilities.str(obj, "Description", "description"), - JsonUtilities.str(obj, "url"), - JsonUtilities.str(obj, "canonical"), + res.add(new PackageInfo(obj.asString("Name", "name"), + obj.asString("Version", "version"), + obj.asString("FhirVersion", "fhirVersion"), + obj.asString("Description", "description"), + obj.asString("url"), + obj.asString("canonical"), address, d)); } if (hasDates) { @@ -165,13 +162,13 @@ public class PackageClient { private JsonObject fetchJson(String source) throws IOException { String src = TextFile.streamToString(fetchUrl(source, "application/json")); //System.out.println(src); - return (JsonObject) new com.google.gson.JsonParser().parse(src); + return JsonParser.parseObject(src); } private JsonArray fetchJsonArray(String source) throws IOException { String src = TextFile.streamToString(fetchUrl(source, "application/json")); //System.out.println(src); - return (JsonArray) new com.google.gson.JsonParser().parse(src); + return (JsonArray) JsonParser.parse(src); } public String url(String id, String v) { @@ -209,11 +206,11 @@ public class PackageClient { } protected PackageInfo getPackageInfoFromJSON(JsonObject o, String name, String canonical, String fhirVersion) { - String id = JsonUtilities.str(o, "npm-name"); - String pname = JsonUtilities.str(o, "name"); - String pcanonical = JsonUtilities.str(o, "canonical"); - String description = JsonUtilities.str(o, "description"); - Instant d = o.has("date") ? JsonUtilities.parseDate(o, "date") : null; + String id = o.asString("npm-name"); + String pname = o.asString("name"); + String pcanonical = o.asString("canonical"); + String description = o.asString("description"); + Instant d = o.has("date") ? o.asDate("date") : null; boolean ok = true; if (ok && !Utilities.noString(name)) { ok = (pname != null && pname.contains(name)) || (description != null && description.contains(name)) || (id != null && id.contains(name)); @@ -227,15 +224,15 @@ public class PackageClient { if (ok) { // if we can find something... - for (JsonObject e : JsonUtilities.objects(o, "editions")) { - if (fhirVersion == null || fhirVersion.equals(JsonUtilities.str(e, "fhir-version"))) { - String v = JsonUtilities.str(e, "ig-version"); + for (JsonObject e : o.getJsonObjects("editions")) { + if (fhirVersion == null || fhirVersion.equals(e.asString("fhir-version"))) { + String v = e.asString("ig-version"); if (version == null || VersionUtilities.isThisOrLater(version, v)) { version = v; - fVersion = e.getAsJsonArray("fhir-version").get(0).getAsString(); - url = JsonUtilities.str(e, "url"); + fVersion = e.getJsonArray("fhir-version").get(0).asString(); + url = e.asString("url"); - String npmPackage = JsonUtilities.str(e, "package"); + String npmPackage = e.asString("package"); if (npmPackage != null && id == null) { id = npmPackage.substring(0, npmPackage.indexOf("#")); } @@ -248,8 +245,8 @@ public class PackageClient { public List listFromRegistry(String name, String canonical, String fhirVersion) throws IOException { List result = new ArrayList<>(); - JsonObject packages = JsonTrackingParser.fetchJson("https://raw.githubusercontent.com/FHIR/ig-registry/master/fhir-ig-list.json?nocache=" + System.currentTimeMillis()); - for (JsonObject o : JsonUtilities.objects(packages, "guides")) { + JsonObject packages = JsonParser.parseObjectFromUrl("https://raw.githubusercontent.com/FHIR/ig-registry/master/fhir-ig-list.json?nocache=" + System.currentTimeMillis()); + for (JsonObject o : packages.getJsonObjects("guides")) { if (o.has("canonical")) { final PackageInfo packageInfo = getPackageInfoFromJSON(o, name, canonical, fhirVersion); if (packageInfo.getVersion() != null) { @@ -265,9 +262,8 @@ public class PackageClient { params.append("dependency="+id.replace("#", "|")); try { JsonArray json = fetchJsonArray(Utilities.pathURL(address, "catalog?")+params.toString()); - for (JsonElement e : json) { - JsonObject obj = (JsonObject) e; - list.add(JsonUtilities.str(obj, "Name", "name")); + for (JsonObject obj : json.asJsonObjects()) { + list.add(obj.asString("Name", "name")); } } catch (IOException e1) { } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageGenerator.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageGenerator.java index a0d24ef4e..4afdb2a9a 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageGenerator.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageGenerator.java @@ -39,14 +39,9 @@ import java.util.List; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSyntaxException; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; public class PackageGenerator { @@ -94,11 +89,10 @@ public class PackageGenerator { object = new JsonObject(); } - public PackageGenerator(OutputStream stream, InputStream template) throws JsonSyntaxException, IOException { + public PackageGenerator(OutputStream stream, InputStream template) throws IOException { super(); this.stream = stream; - JsonParser parser = new com.google.gson.JsonParser(); - object = parser.parse(TextFile.streamToString(template)).getAsJsonObject(); + object = JsonParser.parseObject(TextFile.streamToString(template)); } @@ -107,8 +101,7 @@ public class PackageGenerator { } public void commit() throws IOException { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - String json = gson.toJson(object); + String json = JsonParser.compose(object, true); OutputStreamWriter sw = new OutputStreamWriter(stream, "UTF-8"); sw.write('\ufeff'); // Unicode BOM, translates to UTF-8 with the configured outputstreamwriter sw.write(json); @@ -118,17 +111,17 @@ public class PackageGenerator { public PackageGenerator name(String value) { // NOTE: I removed a prefix of "@fhir/" here. What was this for? -JA - object.addProperty("name", value); + object.add("name", value); return this; } public PackageGenerator version(String value) { - object.addProperty("version", value); + object.add("version", value); return this; } public PackageGenerator toolsVersion(int value) { - object.addProperty("tools-version", value); + object.add("tools-version", value); return this; } @@ -142,44 +135,44 @@ public class PackageGenerator { } public PackageGenerator description(String value) { - object.addProperty("description", value); + object.add("description", value); return this; } public PackageGenerator license(String value) { - object.addProperty("license", value); + object.add("license", value); return this; } public PackageGenerator homepage(String value) { - object.addProperty("homepage", value); + object.add("homepage", value); return this; } public PackageGenerator bugs(String value) { - object.addProperty("bugs", value); + object.add("bugs", value); return this; } public PackageGenerator author(String name, String email, String url) { JsonObject person = new JsonObject(); - person.addProperty("name", name); + person.add("name", name); if (!Utilities.noString(email)) - person.addProperty("email", email); + person.add("email", email); if (!Utilities.noString(url)) - person.addProperty("url", url); + person.add("url", url); object.add("author", person); return this; } public PackageGenerator contributor(String name, String email, String url) { JsonObject person = new JsonObject(); - person.addProperty("name", name); + person.add("name", name); if (!Utilities.noString(email)) - person.addProperty("email", email); + person.add("email", email); if (!Utilities.noString(url)) - person.addProperty("url", url); - JsonArray c = object.getAsJsonArray("contributors"); + person.add("url", url); + JsonArray c = object.getJsonArray("contributors"); if (c == null) { c = new JsonArray(); object.add("contributors", c); @@ -189,27 +182,23 @@ public class PackageGenerator { } public PackageGenerator dependency(String name, String version) { - JsonObject dep = object.getAsJsonObject("dependencies"); + JsonObject dep = object.getJsonObject("dependencies"); if (dep == null) { dep = new JsonObject(); object.add("dependencies", dep); } - dep.addProperty(name, version); + dep.add(name, version); return this; } public PackageGenerator file(String name) { - JsonArray files = object.getAsJsonArray("files"); - if (files == null) { - files = new JsonArray(); - object.add("files", files); - } - files.add(new JsonPrimitive(name)); + JsonArray files = object.forceArray("files"); + files.add(name); return this; } public PackageGenerator kind(PackageType kind) { - object.addProperty("type", kind.getCode()); + object.add("type", kind.getCode()); return this; } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java index c1e3c6cc4..764143e72 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageHacker.java @@ -12,10 +12,11 @@ import java.util.Map; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; +import org.hl7.fhir.utilities.json.model.JsonArray; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; + -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; /** * intenral use only - set the file name to edit in main(), and fill out the edit routine @@ -74,14 +75,14 @@ public class PackageHacker { } private String nice(JsonObject json) { - return new GsonBuilder().setPrettyPrinting().create().toJson(json); + return JsonParser.compose(json, true); } private void change(JsonObject npm) throws FileNotFoundException, IOException { // fixVersions(npm); // npm.remove("notForPublication"); npm.remove("url"); - npm.addProperty("url", "https://hl7chile.cl/fhir/ig/CoreCL/1.7.0"); + npm.add("url", "https://hl7chile.cl/fhir/ig/CoreCL/1.7.0"); // npm.remove("name"); // npm.addProperty("name", "hl7.fhir.uv.smart-app-launch"); // npm.remove("canonical"); @@ -128,7 +129,7 @@ public class PackageHacker { private void setProperty(JsonObject npm, String name, String value) { npm.remove("homepage"); - npm.addProperty("homepage", "http://hl7.org/fhir"); + npm.add("homepage", "http://hl7.org/fhir"); } private void fixNames(Map content) { diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageScanner.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageScanner.java index 3c39eeb45..cb2b24391 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageScanner.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/PackageScanner.java @@ -9,10 +9,9 @@ import java.util.Set; import org.hl7.fhir.utilities.TextFile; import org.hl7.fhir.utilities.Utilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; -import org.hl7.fhir.utilities.json.JsonUtilities; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; -import com.google.gson.JsonObject; public class PackageScanner { @@ -63,7 +62,7 @@ public class PackageScanner { } catch (Exception e) { fv = "--"; } - output.add(pck.name()+"\t"+pck.version()+"\t"+pck.canonical()+"\t"+fv+'\t'+pck.fhirVersionList()+'\t'+JsonUtilities.str(json, "kind")+'\t'+JsonUtilities.str(json, "type")+'\t'+JsonTrackingParser.writeDense(json)); } catch (Exception e) { + output.add(pck.name()+"\t"+pck.version()+"\t"+pck.canonical()+"\t"+fv+'\t'+pck.fhirVersionList()+'\t'+json.asString("kind")+'\t'+json.asString("type")+'\t'+JsonParser.compose(json)); } catch (Exception e) { System.out.println("Error acessing "+pi.getId()+"#"+piv.getVersion()+": "+e.getMessage()); e.printStackTrace(); } diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/ResourceRenamer.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/ResourceRenamer.java index 272db7f38..dd9a451da 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/ResourceRenamer.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/npm/ResourceRenamer.java @@ -1,13 +1,13 @@ package org.hl7.fhir.utilities.npm; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import org.hl7.fhir.utilities.Utilities; -import org.hl7.fhir.utilities.json.JsonTrackingParser; -import org.hl7.fhir.utilities.json.JsonUtilities; +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; -import com.google.gson.JsonObject; public class ResourceRenamer { @@ -24,13 +24,13 @@ public class ResourceRenamer { } private void unbundle(File f) throws IOException { - JsonObject j = JsonTrackingParser.parseJson(f); - for (JsonObject e : JsonUtilities.objects(j, "entry")) { - JsonObject r = e.getAsJsonObject("resource"); - String rt = r.get("resourceType").getAsString(); - String id = r.get("id").getAsString(); + JsonObject j = JsonParser.parseObject(f); + for (JsonObject e : j.getJsonObjects("entry")) { + JsonObject r = e.getJsonObject("resource"); + String rt = r.asString("resourceType"); + String id = r.asString("id"); String nn = Utilities.path(Utilities.getDirectoryForFile(f.getAbsolutePath()), rt+"-"+id+".json"); - JsonTrackingParser.write(r, new File(nn), true); + JsonParser.compose(r, new FileOutputStream(nn), true); } } @@ -39,9 +39,9 @@ public class ResourceRenamer { for (File f : dir.listFiles()) { if (f.getName().endsWith(".json")) { try { - JsonObject j = JsonTrackingParser.parseJson(f); - String rt = j.get("resourceType").getAsString(); - String id = j.get("id").getAsString(); + JsonObject j = JsonParser.parseObject(f); + String rt = j.asString("resourceType"); + String id = j.asString("id"); String nn = Utilities.path(Utilities.getDirectoryForFile(f.getAbsolutePath()), rt+"-"+id+".json"); File nf = new File(nn); if (!nn.equals(f.getAbsolutePath())) { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/DateTimeUtilTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/DateTimeUtilTests.java index 0caceb764..2a398785c 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/DateTimeUtilTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/DateTimeUtilTests.java @@ -1,6 +1,12 @@ package org.hl7.fhir.utilities; -import ca.uhn.fhir.model.api.TemporalPrecisionEnum; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; +import java.util.stream.Stream; + import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; @@ -8,12 +14,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.util.Date; -import java.util.Locale; -import java.util.TimeZone; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; +import ca.uhn.fhir.model.api.TemporalPrecisionEnum; public class DateTimeUtilTests { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/DurationUtilTest.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/DurationUtilTest.java index 838ae860f..e1705f14a 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/DurationUtilTest.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/DurationUtilTest.java @@ -1,18 +1,19 @@ package org.hl7.fhir.utilities; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.xml.sax.SAXException; +import static org.junit.jupiter.api.Assertions.assertEquals; -import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.assertEquals; +import javax.xml.parsers.ParserConfigurationException; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.xml.sax.SAXException; public class DurationUtilTest { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/FileFormatTest.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/FileFormatTest.java index c79625399..84b930020 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/FileFormatTest.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/FileFormatTest.java @@ -1,6 +1,8 @@ package org.hl7.fhir.utilities; -import org.junit.jupiter.api.Test; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -8,9 +10,7 @@ import java.io.PrintStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; +import org.junit.jupiter.api.Test; public class FileFormatTest { @Test diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/SimpleHTTPClientTest.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/SimpleHTTPClientTest.java index bb7030d99..d2fe2e6c9 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/SimpleHTTPClientTest.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/SimpleHTTPClientTest.java @@ -1,11 +1,10 @@ package org.hl7.fhir.utilities; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; -import java.nio.charset.StandardCharsets; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; public class SimpleHTTPClientTest { @Test diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/UtilitiesTest.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/UtilitiesTest.java index 9f5f51877..98732e35c 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/UtilitiesTest.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/UtilitiesTest.java @@ -1,9 +1,6 @@ package org.hl7.fhir.utilities; -import org.apache.commons.lang3.SystemUtils; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.io.IOException; @@ -11,7 +8,10 @@ import java.nio.file.Paths; import java.text.MessageFormat; import java.util.Random; -import static org.junit.jupiter.api.Assertions.*; +import org.apache.commons.lang3.SystemUtils; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; class UtilitiesTest { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/VersionUtilitiesTest.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/VersionUtilitiesTest.java index 2ed5cab5b..1acf3bacc 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/VersionUtilitiesTest.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/VersionUtilitiesTest.java @@ -1,8 +1,9 @@ package org.hl7.fhir.utilities; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; public class VersionUtilitiesTest { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/i18n/I18nBaseTest.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/i18n/I18nBaseTest.java index 28c861a94..7961ddc40 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/i18n/I18nBaseTest.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/i18n/I18nBaseTest.java @@ -1,10 +1,8 @@ package org.hl7.fhir.utilities.i18n; -import com.ibm.icu.text.PluralRules; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; import java.io.BufferedReader; import java.io.IOException; @@ -12,12 +10,13 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.text.MessageFormat; -import java.util.*; +import java.util.Arrays; +import java.util.Locale; +import java.util.ResourceBundle; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; class I18nBaseTest { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/i18n/ICU4JTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/i18n/ICU4JTests.java index 86e63815f..21ea59998 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/i18n/ICU4JTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/i18n/ICU4JTests.java @@ -1,14 +1,15 @@ package org.hl7.fhir.utilities.i18n; -import com.ibm.icu.text.PluralRules; -import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Arrays; import java.util.HashSet; import java.util.Locale; import java.util.Set; -import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +import com.ibm.icu.text.PluralRules; public class ICU4JTests { diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/json/JsonParserTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/json/JsonParserTests.java index 3ce0422da..a96e98044 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/json/JsonParserTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/json/JsonParserTests.java @@ -26,7 +26,7 @@ public class JsonParserTests { public void testComments2() throws IOException, JsonException { JsonObject obj = JsonParser.parseObject("{\n // some comment \n \"n1\" : \"v1\"\n}\n", true); Assertions.assertEquals(0, obj.getComments().size()); - JsonString c = obj.getString("n1"); + JsonString c = obj.getJsonString("n1"); Assertions.assertEquals(1, c.getComments().size()); Assertions.assertEquals("some comment", c.getComments().get(0)); Assertions.assertEquals("{\"n1\":\"v1\"}", JsonParser.compose(obj, false)); @@ -38,7 +38,7 @@ public class JsonParserTests { JsonObject obj = JsonParser.parseObject("// some comment\n{\n \"n1\" : \"v1\"\n}\n", true); Assertions.assertEquals(1, obj.getComments().size()); Assertions.assertEquals("some comment", obj.getComments().get(0)); - JsonString c = obj.getString("n1"); + JsonString c = obj.getJsonString("n1"); Assertions.assertEquals(0, c.getComments().size()); Assertions.assertEquals("{\"n1\":\"v1\"}", JsonParser.compose(obj, false)); Assertions.assertEquals("// some comment\n{\n \"n1\" : \"v1\"\n}\n", JsonParser.compose(obj, true)); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/PackageClientTest.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/PackageClientTest.java index 5984fc8ed..3d91409c8 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/PackageClientTest.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/npm/PackageClientTest.java @@ -1,20 +1,16 @@ package org.hl7.fhir.utilities.npm; -import com.google.gson.Gson; -import com.google.gson.JsonObject; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.net.URISyntaxException; + +import org.hl7.fhir.utilities.json.model.JsonObject; +import org.hl7.fhir.utilities.json.parser.JsonParser; import org.hl7.fhir.utilities.tests.ResourceLoaderTests; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import static org.junit.jupiter.api.Assertions.assertEquals; - public class PackageClientTest implements ResourceLoaderTests { PackageClient packageClient = new PackageClient(PackageClient.PRIMARY_SERVER); @@ -32,7 +28,7 @@ public class PackageClientTest implements ResourceLoaderTests { @Test @DisplayName("test getting package from JSON works") public void getPackageInfoFromJSONTest() throws java.io.IOException, URISyntaxException { - final JsonObject jsonObject = new Gson().fromJson(new InputStreamReader(getResourceAsInputStream("npm","PackageClient-baseTestCase.json")), JsonObject.class); + final JsonObject jsonObject = JsonParser.parseObject(getResourceAsInputStream("npm","PackageClient-baseTestCase.json")); final PackageInfo packageInfo = packageClient.getPackageInfoFromJSON(jsonObject, null, null, null); assertExpectedFields(packageInfo); @@ -41,7 +37,7 @@ public class PackageClientTest implements ResourceLoaderTests { @Test @DisplayName("test getting package from JSON works") public void getPackageInfoWithIdFromJSONTest() throws java.io.IOException { - final JsonObject jsonObject = new Gson().fromJson(new InputStreamReader(getResourceAsInputStream("npm", "PackageClient-testCaseWithId.json")), JsonObject.class); + final JsonObject jsonObject = JsonParser.parseObject(getResourceAsInputStream("npm", "PackageClient-testCaseWithId.json")); final PackageInfo packageInfo = packageClient.getPackageInfoFromJSON(jsonObject, null, null, null); assertExpectedFields(packageInfo); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/CachingPackageClientTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/CachingPackageClientTests.java index ce4e63960..238bd3f06 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/CachingPackageClientTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/CachingPackageClientTests.java @@ -1,14 +1,14 @@ package org.hl7.fhir.utilities.tests; +import java.io.IOException; +import java.util.List; + import org.hl7.fhir.utilities.npm.CachingPackageClient; import org.hl7.fhir.utilities.npm.CommonPackages; import org.hl7.fhir.utilities.npm.PackageInfo; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.io.IOException; -import java.util.List; - public class CachingPackageClientTests { private static final String SERVER1 = "http://packages.fhir.org"; diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/PackageCacheTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/PackageCacheTests.java index db0ccc70f..541d536dd 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/PackageCacheTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/PackageCacheTests.java @@ -1,5 +1,9 @@ package org.hl7.fhir.utilities.tests; +import java.io.File; +import java.io.IOException; +import java.util.List; + import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.npm.CommonPackages; import org.hl7.fhir.utilities.npm.FilesystemPackageCacheManager; @@ -8,10 +12,6 @@ import org.hl7.fhir.utilities.npm.ToolsVersion; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.io.File; -import java.io.IOException; -import java.util.List; - public class PackageCacheTests { @Test diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/XLSXmlNormaliserTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/XLSXmlNormaliserTests.java index 8e430c957..4934d421e 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/XLSXmlNormaliserTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/XLSXmlNormaliserTests.java @@ -1,17 +1,12 @@ package org.hl7.fhir.utilities.tests; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.nio.file.Path; import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; -import org.apache.commons.io.IOUtils; import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.utilities.xls.XLSXmlNormaliser; import org.junit.jupiter.api.Assertions; diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/XhtmlNodeTest.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/XhtmlNodeTest.java index b7353153f..1eb8cfa3d 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/XhtmlNodeTest.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/XhtmlNodeTest.java @@ -1,5 +1,9 @@ package org.hl7.fhir.utilities.tests; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; + import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.exceptions.FHIRFormatError; import org.hl7.fhir.utilities.xhtml.XhtmlNode; @@ -9,10 +13,6 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectOutputStream; - public class XhtmlNodeTest { private static final Logger ourLog = LoggerFactory.getLogger(XhtmlNodeTest.class); diff --git a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/execution/ModuleTestExecutorTests.java b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/execution/ModuleTestExecutorTests.java index 2d590d0be..5ded8e6df 100644 --- a/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/execution/ModuleTestExecutorTests.java +++ b/org.hl7.fhir.utilities/src/test/java/org/hl7/fhir/utilities/tests/execution/ModuleTestExecutorTests.java @@ -1,13 +1,13 @@ package org.hl7.fhir.utilities.tests.execution; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Arrays; + import org.hl7.fhir.utilities.tests.execution.junit4.JUnit4TestExecutor; import org.hl7.fhir.utilities.tests.execution.junit5.JUnit5ModuleTestExecutor; import org.junit.jupiter.api.Test; -import java.util.Arrays; - -import static org.junit.jupiter.api.Assertions.assertEquals; - public class ModuleTestExecutorTests { @Test From 1617315ed88e3858592aa41a04b2b72c8a8e73bd Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Thu, 24 Nov 2022 17:58:15 -0300 Subject: [PATCH 3/5] minor improvements to validator message --- .../src/main/resources/Messages.properties | 30 +++++++++---------- .../hl7/fhir/validation/ValidationEngine.java | 1 + .../instance/InstanceValidator.java | 2 +- .../type/StructureDefinitionValidator.java | 12 ++++---- 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages.properties b/org.hl7.fhir.utilities/src/main/resources/Messages.properties index 4a0e57ae1..9f8b58608 100644 --- a/org.hl7.fhir.utilities/src/main/resources/Messages.properties +++ b/org.hl7.fhir.utilities/src/main/resources/Messages.properties @@ -322,8 +322,8 @@ StructureDefinition__at__illegal_constrained_type__from__in_ = StructureDefiniti Error_at__The_target_profile__is_not__valid_constraint_on_the_base_ = Error at {0}#{1}: The target profile {2} is not a valid constraint on the base ({3}) Error_in_profile__at__Base_isSummary___derived_isSummary__ = Error in profile {0} at {1}: Base isSummary = {2}, derived isSummary = {3} StructureDefinition__at__illegal_attempt_to_change_a_binding_from__to_ = StructureDefinition {0} at {1}: invalid attempt to change a binding from {2} to {3} -Unexpected_condition_in_differential_typeslicetypelistsize__1_at_ = Unexpected condition in differential: type-slice.type-list.size() != 1 at {0}/{1} -Unexpected_condition_in_differential_typeslicetypelistsize__10_and_implicit_slice_name_does_not_contain_a_valid_type__at_ = Unexpected condition in differential: type-slice.type-list.size() == 10 and implicit slice name does not contain a valid type (''{0}''?) at {1}/{2} +Unexpected_condition_in_differential_typeslicetypelistsize__1_at_ = Unexpected condition in differential: invalid type at {0}/{1} +Unexpected_condition_in_differential_typeslicetypelistsize__10_and_implicit_slice_name_does_not_contain_a_valid_type__at_ = Unexpected condition in differential: implicit slice name does not contain a valid type (''{0}''?) at {1}/{2} Attempt_to_use_a_snapshot_on_profile__as__before_it_is_generated = Attempt to use a snapshot on profile ''{0}'' as {1} before it is generated null_min = Null min _has_children__for_type__in_profile__but_cant_find_type = {0} has children ({1}) for type {2} in profile {3}, but can''t find type @@ -503,13 +503,13 @@ MEASURE_M_LIB_UNKNOWN = The Library {0} could not be resolved, so expression val TYPE_SPECIFIC_CHECKS_CANONICAL_ABSOLUTE = Canonical URLs must be absolute URLs if they are not fragment references ({0}) TYPE_SPECIFIC_CHECKS_CANONICAL_CONTAINED = Canonical URLs in contained resources must be absolute URLs if present ({0}) MEASURE_MR_SCORE_PROHIBITED_RT = No measureScore when the type of the report is ''data-collection'' -MEASURE_MR_SCORE_PROHIBITED_MS = No measureScore when the scoring of the mesage is ''cohort'' +MEASURE_MR_SCORE_PROHIBITED_MS = No measureScore when the scoring of the message is ''cohort'' MEASURE_MR_SCORE_REQUIRED = A measureScore is required when the Measure.scoring={0} MEASURE_MR_M_SCORING_UNK = The scoring system in this measure is unknown, so the measureScore values cannot be checked MEASURE_MR_SCORE_UNIT_PROHIBITED = A measureScore for this Measure Scoring ({0}) should not have units MEASURE_MR_SCORE_VALUE_REQUIRED = A value is required when the Measure.scoring = {0} MEASURE_MR_SCORE_VALUE_INVALID_01 = The value is invalid - it must be between 0 and 1 -MEASURE_MR_SCORE_FIXED = This value is fixed by the Measure to ''{0]'' +MEASURE_MR_SCORE_FIXED = This value is fixed by the Measure to ''{0}'' MEASURE_MR_SCORE_UNIT_REQUIRED = A unit should be present when the scoring type is {0} MEASURE_M_CRITERIA_UNKNOWN = The expression language {0} is not supported, so can''t be validated MEASURE_M_CQL_NOT_FOUND = None of the include CQL Libraries define a function {0} @@ -699,10 +699,10 @@ SD_ED_BIND_MULTIPLE_TYPES = The element {0} has a binding, and has multiple type DISCRIMINATOR_BAD_PATH = Error processing path expression for discriminator: {0} (src = ''{1}'') SLICING_CANNOT_BE_EVALUATED = Slicing cannot be evaluated: {0} TYPE_SPECIFIC_CHECKS_DT_CANONICAL_RESOLVE = Canonical URL ''{0}'' does not resolve -TYPE_SPECIFIC_CHECKS_DT_CANONICAL_RESOLVE_NC = Canonical URL ''{0}'' exists, but can't be loaded, so it can't be checked for validity +TYPE_SPECIFIC_CHECKS_DT_CANONICAL_RESOLVE_NC = Canonical URL ''{0}'' exists, but can''t be loaded, so it can''t be checked for validity TYPE_SPECIFIC_CHECKS_DT_CANONICAL_TYPE = Canonical URL ''{0}'' refers to a resource that has the wrong type. Found {1} expecting one of {2} -CODESYSTEM_CS_NO_SUPPLEMENT = CodeSystem {0} is a supplement, so can't be used as a value in Coding.system -CODESYSTEM_CS_SUPP_CANT_CHECK = CodeSystem {0} cannot be found, so can't check if concepts are valid +CODESYSTEM_CS_NO_SUPPLEMENT = CodeSystem {0} is a supplement, so can''t be used as a value in Coding.system +CODESYSTEM_CS_SUPP_CANT_CHECK = CodeSystem {0} cannot be found, so can''t check if concepts are valid CODESYSTEM_CS_SUPP_INVALID_CODE = The code ''{1}'' is not declared in the base CodeSystem {0} so is not valid in the supplement SD_VALUE_TYPE_IILEGAL = The element {0} has a {1} of type {2}, which is not in the list of allowed types ({3}) SD_VALUE_TYPE_REPEAT_HINT = The repeating element has a {1}. The {1} will apply to all the repeats (this has not been clear to all users) @@ -710,7 +710,7 @@ SD_VALUE_TYPE_REPEAT_WARNING_DOTNET = The repeating element has a {1} value for SD_NO_TYPES_OR_CONTENTREF = The element {0} has no assigned types, and no content reference CODESYSTEM_CS_UNK_EXPANSION = The code provided ({2}) is not in the value set {0}, and a code is required from this value set. The system {1} is unknown. BUNDLE_SEARCH_NOSELF = SearchSet Bundles should have a self link that specifies what the search was -BUNDLE_SEARCH_SELF_NOT_UNDERSTOOD = No types could be determined from the search string, so the types can't be checked +BUNDLE_SEARCH_SELF_NOT_UNDERSTOOD = No types could be determined from the search string, so the types can''t be checked BUNDLE_SEARCH_ENTRY_NO_RESOURCE = SearchSet Bundle Entries must have resources BUNDLE_SEARCH_ENTRY_TYPE_NOT_SURE = Unable to determine if this resource is a valid resource type for this search BUNDLE_SEARCH_ENTRY_NO_RESOURCE_ID = Search results must have ids @@ -728,30 +728,30 @@ CODESYSTEM_CS_HL7_MISSING_ELEMENT_SHOULD = HL7 Defined CodeSystems SHOULD have a CODESYSTEM_CS_NONHL7_MISSING_ELEMENT = CodeSystems SHOULD have a stated value for the {0} element so that users know the status and meaning of the code system clearly CODESYSTEM_CS_HL7_PRESENT_ELEMENT_SUPPL = CodeSystems SHOULD NOT have a stated value for the {0} element when they are a supplement CODESYSTEM_CS_HL7_PRESENT_ELEMENT_SUPPL_WRONG = CodeSystem Supplements SHALL have a content value of 'supplement' -CODESYSTEM_CS_HL7_PRESENT_ELEMENT_SUPPL_MISSING = CodeSystem Supplements with a content value of 'supplement' SHALL have a supplements elemnet that specifies which code system is being supplemented +CODESYSTEM_CS_HL7_PRESENT_ELEMENT_SUPPL_MISSING = CodeSystem Supplements with a content value of 'supplement' SHALL have a supplements element that specifies which code system is being supplemented TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_NO_QTY = Found {0} of type {2} in the profile validating a Quantity (so it must be a Quantity) TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_SYSTEM_MISMATCH = The minValue in the profile has a system of {0} which is different to the system in the value {1} so the minimum value cannot be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_CODE_MISMATCH = The minValue in the profile has a system code of {0} which is different to the system code in the value {1} so the minimum value cannot be checked -TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_VALUE = The minValue in the profile doesn't have an actual value, so the minimum value can't be checked -TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_NO_VALUE = The quantity doesn't have an actual value, so the minimum value can't be checked +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_VALUE = The minValue in the profile doesn't have an actual value, so the minimum value can''t be checked +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_NO_VALUE = The quantity doesn't have an actual value, so the minimum value can''t be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_SYSTEM = The minValue in the profile has no system so the minimum value cannot be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_NO_SYSTEM = The value has no system so the minimum value cannot be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_CODE = The minValue in the profile has no code so the minimum value cannot be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_NO_CODE = The value has no code so the minimum value cannot be checked -TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_NO_UCUM_SVC = There is no UCUM service, and the UCUM codes aren't identical, so the minimum value can't be checked +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_NO_UCUM_SVC = There is no UCUM service, and the UCUM codes aren't identical, so the minimum value can''t be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_CONVERT = Unable to convert value {0} from unit {1} to minValue unit {2} based on UCUM definitions; minimum value is not valid TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_WRONG = The value in the instance ({2}) is less than the specified minimum value ({3}) TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_WRONG_UCUM = The value in the instance ({0} {1}) is less than the specified minValue ({2} {3}) after UCUM conversion TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_NO_QTY = Found {0} of type {2} in the profile validating a Quantity (so it must be a Quantity) TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_SYSTEM_MISMATCH = The maxValue in the profile has a system of {0} which is different to the system in the value {1} so the maximum value cannot be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_CODE_MISMATCH = The maxValue in the profile has a system code of {0} which is different to the system code in the value {1} so the maximum value cannot be checked -TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_VALUE = The maxValue in the profile doesn't have an actual value, so the maximum value can't be checked -TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_NO_VALUE = The quantity doesn't have an actual value, so the maximum value can't be checked +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_VALUE = The maxValue in the profile doesn't have an actual value, so the maximum value can''t be checked +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_NO_VALUE = The quantity doesn't have an actual value, so the maximum value can''t be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_SYSTEM = The maxValue in the profile has no system so the maximum value cannot be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_NO_SYSTEM = The value has no system so the maximum value cannot be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_CODE = The maxValue in the profile has no code so the maximum value cannot be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_NO_CODE = The value has no code so the maximum value cannot be checked -TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_NO_UCUM_SVC = There is no UCUM service, and the UCUM codes aren't identical, so the maximum value can't be checked +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_NO_UCUM_SVC = There is no UCUM service, and the UCUM codes aren't identical, so the maximum value can''t be checked TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_CONVERT = Unable to convert value {0} from unit {1} to maxValue unit {2} based on UCUM definitions; maximum value is not valid TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_WRONG = The value in the instance ({2}) is greater than the specified maximum value ({3}) TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_WRONG_UCUM = The value in the instance ({0} {1}) is greater than the specified maxValue ({2} {3}) after UCUM conversion diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java index 6cd8ac487..3f7fee206 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java @@ -1028,6 +1028,7 @@ public class ValidationEngine implements IValidatorResourceFetcher, IValidationP resolvedUrls.put(type+"|"+url, ok); return ok; } catch (Exception e) { + e.printStackTrace(); resolvedUrls.put(type+"|"+url, false); return false; } diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java index 02c1a89df..38c18e93e 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java @@ -4825,7 +4825,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat } catch (Exception e) { if (STACK_TRACE) { e.printStackTrace(); } crLookups.put(url, new CanonicalResourceLookupResult(e.getMessage())); - if (e.getMessage().startsWith("java.net.UnknownHostException:")) { + if (e.getMessage() != null && e.getMessage().startsWith("java.net.UnknownHostException:")) { try { warning(errors, NO_RULE_DATE, IssueType.STRUCTURE, element.line(), element.col(), stack.getLiteralPath() + ".meta.profile[" + i + "]", false, I18nConstants.VALIDATION_VAL_PROFILE_UNKNOWN_ERROR_NETWORK, profile.primitiveValue(), new URI(url).getHost()); } catch (URISyntaxException e1) { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java index fa5d1f912..528c12ed5 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java @@ -281,7 +281,7 @@ public class StructureDefinitionValidator extends BaseValidator { case "uuid" :return addCharacteristicsForType(set, "has-length", "can-bind"); case "xhtml" :return addCharacteristicsForType(set); case "Address" :return addCharacteristicsForType(set, "do-translations"); - case "Age" : return addCharacteristicsForType(set, "has-range", "is-continuous"); + case "Age" : return addCharacteristicsForType(set, "has-range", "is-continuous", "can-bind", "has-units"); case "Annotation" :return addCharacteristicsForType(set); case "Attachment" :return addCharacteristicsForType(set, "has-size", "do-translations"); case "CodeableConcept" :return addCharacteristicsForType(set, "can-bind", "do-translations"); @@ -289,14 +289,14 @@ public class StructureDefinitionValidator extends BaseValidator { case "Coding" : return addCharacteristicsForType(set, "can-bind", "do-translations"); case "ContactPoint" :return addCharacteristicsForType(set); case "Count" :return addCharacteristicsForType(set, "has-range"); - case "Distance" :return addCharacteristicsForType(set, "has-range", "is-continuous"); - case "Duration" : return addCharacteristicsForType(set, "has-range", "is-continuous"); + case "Distance" :return addCharacteristicsForType(set, "has-range", "is-continuous", "can-bind", "has-units"); + case "Duration" : return addCharacteristicsForType(set, "has-range", "is-continuous", "can-bind", "has-units"); case "HumanName" :return addCharacteristicsForType(set); case "Identifier" : return addCharacteristicsForType(set); case "Money" : return addCharacteristicsForType(set, "has-range", "is-continuous"); case "Period" : return addCharacteristicsForType(set); case "Quantity" :return addCharacteristicsForType(set, "has-range", "is-continuous", "can-bind", "has-units"); - case "Range" :return addCharacteristicsForType(set, "has-units"); + case "Range" :return addCharacteristicsForType(set, "has-units", "can-bind", "has-units"); case "Ratio" :return addCharacteristicsForType(set, "has-units"); case "RatioRange" : return addCharacteristicsForType(set, "has-units"); case "Reference" : return addCharacteristicsForType(set, "has-target"); @@ -316,8 +316,8 @@ public class StructureDefinitionValidator extends BaseValidator { case "Resource" :return addCharacteristicsForType(set); case "Extension" :return addCharacteristicsForType(set, "can-bind"); case "Narrative" :return addCharacteristicsForType(set); - case "MoneyQuantity" :return addCharacteristicsForType(set); - case "SimpleQuantity" :return addCharacteristicsForType(set); + case "MoneyQuantity" :return addCharacteristicsForType(set, "has-range", "is-continuous", "can-bind", "has-units"); + case "SimpleQuantity" :return addCharacteristicsForType(set, "has-range", "is-continuous", "can-bind", "has-units"); case "MarketingStatus" :return addCharacteristicsForType(set); case "ExtendedContactDetail" :return addCharacteristicsForType(set); case "VirtualServiceDetail" :return addCharacteristicsForType(set); From 618f98e3237fbc0cf45dfbf94b1f34c94c7dec73 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Thu, 24 Nov 2022 18:02:02 -0300 Subject: [PATCH 4/5] Add spanish messages --- .../src/main/resources/Messages_es.properties | 800 ++++++++++++++++++ 1 file changed, 800 insertions(+) create mode 100644 org.hl7.fhir.utilities/src/main/resources/Messages_es.properties diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages_es.properties b/org.hl7.fhir.utilities/src/main/resources/Messages_es.properties new file mode 100644 index 000000000..e42c878e6 --- /dev/null +++ b/org.hl7.fhir.utilities/src/main/resources/Messages_es.properties @@ -0,0 +1,800 @@ +#InstanceValidator +Bad_file_path_error = \n********************\n* El nombre del fichero especificado, ''{0}'', no existe en el sistema de archivos local.\n* Por favor verifique que sea una ubicación válida.\n********************\n\n +Bundle_BUNDLE_Entry_Canonical = La URL canónica ({0}) no puede coincidir con la fullUrl ({1}) salvo en el servidor canónico +Bundle_BUNDLE_Entry_Document = El primer elemento de tipo entry en un documento debe ser un recurso Composition +Bundle_BUNDLE_Entry_IdUrlMismatch = EL ID del Recurso no coincide con el ID en la fullUrl del elemento entry (''{0}'' vs ''{1}'') +Bundle_BUNDLE_Entry_MismatchIdUrl = La URL canónica ({0}) no puede coincidir con el elemento fullUrl ({1}) a menos que el id del recurso ({2}) también coincida +Bundle_BUNDLE_Entry_NoFirst = Los documentos o mensajes deben contener al menos un elemento entry +Bundle_BUNDLE_Entry_NoFirstResource = No hay ningún recurso en el primer elemento entry +Bundle_BUNDLE_Entry_NoFullUrl = El elemento entry del Bundle no tiene elemento fullUrl +BUNDLE_BUNDLE_ENTRY_FULLURL_REQUIRED = Excepto para transacciones o lotes , cada elemento entry en un recurso Bundle debe tener un elemento fullUrl cuya identidad es la del recurso contenido en el elemento entry +Bundle_BUNDLE_Entry_NoProfile_TYPE = No se ha encontrado el perfil para el recurso {0} de tipo ''{1}'' +Bundle_BUNDLE_Entry_NoProfile_EXPL = El perfil especificado {2} not ha sido encontrado para el recurso {0} de tipo ''{0}'' +Bundle_BUNDLE_Entry_NO_LOGICAL_EXPL = El modelo lógico especificado {1} no ha sido encontrado para el recurso ''Binary/{0}'' +Bundle_BUNDLE_Entry_NotFound = No se puede encontrar ''{0}'' en el recurso Bundle ({1}) +Bundle_BUNDLE_Entry_Orphan = La Entry {0} no es alcanzable desde la primera entry del Bundle +BUNDLE_BUNDLE_ENTRY_REVERSE = La Entry {0} no es alcanzable atravesando hacia adelante desde la primera entry del Bundel, y no es un tipo de recurso que habitualmente se use de esta manera - verifique que no se haya perdido +Bundle_BUNDLE_Entry_Type = El tipo ''{0}'' no es válido - no se permiten recursos aquí (permitido = {1}) +Bundle_BUNDLE_Entry_Type2 = El tipo ''{0}'' no es válido - debe ser {1} (permitido = {2}) +Bundle_BUNDLE_Entry_Type3_one = El tipo ''{1}'' no es válido - debe ser de tipo {2} +Bundle_BUNDLE_Entry_Type3_other = El tipo ''{1}'' no es válido - debe ser uno de estos {0} tipos: {2} +Bundle_BUNDLE_FullUrl_Missing = La referencia relativa aparece dentro de un Bundle cuya entry no tiene un elemento fullUrl +Bundle_BUNDLE_FullUrl_NeedVersion = Las entradas que coinciden con el elemento fullURL {0} deben declarar los elementos meta/versionId porque son referencias a versión específica +Bundle_BUNDLE_MultipleMatches = Hay multiples coincidencias en el Bundle para la referencia {0} +Bundle_BUNDLE_Not_Local = La referencia de tipo URN no está contenida localmente dentro del Bundle {0} +Bundle_MSG_Event_Count = Se esperaban {0} pero se encontraron {1} elementos event +Bundle_Document_Date_Missing = Un documento debe tener un elemento date +Bundle_Document_Date_Missing_html = El valor [(type = ''document'') implica (meta.lastUpdated.hasValue())] +CapabalityStatement_CS_SP_WrongType = Discordancia de Tipos - El tipo del parametro de busqueda SearchParameter ''{0}'' es {1}, pero el tipo aquí es {2} +CodeSystem_CS_VS_IncludeDetails = El CodeSystem {0} tiene un set de valores ''all system'' de {1}, pero el include tiene detalles adicionales +CodeSystem_CS_VS_Invalid = El CodeSystem {0} tiene un set de valores ''all system'' de {1}, pero no tiene un solo include +CODESYSTEM_CS_VS_EXP_MISMATCH = El CodeSystem {0} tiene un set de valores ''all system'' de {1}, pero es una expansión con la cantidad incorrecta de conceptos (encontrados {2}, esperados {3}) +CodeSystem_CS_VS_WrongSystem = El CodeSystem {0} tiene un set de valores ''all system'' de {1}, pero no tiene un system coincidente ({2}) +Extension_EXTP_Context_Wrong = La extensión {0} no está permitida en este punto (permitido = {1}; este elemento es {2}) +Extension_EXTM_Context_Wrong = El uso de la extensión modificante {0} no es permitido en este punto (permitido = {1}; este elemento es {2}) +Extension_EXT_Count_Mismatch = Discordancia en la cantidad de extensiones: se esperaban {0} pero se encontraron {1} +Extension_EXT_Count_NotFound = Discordancia en la cantidad de extensiones: no se pudo encontrar la extensión: {0} +Extension_EXT_Fixed_Banned = No se permiten extensiones, ya que el valor fijo especificado no contiene extensiones +Extension_EXT_Modifier_MismatchN = Discordancia en la extension modificante: el elemento extension no esta etiquetado como modificante, pero la extension subyacente si +Extension_EXT_Modifier_MismatchY = Discordancia en la extension modificante: el elemento extension está etiquetado como modificante, pero la extension subyacente no +Extension_EXT_Modifier_N = La Extensión ''{0}'' no puede ser usada como extension (it''s a modifierExtension) +Extension_EXT_Modifier_Y = The Extension ''{0}'' must not be used as a modifierExtension (it''s a regular extension) +Extension_EXT_Simple_ABSENT = La definición para la Extensión ''{0}'' es para una extensión simple, asi que debe contener un valor +Extension_EXT_Simple_WRONG = La definición para la Extensión ''{0}'' es para una extensión simple, asi que debe contener un valor, no otras extensiones +Extension_EXT_SubExtension_Invalid = La url para la sub-extensión ''{0}'' no ha sido definida para la Extensión {1} +Extension_EXT_Type = La definición para la Extensión ''{0}'' permite los tipos {1} pero se encontró {2} +Extension_EXT_URL_Absolute = El elemento extension.url debe ser una URL absoluta +Extension_EXT_Unknown = Extension desconocida {0} +Extension_EXT_Unknown_NotHere = La extension {0} es desconocida y no está permitida aquí +Extension_EXT_Url_NotFound = El elemento Extension.url es requerido +Extension_EXT_Version_Internal = Estado ilegal para el estado de evaluación de la url para la extensión ''{0}'' +Extension_EXT_Version_Invalid = La url de la Extension ''{0}'' no es válida (Versión inválida ''{1}'') +Extension_EXT_Version_InvalidId = La url de la Extension ''{0}'' no es válida (Elemento id inválido ''{1}'') +Extension_EXT_Version_NoChange = La url de la extensión ''{0}'' no es válida (El Elemento id ''{1}'' es válido, pero no puede utilizarse en un paradigma entre versiones porque no ha habido cambios entre las versiones relevantes) +Fixed_Type_Checks_DT_Address_Line = Esperados {0} pero encontrados {1} elementos line +Fixed_Type_Checks_DT_Name_Family = Esperados {0} pero encontrados {1} elementos family +Fixed_Type_Checks_DT_Name_Given = Esperados {0} pero encontrados {1} elementos given +Fixed_Type_Checks_DT_Name_Prefix = Esperados {0} pero encontrados {1} elementos prefix +Fixed_Type_Checks_DT_Name_Suffix = Esperados {0} pero encontrados {1} elementos suffix +Internal_INT_Bad_Type = Tipo de valor fijo no gestionado {0} +Language_XHTML_Lang_Different1 = El recurso tiene un elemento language ({0}), y el XHTML tiene un etiqueta lang ({1}), pero difieren +Language_XHTML_Lang_Different2 = El recurso tiene un elemento language ({0}), y el XHTML tiene una etiqueta xml:lang ({1}), pero difieren +Language_XHTML_Lang_Missing1 = El recurso tiene un elemento language, pero el XHTML no tiene etiquetas lang o xml:lang tag (necesita ambos - ver https://www.w3.org/TR/i18n-html-tech-lang/#langvalues) +Language_XHTML_Lang_Missing2 = El recurso tiene un elemento language, pero el XHTML no tiene etiqueta lang (necesita ambas lang y xml:lang - ver https://www.w3.org/TR/i18n-html-tech-lang/#langvalues) +Language_XHTML_Lang_Missing3 = El recurso tiene un elemento language, pero el XHTML no tiene etiqueta xml:lang (necesita ambas lang and xml:lang - ver https://www.w3.org/TR/i18n-html-tech-lang/#langvalues) +Meta_RES_Security_Duplicate = Etiqueta de Seguridad Duplicada {0} +MustSupport_VAL_MustSupport = El elemento {0} no está marcado como ''mustSupport'' en el perfil {1}. Considere no usar el elemento, o marcar el elemento como must-Support en el perfil +Profile_EXT_Not_Here = La extensión {0} no se puede utilizar en este punto (basado en el invariante contextual ''{1}'') +Profile_VAL_MissingElement = El elemento ''{0}'' no se encuentra - es obligatorio en base al valor fijo asignado por el perfil {1} +Profile_VAL_NotAllowed = El elemento {0} está presente en la instancia pero no puede ser incluido en el elemento {1} especificado en el perfil +Measure_MR_M_None = No se identifica un elemento Measure, asi que no se puede validar contra el elemento Measure +Measure_MR_M_NotFound = El elemento Measure ''{0}'' no pudo ser resuelto, asi que no se puede validar contra el elemento Measure +Questionnaire_QR_Item_BadOption = El valor provisto ({0}::{1}) no está en el conjunto de valores para las opciones provisto por el cuestionario +Questionnaire_QR_Item_Coding = Error {0} validando el elemento Coding contra las opciones del Recurso Questionnaire +Questionnaire_QR_Item_CodingNoOptions = No se puede validar la opción del elemento Coding porque no se provee lista de opciones +Questionnaire_QR_Item_DateNoOptions = No se puede validar la opción de fecha porque no se ha provisto una lista de opciones +Questionnaire_QR_Item_Display = Los items que no sean de tipo DISPLAY no deben tener items - linkId {0} +Questionnaire_QR_Item_Group = Los items de tipo GROUP no deben tener respuestas +Questionnaire_QR_Item_GroupAnswer = Los items que no sean de tipo GROUP no pueden tener items fuera de las respuestas (use answer.item no .item) +Questionnaire_QR_Item_IntNoOptions = No puede validar una respuesta entera porque no se ha provisto una lista de opciones +Questionnaire_QR_Item_Missing = No se ha encontrado respuesta para el item requerido ''{0}'' +Questionnaire_QR_Item_NoCoding = El código {0}::{1} no es una opción valida +Questionnaire_QR_Item_NoDate = La fecha {0} no es una opción válida +Questionnaire_QR_Item_NoInteger = El entero {0} no es una opción válida +Questionnaire_QR_Item_NoLinkId = No hay LinkId, asi que no puede ser validado +Questionnaire_QR_Item_NoOptions = No se pueden validar opciones porque no se han provisto opciones +Questionnaire_QR_Item_NoOptionsCoding = La lista de opciones no tiene valores de tipo Coding +Questionnaire_QR_Item_NoOptionsDate = La lista de opciones no tiene valores de tipo date +Questionnaire_QR_Item_NoOptionsInteger = La lista de opciones no tiene valores de tipo integer +Questionnaire_QR_Item_NoOptionsString = La lista de opciones no tiene valores de tipo string +Questionnaire_QR_Item_NoOptionsTime = La lista de opciones no tiene valores de tipo time +Questionnaire_QR_Item_NoString = La cadena {0} no es una opción válida +Questionnaire_QR_Item_NoTime = La hora {0} no es una opción válida +Questionnaire_QR_Item_NoType = La definición para {0} no contiene un tipo +Questionnaire_QR_Item_NotEnabled = El Item tiene una respuesta (2), aun cuando no ha sido habilitado {0} +Questionnaire_QR_Item_NotEnabled2 = El Item tiene una respuesta, aun cuando no ha sido habilitado (item.id = ''{0}'') +Questionnaire_QR_Item_NotFound = El LinkId ''{0}'' no ha sido encontrado en el cuestionario +Questionnaire_QR_Item_OnlyOneA = Solo un item con respuesta se permite para items que tengan este linkId +#The following error cannot occur for a single item. _one case left intentionally blank. +Questionnaire_QR_Item_OnlyOneI_one = +Questionnaire_QR_Item_OnlyOneI_other = Solo una respuesta permitida para el linkID {1} pero se encontraron {0} items +Questionnaire_QR_Item_Order = Error Estructural: los items están fuera de orden +Questionnaire_QR_Item_StringNoOptions = No se puede validar la respuesta de tipo string porque no se ha provisto una lista de opciones +Questionnaire_QR_Item_Text = Si el elemento text existe debe coincidir con la definición realizada en el cuestionario para el linkId {0} +Questionnaire_QR_Item_TimeNoOptions = No se puede validar la opción de respuesta de tipo time porque no se ha provisto una lista de opciones +Questionnaire_QR_Item_WrongType_one = El valor de la respuesta debe ser del tipo {1} +Questionnaire_QR_Item_WrongType_other = El valor de la respuesta debe ser de alguno de los {0} tipos {1} +Questionnaire_QR_Q_None = No se ha identificado el cuestionario, asi que no se puede realizar la validación contra el cuestionario base +Questionnaire_QR_Q_NotFound = La referencia al cuestionario ''{0}'' no pudo ser resuelta, asi que no se puede realizar la validación contra el cuestionario base +Questionnaire_Q_EnableWhen_After = El destino de esta regla enableWhen ({0}) aparece luego de la pregunta +Questionnaire_Q_EnableWhen_IsInner = Las preguntas con una regla enableWhen no pueden referir a una pregunta interna para su condición enableWhen +Questionnaire_Q_EnableWhen_NoLink = Las preguntas con un enableWhen deben tener un valor para el Link de la pregunta +Questionnaire_Q_EnableWhen_NoTarget = No se ha podido encontrar un item con el linkId ''{0}'' que se referencia en la regla enableWhen para ''{1}'' +Questionnaire_Q_EnableWhen_Self = El destino para el enableWhen de esta pregunta no puede referenciarse a si misma +Reference_REF_Aggregation = La referencia es {0} que no es soportada por los modos de agregación especificados para la referencia ({1}) +Reference_REF_BadTargetType = Tipo de Recurso Destino Inválido. Se encontró {0}, pero se esperaba uno de ({1}) +Reference_REF_BadTargetType2 = El tipo''{0}'' implicito por la URL de la referencia {1} no es un destino válido para este elemento (debe ser uno de {2}) +Reference_REF_CantMatchChoice = No se puede encontrar una coincidencia para el perfil {0} entre las opciones: {1} +Reference_REF_CantMatchType = No se puede encontrar una coincidencia para el perfil {0} (por tipo) entre las opciones: {1} +Reference_REF_CantResolve = Incapaz de resolver el recurso con la referencia ''{0}'' +Reference_REF_CantResolveProfile = Incapaz de resolver el perfil con la referencia ''{0}'' +Reference_REF_Format1 = Las URLs relativas deben tener el formato [ResourceName]/[id], o se permite una URL de búsqueda ([tipo]?parámetros. Encontrado {0}) +Reference_REF_Format2 = Las URLs relativas deben tener el formato [ResourceName]/[id]. Encontrado {0} +Reference_REF_MultipleMatches = Se han encontrado múltiples perfiles coincidentes para {0} entre las opciones: {1} +Reference_REF_NoDisplay = Un elemento Reference sin una refencia o un elemento identifier debe contener un elemento display +Reference_REF_NoType = No se puede determinar el tipo del recurso destino +Reference_REF_NotFound_Bundle = La referencia dentro del Bundle o recurso contenido no pudo encontrarse en el Bundle o Recurso {0} +Reference_REF_ResourceType = La referencia coincidente para la referencia {0} tiene resourceType {1} +Reference_REF_WrongTarget = El tipo ''{0}'' no es un destino válido para este elemento (debe ser uno de {1}) +REFERENCE_REF_WRONGTARGET_LOAD = El tipo ''{2}'' no es un destino válido para el elemento {0} (debe ser {1}) +Resource_RES_ID_Malformed_Length = El id del recurso es inválido: Muy Largo +Resource_RES_ID_Malformed_Chars = El id del recurso es inválido: Caracteres Inválidos +Resource_RES_ID_Missing = El recurso requiere un elemento id, pero no se encontró ninguno +Resource_RES_ID_Prohibited = El recurso tiene un elemento id, pero no está permitida su inclusión +Terminology_PassThrough_TX_Message = {0} para ''{1}#{2}'' +Terminology_TX_Binding_CantCheck = La Vinculación por referencia URI no pudo ser verificada +Terminology_TX_Binding_Missing = Falta la Vinculación con {0} (CodeableConcept) +Terminology_TX_Binding_Missing2 = Falta la Vinculación con {0} +Terminology_TX_Binding_NoServer = El valor provisto no puede ser validado en ausencia de un servidor terminológico +Terminology_TX_Binding_NoSource = La vinculación para {0} no tiene origen, asi que no ha podido ser verificada +Terminology_TX_Binding_NoSource2 = La vinculacieon no tiene origen, asi que no puede ser verificada +Terminology_TX_Code_NotValid = El código {0} no es un código válido en el sistema de codificación {1} +Terminology_TX_Code_Unknown = Código desconocido ({0}#{1}) +Terminology_TX_Code_ValueSet = No se ha provisto un código, y se requiere un código proveniente del conjunto de valores {0} +Terminology_TX_Code_ValueSet_MISSING = No se ha provisto un código, y se requiere un código proveniente del conjunto de valores +Terminology_TX_Code_ValueSetMax = No se ha provisto un código, y se requiere un código proveniente del conjunto de valores {0} (conjunto maximo de valores {1}) +Terminology_TX_Code_ValueSet_Ext =No se ha provisto un código, y se requiere un código proveniente del conjunto de valores {0} +Terminology_TX_Coding_Count = Esperados {0} pero encontrados {1} elementos coding +Terminology_TX_Confirm_1_CC = No se pudo confirmar que las codificaciones provistas estén en el set de valores{0} y se requieren códigos de este conjunto de valores (class = {1}) +Terminology_TX_Confirm_2_CC = No se pudo confirmar que las codificaciones provistas estén en el set de valores{0} y deberian provenir de este conjunto de valores a menos que no haya un código apropiado (el validador no pudo juzgar si era o no apropiado) (class = {1}) +Terminology_TX_Confirm_3_CC = No se pudo confirmar que las codificaciones provistas estén en el set de valores{0} y se recomienda que los códigos provengan de este conjunto de valores (class = {1}) +Terminology_TX_Confirm_4a = El código provisto ({2}) no está en el conjunto de valores {0}, y un código de este conjunto de valores es requerido: {1} +Terminology_TX_Confirm_4b = Los códigos provistos ({2}) no están en el conjunto de valores {0}, y se requiere un código de este conjunto de valores: {1} +Terminology_TX_Confirm_5 = No se pudo confirmar que los códigos provistos vengan de este conjunto de valores {0}, y deberian provenir de este conjunto de valores a menos que no haya un código apropiado (el validador no pudo juzgar si era o no apropiado) +Terminology_TX_Confirm_6 = No se pudo confirmar que los códigos provistos vengan de este conjunto de valores {0}, y se recomienda que los códigos provengan de este conjunto de valores +Terminology_TX_Display_Wrong = El elemento Display deberia ser igual a ''{0}'' +Terminology_TX_Error_CodeableConcept = Error {0} validando el CodeableConcept +Terminology_TX_Error_CodeableConcept_Max = Error {0} validando el CodeableConcept usando maxValueSet +Terminology_TX_Error_Coding1 = Error {0} validando Coding +Terminology_TX_Error_Coding2 = Error {0} validando Coding: {1} +Terminology_TX_NoValid_1_CC = Ninguno de los codings provistos están en el conjunto de valores {0}, y se requiere un código de este conjunto de valores) (codes = {1}) +Terminology_TX_NoValid_10 = El código provisto no está en el conjunto de valores máximo {0}, y se requiere un código de este conjunto de valores) (code = {1}#{2}) +Terminology_TX_NoValid_11 = El código provisto no está en el conjunto de valores máximo {0}, y se requiere un código de este conjunto de valores) (code = {1}#{2}), error = {3}) +Terminology_TX_NoValid_12 = El Coding provisto ({2}) no está en el conjunto de valores{0}, y se requiere un código de este conjunto de valores: {1} +Terminology_TX_NoValid_13 = El Coding provisto ({2}) no está en el conjunto de valores{0}, y deberian provenir de este conjunto de valores a menos que no haya un código apropiado (el validador no pudo juzgar si era o no apropiado) {1} +Terminology_TX_NoValid_14 = El Coding provisto ({2}) no está en el conjunto de valores{0}, y se recomienda que los códigos provengan de este conjunto de valores {1} +Terminology_TX_NoValid_15 = El valor provisto (''{0}'') no pudo ser validado en ausencia de un servidor terminológico +Terminology_TX_NoValid_16 = El valor provisto (''{0}'') no está en el conjunto de valores{1}, y se requiere un código de este conjunto de valores) {2} +Terminology_TX_NoValid_17 = El valor provisto (''{0}'') no está en el conjunto de valores{1}, y deberian provenir de este conjunto de valores a menos que no haya un código apropiado (el validador no pudo juzgar si era o no apropiado) {2} +Terminology_TX_NoValid_18 = El valor provisto (''{0}'') no está en el conjunto de valores{1}, y se recomienda que el código provengan de este conjunto de valores){2} +Terminology_TX_NoValid_2_CC = Ninguno de los codings provistos están en el conjunto de valores {0}, y deberian provenir de este conjunto de valores a menos que no haya un código apropiado (el validador no pudo juzgar si era o no apropiado) (codes = {1}) +Terminology_TX_NoValid_3_CC = Ninguno de los codings provistos están en el conjunto de valores {0}, y se recomienda que los códigos provengan de este conjunto de valores ) (codes = {1}) +Terminology_TX_NoValid_4 = El Coding provisto ({2}) no está en el conjunto de valores {0}, y se requiere un código de este conjunto de valores {1} +Terminology_TX_NoValid_5 = El Coding provisto ({2}) no está en el conjunto de valores {0}, y deberian provenir de este conjunto de valores a menos que no haya un código apropiado (el validador no pudo juzgar si era o no apropiado) {1} +Terminology_TX_NoValid_6 = El Coding provisto ({2}) no está en el conjunto de valores {0}, y se recomienda que el código provengan de este conjunto de valores {1} +Terminology_TX_NoValid_7 = Ninguno de los códigos provistos pueden ser validados contra el conjunto de valores máximo {0}, (error = {2}) +Terminology_TX_NoValid_8 = Ninguno de los códigos provistos está en el conjunto de valores máximo {0}, y se requiere un código de este conjunto de valores) (codes = {1}) +Terminology_TX_NoValid_9 = Ninguno de los códigos provistos pueden ser validados contra el conjunto de valores máximo {0}, (error = {1}) +Terminology_TX_System_Invalid = URI de Sistema Inválido: {0} +Terminology_TX_System_NotKnown = El URI para el Code System ''{0}'' es desconocido asi que el código no puede ser validado +Terminology_TX_System_Relative = Coding.system debe ser una referencia absoluta, no una referencia local +Terminology_TX_System_Unknown = Sistema de Codificación Desconocido ''{0}'' +Terminology_TX_System_ValueSet = URI de Sistema Inválido: {0} - no se puede utilizar una URI de conjunto de valores como system +Terminology_TX_System_ValueSet2 = El elemento Coding referencia un set de valores, no un sistema de codificación (''{0}'') +Terminology_TX_ValueSet_NotFound = El ValueSet {0} no ha sido encontrado por el validador +Terminology_TX_ValueSet_NotFound_CS = Se encontró una refeencia a un CodeSystem ({0}) donde corresponde un ValueSet +Type_Specific_Checks_DT_Base64_Valid = El valor ''{0}'' no es un valor válido para Base64 +Type_Specific_Checks_DT_Boolean_Value = Los valores binarios deben ser ''true'' o ''false'' +Type_Specific_Checks_DT_Code_WS = El código ''{0}'' no es válido (reglas de espacio en blanco) +Type_Specific_Checks_DT_DateTime_Reasonable = El valor ''{0}'' está fuera del rango razonable de años - verifique la entrada de datos +Type_Specific_Checks_DT_DateTime_Regex = El valor de tipo instant ''{0}'' no es válido (por regex) +Type_Specific_Checks_DT_DateTime_TZ = si la fecha tiene una hora, tiene que tener una zona horaria +Type_Specific_Checks_DT_DateTime_Valid = No es una fecha/hora válida ({0}) +Type_Specific_Checks_DT_Date_Valid = No es una fecha válida ({0}) +Type_Specific_Checks_DT_Decimal_Range = El valor ''{0}'' está fuera del rango razonable/soportado para decimales +Type_Specific_Checks_DT_Decimal_Valid = El valor ''{0}'' no es un decimal válido +Type_Specific_Checks_DT_Decimal_GT = el valor es mayor que el valor máximo permitido de {0} +Type_Specific_Checks_DT_Decimal_LT = el valor es menor que el valor mínimo permitido de {0} +Type_Specific_Checks_DT_ID_Valid = El valor de id ''{0}'' no es válido +Type_Specific_Checks_DT_Identifier_System = Identifier.system debe ser una referencia absoluta, no una referencia local +Type_Specific_Checks_DT_Instant_Valid = No es válido para el tipo instant ({0}) +Type_Specific_Checks_DT_Integer64_Valid = El valor ''{0}'' no es un integer64 válido +Type_Specific_Checks_DT_Integer_GT = el valor es mayor que el valor máximo permitido de {0} +Type_Specific_Checks_DT_Integer_LT = el valor es menor que el valor mínimo permitido de {0} +Type_Specific_Checks_DT_Integer_LT0 = el valor es menor que el valor mínimo permitido de 0 +Type_Specific_Checks_DT_Integer_LT1 = el valor es menor que el valor mínimo permitido de 1 +Type_Specific_Checks_DT_Integer_Valid = El valor ''{0}'' no es un entero válido +Type_Specific_Checks_DT_OID_Start = Los OIDs deben empezar con urn:oid: +Type_Specific_Checks_DT_OID_Valid = Los OIDs deben ser válidos ({0}) +Type_Specific_Checks_DT_Primitive_Length = el valor es mas largo que la máxima longitud permitida de {0} +Type_Specific_Checks_DT_Primitive_NotEmpty = @value no puede estar vacío +Type_Specific_Checks_DT_Primitive_Regex = El valor del elemento ''{0}'' no cumple con el regex ''{1}'' +Type_Specific_Checks_DT_Primitive_ValueExt = Los tipos primitivos deben tener un valor o tener extensiones asociadas +Type_Specific_Checks_DT_Primitive_WS = Los tipos primitivos no pueden ser solo espacio en blanco +Type_Specific_Checks_DT_String_Length = el valor es mas largo que la máxima longitud permitida de 1 MB (1048576 bytes) +Type_Specific_Checks_DT_String_WS = el valor no puede empezar o terminar con espacios en blanco ''{0}'' +Type_Specific_Checks_DT_Time_Valid = No es una hora válida ({0}) +Type_Specific_Checks_DT_URI_OID = Los valores URI no pueden empezar con oid: +Type_Specific_Checks_DT_URI_UUID = Los valores URI no pueden empezar con uuid: +Type_Specific_Checks_DT_URI_WS = Los valores URI no pueden tener espacios en blanco (''{0}'') +Type_Specific_Checks_DT_URL_Resolve = El valor URL ''{0}'' no puede resolverse +Type_Specific_Checks_DT_UUID_Strat = Las UUIDs deben empezar con urn:uuid: +Type_Specific_Checks_DT_UUID_Valid = UUIDs deben ser válidas y en letra minúscula +Validation_BUNDLE_Message = La primera entry en un mensaje tiene que ser un recurso MessageHeader +Validation_VAL_Content_Unknown = Contenido No Reconocido {0} +Validation_VAL_NoType = Tipo Desconocido {0} +Validation_VAL_Profile_MatchMultiple = Perfil {0}, El elemento coincide con más de un slice - {1}, {2} +## for the next 4 messages, the available parameters are: 0: profile url, 1: ed.path, 2: ed.id, 3: ed.sliceName, 4: ed.label, 5: element.path, 6: ed.min and optionally 7: actual count +Validation_VAL_Profile_Maximum_one = {3}: max permitido = {7}, pero se han encontrado {0} (de {1}) +Validation_VAL_Profile_Maximum_other = {3}: max permitido = {7}, pero se han encontrado {0} (de {1}) +Validation_VAL_Profile_Minimum_one = {3}: mínimo requerido = {7}, pero sólo se han encontrado {0} (de {1}) +Validation_VAL_Profile_Minimum_other = {3}: mínimo requerido = {7}, pero sólo se han encontrado {0} (de {1}) +Validation_VAL_Profile_NoCheckMax_one = {3}: Se encontró {0} coincidencia, pero es imposible verificar el max permitido ({2}) debido a la falta de validación del particionado (de {1}) +Validation_VAL_Profile_NoCheckMax_other = {3}: Se encontraron {0} coincidencias, pero es imposible verificar el max permitido ({2}) debido a la falta de validación del particionado (de {1}) +Validation_VAL_Profile_NoCheckMin_one = {3}: Found {0} match, pero es imposible verificar el mínimo requerido ({2}) debido a la falta de validación del particionado (de {1}) +Validation_VAL_Profile_NoCheckMin_other = {3}: Se encontraron {0} coincidencias, pero es imposible verificar el mínimo requerido ({2}) debido a la falta de validación del particionado (de {1}) +Validation_VAL_Profile_MultipleMatches_one = Se han encontrado multiples perfiles coincidentes entre {0} opción: {1} +Validation_VAL_Profile_MultipleMatches_other = Se han encontrado multiples perfiles coincidentes entre {0} opciones: {1} +Validation_VAL_Profile_NoDefinition = No se encontró la definición para el tipo de recurso ''{0}'' +Validation_VAL_Profile_NoMatch = Imposible encontrar una coincidencia para el perfil especificado entre las opciones: {0} +Validation_VAL_Profile_NoSnapshot = El recurso StructureDefinition {0} no tiene snapshot - la validación se realiza contra el snapshot, asi que debe ser provisto +Validation_VAL_Profile_NoType = El tipo de elemento {0} es desconocido, lo cual es ilegal. Los tipos válidos en este punto son {1} +Validation_VAL_Profile_NotAllowed = Este elemento no está permitido por el perfil {0} +Validation_VAL_Profile_NotSlice = Este elemento no coincide con ninguna partición conocida {0} y las particiones están CERRADAS: {1} +Validation_VAL_Profile_OutOfOrder = Según se especifica en el perfil {0}, el elemento ''{1}'' está fuera de orden (encontrado luego de {2}) +Validation_VAL_Profile_SliceOrder = Según se especifica en el perfil {0}, el elemento ''{1}'' está fuera de orden en la partición ordenada +Validation_VAL_Profile_Unknown = La referencia al perfil ''{0}'' no ha sido verificada porque el perfil es desconocido +VALIDATION_VAL_PROFILE_UNKNOWN_NOT_POLICY = La referencia al perfil ''{0}'' no ha sido verificada ya que es desconocido, y el validador está configurado para no aceptar perfiles desconocidos +VALIDATION_VAL_PROFILE_UNKNOWN_ERROR = La referencia al perfil ''{0}'' no ha sido verificada ya que es desconocido, y se produjo un error {1} al cargarlo +VALIDATION_VAL_PROFILE_UNKNOWN_ERROR_NETWORK = La referencia al perfil ''{0}'' no ha sido verificada ya que es desconocido, y el host {1} no pudo ser encontrado +Validation_VAL_Unknown_Profile = Perfil desconocido {0} +VALIDATION_VAL_PROFILE_DEPENDS_NOT_RESOLVED = El perfile {1} identifica {2} como una dependencia (usando la extensión http://hl7.org/fhir/StructureDefinition/structuredefinition-dependencies), pero este perfil no pudo ser encontrado +XHTML_XHTML_Attribute_Illegal = Nombre de atributo inválido en el XHTML (''{0}'' en ''{1}'') +XHTML_XHTML_Element_Illegal = Nombre de elemento inválido en el XHTML (''{0}'') +XHTML_XHTML_Entity_Illegal = Entidad inválido en el XHTML (''{0}'') +XHTML_XHTML_Image_Reference_Illegal = Referencia ilegal a imagen en el XHTML (''{0}'') +XHTML_XHTML_NS_InValid = Espacio de Nombre Erroneo en XHTML (''{0}'', debe ser ''{1}'') +XHTML_XHTML_Name_Invalid = Nombre erróneo en el XHTML (''{0}'') - debe empezar con div +_DT_Fixed_Wrong = El valor es ''{0}'' but debe ser ''{1}'' +All_observations_should_have_an_effectiveDateTime_or_an_effectivePeriod = Todos los recursos Observation deben tener un elemento effectiveDateTime o effectivePeriod +All_observations_should_have_a_performer = Todos los recursos Observation deben tener un elemento performer +All_observations_should_have_a_subject = Todos los recursos Observation deben tener un elemento subject +Unable_to_resolve_slice_matching__no_fixed_value_or_required_value_set = Imposible resolver la particion - no hay valor fijo o conjunto de valores requerido +Unable_to_resolve_slice_matching__slice_matching_by_value_set_not_done = Imposible resolver la particion - no se realizó partición por conjunto de valores +Problem_processing_expression__in_profile__path__ = Problema procesando la expresión ''{0}'' en el perfil ''{1}'' en el path ''{2}'': {3} +Unable_to_find_element_with_id_ = Imposible encontrar un elemento con id ''{0}'' +Slice_encountered_midway_through_set_path___id___ = Partición encontrada dentro del conjunto (path = {0}, id = {1}); {2} +Unable_to_resolve_actual_type_ = Imposible resolver el tipo {0} +Unsupported_version_R1 = Versión No Soportada R1 +Unsupported_version_R2 = Versión No Soportada R2 +Unsupported_version_R2B = Versión No Soportada R2B +Unsupported_fixed_value_type_for_discriminator_for_slice__ = Tipo de valor fijo no soportado para el discriminador ({0}) para la partición {1}: {2} +Unsupported_CodeableConcept_pattern__extensions_are_not_allowed__for_discriminator_for_slice_ = Patrón para CodeableConcept no soportado - las extensiones no se permiten para el discriminador ({0}) de la partición {1} +Unsupported_CodeableConcept_pattern__must_have_at_least_one_coding__for_discriminator_for_slice_ = Patrón para CodeableConcept no soportado - must have at least one coding - para el discriminador ({0}) de la partición {1} +Unsupported_CodeableConcept_pattern__using_text__for_discriminator_for_slice_ = Patrón para CodeableConcept no soportado - usa text - para el discriminador ({0}) de la partición {1} +Unsupported_Identifier_pattern__extensions_are_not_allowed__for_discriminator_for_slice_ = Patrón de Identifier no soportado - las extensiones no se permiten - para el discriminador ({0}) de la partición {1} +Unsupported_fixed_pattern_type_for_discriminator_for_slice__ = Tipo de patrón de valor fijo no soportado para el discriminador ({0}) para la partición {1}: {2} +Problem_evaluating_slicing_expression_for_element_in_profile__path__fhirPath___ = Problema evaluando la expresión de partición para el elemento en el perfil {0} path {1} (fhirPath = {2}): {3} +Could_not_match_discriminator_for_slice_in_profile_one = No se encontró coincidencia para el discriminador ({0}) para la partición {1} en el perfil {2} - el discriminador {3} no tiene valor fijo, enlace o una declaración de existencia +Could_not_match_discriminator_for_slice_in_profile_other = No se encontraron coincidencias con discriminadores ({1}) para la partición {2} en el perfil {3} - Ninguno de los {0} discriminadores {4} tiene valor fijo, enlace o una declaración de existencia +Discriminator__is_based_on_element_existence_but_slice__neither_sets_min1_or_max0 = El discriminador ({0}) está basado en la existencia de un elemento, pero la partición {1} no define cardinalidad min>=1 o max=0 +Profile_based_discriminators_must_have_a_type_with_a_profile__in_profile_ = Los discriminadores basados en perfiles deben tener un tipo con un perfil ({0} en el perfil {1}) +#The following error cannot occur for a single item. _one case left intentionally blank. +Profile_based_discriminators_must_have_only_one_type__in_profile_one = +Profile_based_discriminators_must_have_only_one_type__in_profile_other = Los discriminadores basados en perfiles deben tener un solo tipo ({1} en el perfil {2}) pero se han encontrado {0} tipos +Profile_based_discriminators_must_have_a_type__in_profile_ = Los discriminadores basados en perfiles deben tener un tipo ({0} en el perfil {1}) +Discriminator__is_based_on_type_but_slice__in__has_no_types = El discriminador ({0}) se basa en tipo, pero la partición {1} en {2} no tiene tipos +#The following error cannot occur for a single item. _one case left intentionally blank. +Discriminator__is_based_on_type_but_slice__in__has_multiple_types_one = +Discriminator__is_based_on_type_but_slice__in__has_multiple_types_other = El discriminador ({1}) está basado en tipos, pero la partición {2} en {3} tiene {0} tipos: {4} +Found__items_for__resolving_discriminator__from_ = Se han encontrado {0} items para {1} resolviendo el discriminator {2} de {3} +Unable_to_find__resolving_discriminator__from_ = Imposible encontrar {0} resolviendo el discriminador {1} de {2} +Unable_to_find_resource__at__resolving_discriminator__from_ = Imposible encontrar el recurso {0} en {1} resolviendo el discriminador {2} de {3} +No_reference_resolving_discriminator__from_ = No se encontró referencia resolviendo el discriminador {0} de {1} +Unable_to_resolve_element__in_profile_ = Imposible resolver el elemento {0} en el perfil {1} +Unable_to_resolve_profile_ = Imposible resolver el perfil {0} +Resource_resolution_services_not_provided = Los servicios de resolución de recurso no han sido provistos +Unrecognised_extension_context_ = Contexto de extensión no reconocido {0} +Unable_to_locate_the_profile__in_order_to_validate_against_it = Imposible localizar el perfil ''{0}'' para utilizarlo en validación +Reference__refers_to_a__not_a_ValueSet = La referencia {0} apunta a un {1} no a un ValueSet +Not_done_yet_ValidatorHostServicesconformsToProfile_when_item_is_not_an_element = No realizado aun (ValidatorHostServices.conformsToProfile), cuando el item no es un elemento +Not_supported_yet = No soportado aún +Unable_to_resolve_ = Imposible resolver la referencia{0} +Not_done_yet__resolve__locally_2 = No realizado aún - resolver {0} localmente (2) +Not_done_yet_ValidatorHostServicesexecuteFunction = No realizado aún (ValidatorHostServices.executeFunction) +Not_done_yet_ValidatorHostServicescheckFunction = No realizado aún (ValidatorHostServices.checkFunction) +Not_done_yet_ValidatorHostServicesresolveFunction_ = No realizado aún (ValidatorHostServices.resolveFunction): {0} +Unable_to_find_base_definition_for_logical_model__from_ = Imposible encontrar la definición base para el modelo lógico: {0} de {1} +Same_id_on_multiple_elements__in_ = El mismo id ''{0}'' en múltiples elementos {1}/{2} en {3} +No_path_on_element_Definition__in_ = No hay path en la definición del elemento {0} en {1} +needs_a_snapshot = requiere un snapshot +not_the_right_kind_of_structure_to_generate_schematrons_for = no es la clase de estructura para la cual generar schematrons +Not_handled_yet_sortElements_ = No soportado aún (sortElements: {0}:{1}) +Unable_to_resolve_profile__in_element_ = Imposible resolver el perfil {0} en elemento {1} +Cant_have_children_on_an_element_with_a_polymorphic_type__you_must_slice_and_constrain_the_types_first_sortElements_ = Un elemento polimórfico no puede tener hijos- debe particionar y restringir los tipos antes (sortElements: {0}:{1}) +Unable_to_find_profile__at_ = Imposible encontrar el perfil ''{0}'' a {1} +Unhandled_situation_resource_is_profiled_to_more_than_one_option__cannot_sort_profile = Situación no controlada: el recurso está perfilado a mas de una opción - no se puede ordenar el perfil +Internal_recursion_detection_find_loop_path_recursion____check_paths_are_valid_for_path_ = Detección de recursión interna: ciclo de recursion find() detectado > {0} - verifique que las paths sean válidas (para path {1}/{2}) +Internal_error___type_not_known_ = Error interno - tipo desconocido {0} +Unable_to_find_element_ = Incapaz de encontrar elemento {0} +Error_generating_table_for_profile__ = Error generando la tabla para el perfil {0}: {1} +StructureDefinition__at__illegal_constrained_type__from__in_ = StructureDefinition {0} en {1}: tipo restringido inválido {2} de {3} en {4} +Error_at__The_target_profile__is_not__valid_constraint_on_the_base_ = Error en {0}#{1}: El perfil destino {2} no es una restricción válida sobre la base ({3}) +Error_in_profile__at__Base_isSummary___derived_isSummary__ = Error en perfiles {0} de {1}: El recurso Base isSummary = {2}, derivado isSummary = {3} +StructureDefinition__at__illegal_attempt_to_change_a_binding_from__to_ = StructureDefinition {0} en {1}: intento inválido de cambiar una vinculación terminológica de {2} a {3} +Unexpected_condition_in_differential_typeslicetypelistsize__1_at_ = Condición inesperada en el diferencial en {0}/{1} +Unexpected_condition_in_differential_typeslicetypelistsize__10_and_implicit_slice_name_does_not_contain_a_valid_type__at_ = Condición inesperada en el diferencial y el nombre implícito de la partición no contiene un tipo válido (''{0}''?) en {1}/{2} +Attempt_to_use_a_snapshot_on_profile__as__before_it_is_generated = Intento de usar un snapshot en el perfil ''{0}'' como {1} antes que se genere +null_min = min nulo +_has_children__for_type__in_profile__but_cant_find_type = {0} tiene hijos ({1}) para el tipo {2} en el perfil {3}, pero no pudo encontrarse el tipo +_has_children__and_multiple_types__in_profile_ = {0} tiene hijos ({1}) y multiples tipos ({2}) en el perfil {3} +Adding_wrong_path = Agregando un path erroneo +Named_items_are_out_of_order_in_the_slice=Los items nominados están fuera de orden en la partición +The_base_snapshot_marks_a_slicing_as_closed_but_the_differential_tries_to_extend_it_in__at__ = El snapshot base marca la partición como cerrada, pero el diferencial trata de extenderlo en {0}, en {1} ({2}) +Not_done_yet = No implementado aún +Unknown_type__at_ = Unknown type {0} at {1} +Differential_walks_into____but_the_base_does_not_and_there_is_not_a_single_fixed_type_The_type_is__This_is_not_handled_yet = La recorrida del diferencial llega a ''{0} (@ {1})'', pero el recurso base no, y no hay un único tipo fijo. El tipo es {2}. Esto no está soportado aún +Slicing_rules_on_differential__do_not_match_those_on_base___rule___ = Las reglas de partición en el diferencial ({0}) no coinciden con aquellos en el recurso base ({1}) - regla @ {2} ({3}) +Slicing_rules_on_differential__do_not_match_those_on_base___disciminator___ = Las reglas de partición en el diferencial ({0}) no coinciden con aquellos en el recurso base ({1}) - disciminador @ {2} ({3}) +Slicing_rules_on_differential__do_not_match_those_on_base___order___ = Las reglas de partición en el diferencial ({0}) no coinciden con aquellos en el recurso base ({1}) - orden @ {2} ({3}) +not_done_yet__slicing__types__ = no implementado aún - particiones / tipos @ {0} +Invalid_slicing__there_is_more_than_one_type_slice_at__but_one_of_them__has_min__1_so_the_other_slices_cannot_exist=Partición inválida: hay mas de una partición por tipo en {0}, pero una de ellas ({1}) tiene cardinalidad min = 1, asi que el resto de las particiones no puede existir +Did_not_find_type_root_ = No se encontró el tipo raiz : {0} +Error_at_path__Slice_for_type__has_wrong_type_ = Error en el path{0}: La partición para el tipo ''{1}'' es del tipo incorrecto ''{2}'' +Error_at_path__Slice_for_type__has_more_than_one_type_ = Error en el path{0}: La partición para el tipo ''{1}'' tiene más de un tipo ''{2}'' +Error_at_path__Slice_name_must_be__but_is_ = Error en el path{0}: El nombre de la particiópn debe ser ''{1}'' pero es ''{2}'' +Error_at_path__in__Type_slicing_with_slicingdiscriminatorpath__this = Error en el path {0} in {1}: La partición por tipo con slicing.discriminator.path != ''$this'' +Error_at_path__in__Type_slicing_with_slicingdiscriminatortype__type = Error en el path {0} in {1}: La partición por tipo con slicing.discriminator.type != ''type'' +Error_at_path__in__Type_slicing_with_slicingdiscriminatorcount__1 = Error en el path {0} in {1}: La partición por tipo con slicing.discriminator.count() > 1 +Error_at_path__in__Type_slicing_with_slicingordered__true = Error en el path{0} en {1}: La partición por tipo con slicing.ordered = true +Adding_wrong_path_in_profile___vs_ = Se agrego el path incorrecto en el perfil {0}: {1} vs {2} +_has_no_children__and_no_types_in_profile_ = {0} no tiene hijos ({1}) y no hay tipos en el perfil {2} +not_done_yet = no implementado aún +Did_not_find_single_slice_ = No se encontró una partición única: {0} +Differential_does_not_have_a_slice__b_of_____in_profile_ = El diferencian en el perfil {5} no tiene una partición en {6} (en {0}, posición {1} de {2} / {3} / {4}) +Attempt_to_a_slice_an_element_that_does_not_repeat__from__in_ = Intento de particionar un elemento que no tiene repeticiones: {0}/{1} de {2} en {3}, en el elemento {4} (partición = {5}) +Unable_to_resolve_reference_to_ = Imposible resolver la referencia a {0} +Unable_to_find_element__in_ = Imposible encontrar el elemento {0} en {1} +Unable_to_find_base__for_ = Imposible encontrar la base {0} para {1} +Adding_wrong_path__outcomegetPath___resultPathBase__ = Se agregó un path erróneo - outcome.getPath() = {0}, resultPathBase = {1} +Illegal_path__in_differential_in__illegal_characters_ = Path inválido ''{0}'' en el diferencial en {1}: caracteres inválidos [] +Illegal_path__in_differential_in__illegal_character_ = Path inválido ''{0}'' en el diferencial en {1}: caracter inválido ''{2}'' +Illegal_path__in_differential_in__no_unicode_whitespace = Path inválido ''{0}'' en el diferencial en {1}: no unicode whitespace +Illegal_path__in_differential_in__name_portion_exceeds_64_chars_in_length = Path inválido ''{0}'' en el diferencial en {1}: name portion exceeds 64 chars in length +Illegal_path__in_differential_in__name_portion_mising_ = Path inválido ''{0}'' en el diferencial en {1}: falta la parte del nombre (''..'') +Illegal_path__in_differential_in__must_start_with_ = Path inválido ''{0}'' en el diferencial en {1}: debe comenzar con {2}.{3} +No_path_value_on_element_in_differential_in_ = No hay valor de path en el elemento en el diferencial en {0} +No_path_on_element_in_differential_in_ = No hay path en el elemento en el diferencial en {0} +Unxpected_internal_condition__no_source_on_diff_element = Condicion interna inesperada, no hay origen en un elemento del diferencial +type_on_first_snapshot_element_for__in__from_ = el tipo del primer elemento del snapshot para {0} en {1} de {2} +type_on_first_differential_element = tipo en el primer elemento del diferencial! +Circular_snapshot_references_detected_cannot_generate_snapshot_stack__ = Referencias circulares detectadas en el snapshot, no se puede generar el snapshot (stack = {0}) +Base__Derived_profiles_have_different_types____vs___ = Los perfiles base y derivados tienen tipos distintos ({0} = {1} vs {2} = {3}) +Derived_profile__has_no_derivation_value_and_so_cant_be_processed = El perfil derivado {0} no tiene valor de derivación por lo cual no puede ser procesado +Derived_profile__has_no_type = El perfil derivado {0} no tiene tipo +Base_profile__has_no_type = El perfil basee {0} no tiene tipo +no_derived_structure_provided = no se provee la estructura derivada +no_base_profile_provided = no se provee el perfil base +element_id__null__on_ = element id = nulo: {0} en {1} +element__null_ = element = nulo: {0} +getSliceList_should_only_be_called_when_the_element_has_slicing = getSliceList debe ser llamada cuando el elemento está particionado +Unable_to_resolve_name_reference__at_path_ = Imposible resolver la referencia al nombre {0} en el path {1} +Details_for__matching_against_Profile_ = Detalles para {0} coincidente con el perfil {1} +Does_not_match_slice_ = No coincide con la partición ''{0}'' (discriminador: {1}) +Profile__does_not_match_for__because_of_the_following_profile_issues__ = El perfil {0} no coincide para {1} por los siguientes problemas del perfil: {2} +This_element_does_not_match_any_known_slice_ = Este elemento no coincide con ninguna partición conocida {0} +defined_in_the_profile = definido en el perfil +This_does_not_appear_to_be_a_FHIR_resource_unknown_name_ = Esto no parece ser un recurso FHIR (nombre desconocido ''{0}'') +This_cannot_be_parsed_as_a_FHIR_object_no_name = Esto no puede ser parseado como un objeto FHIR (sin nombre) +This_does_not_appear_to_be_a_FHIR_resource_unknown_namespacename_ = Esto no parece ser un recurso FHIR (espacio de nombres/nombre desconocido ''{0}::{1}'') +This__cannot_be_parsed_as_a_FHIR_object_no_namespace = Esto ''{0}'' no puede ser parseado como un objeto FHIR (sin espacio de nombres) +Unable_to_find_resourceType_property = Imposible encontrar la propiedad resourceType +Error_analizando_JSON_the_primitive_value_must_be_a_string = Error analizando JSON: el valor primitivo debe ser de tipo string +Error_analizando_JSON_the_primitive_value_must_be_a_number = Error analizando JSON: el valor primitivo debe ser de tipo number +Error_analizando_JSON_the_primitive_value_must_be_a_boolean = Error analizando JSON: el valor primitivo debe ser de tipo boolean +Error_analizando_XHTML_ = Error analizando XHTML: {0} +This_property_must_be_an_object_not_ = Esta propiedad debe ser un objeto, no {0} ({1} en {2}) +This_property_must_be_an_simple_value_not_ = Esta propiedad debe ser un valor simple, no {0} ({1} en {2}) +This_property_must_be__not_ = Esta propiedad {2} debe ser {0}, no {1} (en {3}) +This_property_must_be_an_Array_not_ = Esta propiedad {1} debe ser un Array JSON, no {0} (en {2}) +OBJECT_CANNOT_BE_KEYED_ARRAY_CHILD_COUNT = Este objeto no puede ser un array json con claves porque no tiene dos hijos en la definición (children = {0}) +OBJECT_CANNOT_BE_KEYED_ARRAY_PROP_NAME = Este objeto está definido como un Array json con claves pero la definición no denomina al primer elemento hijo como la clave (children = {0}) +OBJECT_CANNOT_BE_KEYED_ARRAY_PROP_TYPE = Este objeto está definido como un Array json con claves pero la propiedad clave definida no es un tipo primitivo (children = {0}, type = {1}) +OBJECT_CANNOT_BE_KEYED_ARRAY_NO_CHOICE = Este objeto está definido como un Array json con claves pero la propidad valor designada en las definiciones es una opción - esto no está soportado (valor property = {0}) +OBJECT_CANNOT_BE_KEYED_ARRAY_NO_LIST = Este objeto está definido como un Array json con claves pero la propiedad valor designada en las definiciones es una lista - esto no está soportado (valor property = {0}) +Unrecognised_property_ = Propiedad No Reconocida ''{0}'' +Object_must_have_some_content = El objeto debe tener algún contenido +Error_analizando_JSON_ = Error analizando JSON: {0} +Node_type__is_not_allowed = El tipo de nodo {0} no está permitido +CDATA_is_not_allowed = CDATA no está permitido +Undefined_element_ = Elemento indefinido ''{0}'' +Undefined_attribute__on__for_type__properties__ = Atributo indefinido ''@{0}'' en {1} para el tipo {2} +Text_should_not_be_present = El elemento Text no debe estar presente (''{0}'') +Wrong_namespace__expected_ = Espacio de nombres erróneo - se esperaba ''{0}'' +Element_must_have_some_content = El elemento debe tener algun contenido +No_processing_instructions_allowed_in_resources = No se permiten instrucciones de procesamiento dentro de los recursos +Unknown_resource_type_missing_rdfstype = Tipo de recurso desconocido (falta rdfs:type) +reference_to__cannot_be_resolved = La referencia a {0} no puede ser resuelta +This_property_must_be_a_URI_or_bnode_not_ = Esta propiedad debe ser una URI o bnode, no {0} +This_property_must_be_a_Literal_not_ = Esta propiedad debe ser un Literal, no {0} +Unrecognised_predicate_ = Predicado desconocido ''{0}'' +Error_analizando_Turtle_ = Error analizando Turtle: {0} +Unexpected_datatype_for_rdfstype = Tipo de datos no esperado para rdfs:type +Attempt_to_replace_element_name_for_a_nonchoice_type= Intento de reemplazar un nombre de elemento por un tipo que no es una opción +Wrong_type_for_resource = Tipo incorrecto para el recurso +Contained_resource_does_not_appear_to_be_a_FHIR_resource_unknown_name_ = El recurso contenido no parece ser un recurso FHIR (nombre desconocido ''{0}'') +Unknown_Date_format_ = Formato de Fecha desconocido ''{0}'' +Unknown_Data_format_ = Formato de Datos desconocido ''{0}'' +No_type_found_on_ = No se encontro el tipo en ''{0}'' +error_writing_number__to_JSON = error escribiendo el número ''{0}'' en JSON +Unable_to_process_request_for_resource_for___ = Imposible procesar la solicitud para el recurso para {0} / {1} +Resource_type_mismatch_for___ = Tipo de recurso no coincidente para {0} / {1} +not_done_yet_cant_fetch_ = No implementado aun: no se puede cargar {0} +Attempt_to_use_Terminology_server_when_no_Terminology_server_is_available = Intento de utilizar el servidor terminológico pero no hay ninguno disponible +No_ExpansionProfile_provided = No se provee ExpansionProfile +Can_only_specify_profile_in_the_context = Solo se puede especificar perfil en el contexto +no_url_in_expand_value_set_2 = no hay url el conjunto de valores expandido 2 +no_url_in_expand_value_set = no hay url en el conjunto de valores expandido +no_value_set = El conjunto de valores carece de propiedad url +No_Parameters_provided_to_expandVS = No se proveen parametros para expandVS +No_Expansion_Parameters_provided = No se proveen parametros de expansion +Unable_to_resolve_value_Set_ = Incapaz de resolver el conjunto de valores {0} +Delimited_versions_have_exact_match_for_delimiter____vs_ = Las versiones delimitadas tienen una coincidencia exacta con el delimitador ''{0}'' : {1} vs {2} +Duplicate_Resource_ = Recurso duplicado {0} de tipo {3} (versión existente {2}, nueva versión {1}) +DUPLICATE_RESOURCE_VERSION = Recurso duplicado {0} Versión {1} de tipo {2} +Error_expanding_ValueSet_running_without_terminology_services = Error expandiendo el ValueSet: corriendo sin servicios terminológicos +Error_validating_code_running_without_terminology_services = Error validando código: corriendo sin servicios terminológicos +Unable_to_validate_code_without_using_server = Imposible validar el código sin usar el servidor +Profile___Error_generating_snapshot = Perfil {0} ({1}). Error generando el snapshot +Profile___element__Error_generating_snapshot_ = Perfil {0} ({1}), elemento {2}. Error generando snapshot: {3} +Profile___base__could_not_be_resolved = Perfil {0} ({1}) la base {2} no puede ser resuelta +Profile___has_no_base_and_no_snapshot = Perfil {0} ({1}) no tiene base ni snapshot +No_validator_configured = No se ha configurado el validador +Parser_Type__not_supported = El tipo de Parser {0} no es soportado +Version_mismatch_The_context_has_version__loaded_and_the_new_content_being_loaded_is_version_ = Discordancia de versión. El contexto tiene la versión {0} cargada, y el nuevo contenido cargado tiene la versión {1} +Error_reading__from_package__ = Error leyendo {0} del paquete {1}#{2}: {3} +Error_analizando_ = Error analizando {0}:{1} +Unable_to_connect_to_terminology_server_Use_parameter_tx_na_tun_run_without_using_terminology_services_to_validate_LOINC_SNOMED_ICDX_etc_Error__ = Incapaz de conectar al servicio terminológico. Use el parámetro ''-tx n/a'' para correr sin servicios terminológicos para validar LOINC, SNOMED, ICD-X etc. Error = {0} +Display_Name_for__should_be_one_of__instead_of_one = El nombre de display para {1}#{2} debe ser ''{3}'', no ''{4}'' +Display_Name_for__should_be_one_of__instead_of_other = El nombre de display para {1}#{2} debe ser uno de estas opciones {0} de ''{3}'', no ''{4}'' +Unknown_Code__in_ = Código desconocido {0} en {1} +UNKNOWN_CODE__IN_FRAGMENT = Código desconocido {0} en {1} - note que el sistema de codificación está etiquetado como fragmento, así que el código puede ser válido mas allá del fragmento +Code_found_in_expansion_however_ = El código se encontró en la expansión, sin embargo: {0} +None_of_the_provided_codes_are_in_the_value_set_ = Ninguno de los códigos provistos está en el conjunto de valores {0} +Coding_has_no_system__cannot_validate = El Coding no tiene sistema - no puede ser validado +Unable_to_handle_system__concept_filter_with_op__ = Incapaz de manejar el sistema {0} filtro de concepto con op = {1} +Unable_to_handle_system__filter_with_property__ = Incapaz de manejar el sistema {0} filtro con property = {1} +Unable_to_resolve_system__value_set_has_include_with_no_system = Incapaz de resolver el sistema - conjunto de valores {0} include #{1} no tiene system +Unable_to_resolve_system__value_set_has_include_with_unknown_system = Incapaz de resolver el sistema - conjunto de valores {0} include #{1} tiene system {2} desconocido, y el servidor devuelve error {3} +Unable_to_resolve_system__value_set_has_include_with_filter = Incapaz de resolver el sistema - conjunto de valores {0} include #{1} tiene un filtro en system {2} +Unable_to_resolve_system__value_set_has_imports = Incapaz de resolver el sistema - el conjunto de valores tiene imports +Unable_to_resolve_system__value_set_has_multiple_matches = Incapaz de resolver el sistema - el conjunto de valores expandido tiene multiples coincidencias: {0} +Unable_to_resolve_system__value_set_has_no_includes_or_expansion = Incapaz de resolver el sistema - el conjunto de valores {0} no tiene include o expansio +Unable_to_resolve_system__no_value_set = Incapaz de resolver el sistema - no tiene conjunto de valores +This_base_property_must_be_an_Array_not_ = Esta propiedad base debe ser un Array, no {0} +This_property_must_be_an_Array_not_ = Esta propiedad debe ser un Array, no {0} +documentmsg = (documento) +xml_attr_value_invalid = El atributo XML {0} tiene un caracter inválido +xml_encoding_invalid = La codificación de XML es inválida (debe ser UTF-8) +xml_stated_encoding_invalid = La codificación de XML declarada en la cabecera es inválida (debe ser ''UTF-8'' si se declara) +XHTML_URL_INVALID = La URL no es válida porque ''({1})'': {0} +MEASURE_MR_GRP_NO_CODE = El grupo debe tener un código que coincide con la definición del grupo en la medida +MEASURE_MR_GRP_UNK_CODE = El código para este grupo no tiene coincidencia en la definición de la medida +MEASURE_MR_GRP_DUPL_CODE = El código para este grupo está duplicado con otro grupo +MEASURE_MR_GRP_MISSING_BY_CODE = El MeasureReport no incluye un grupo para el grupo {0} +MEASURE_MR_GRP_NO_USABLE_CODE = Ninguno de los códigos provistos se puede utilizar para comparar - necesita completar system y code en al menos un elemento code +MEASURE_MR_GRP_NO_WRONG_CODE = El codigo provisto ({0}) no coincide con el codigo definido para el reporte ({1}) +DUPLICATE_ID = Valor de id duplicado ''{0}'' +TERMINOLOGY_TX_SYSTEM_NO_CODE = Un código sin sistema no tiene un significado definido. El elemento system debe estar presente +MEASURE_MR_GRP_POP_NO_CODE = El grupo debe tener un código que coincida con el código presente en la definicion poblacional incluida en la medida +MEASURE_MR_GRP_POP_UNK_CODE = El código para este grupo de población no coincide con ninguno en la definición de la medida +MEASURE_MR_GRP_POP_DUPL_CODE = El código para este grupo poblacional está duplicado en otro grupo +MEASURE_MR_GRP_POP_MISSING_BY_CODE = El recurso MeasureReport no incluye un grupo poblacional para el grupo {0} +MEASURE_MR_GRP_POP_COUNT_MISMATCH = Discordania entre count {0} y la cantidad de pacientes {1} +MEASURE_MR_GRP_POP_NO_SUBJECTS = Reportes donde el tipo es ''subject-list'' no tiene pacientes listados +MEASURE_MR_GRP_POP_NO_COUNT = Count debe estar preseente para reportes donde el tipo es ''subject-list'' +MEASURE_M_NO_GROUPS = Una medida debe contener como mínimo un grupo +MEASURE_M_GROUP_CODE = Los grupos deben tener códigos donde hay mas de un grupo +MEASURE_M_GROUP_POP = Los grupos de las medidas deben definir al menos una población +MEASURE_M_GROUP_STRATA = Los grupos de las medidas deben tener al menos un estratificador +MEASURE_M_GROUP_POP_NO_CODE = Un grupo de poblacion en una medida debe tener un codigo cuando hay mas de una población definida +MEASURE_M_GROUP_STRATA_NO_CODE = Un estratificador de un grupo de medidas debe tener un codigo cuando hay mas de una población definida +MEASURE_M_GROUP_STRATA_COMP_NO_CODE = Un componente de un estratificador de un grupo de medidas debe tener un codigo cuando hay mas de una población definida +MEASURE_M_LIB_UNKNOWN = La Library {0} no pudo ser resuelta, asi que la expresión de validación puede no ser correcta +TYPE_SPECIFIC_CHECKS_CANONICAL_ABSOLUTE = Las URL canónicas deben ser URLs absolutas si no son fragmentos de referencias ({0}) +TYPE_SPECIFIC_CHECKS_CANONICAL_CONTAINED = Las URL canónicas en recursos contenidos deben ser URLs absolutas si están presentes ({0}) +MEASURE_MR_SCORE_PROHIBITED_RT = No deberia haber measureScore donde el tipo de reporte es ''data-collection'' +MEASURE_MR_SCORE_PROHIBITED_MS = No deberia haber measureScore cuando el scoring del mensaje es ''cohort'' +MEASURE_MR_SCORE_REQUIRED = Se requiere un elemento measureScore cuando Measure.scoring={0} +MEASURE_MR_M_SCORING_UNK = El sistema de scoring en esta medida es desconocido por lo que el valor de measureScore no puede ser verificado +MEASURE_MR_SCORE_UNIT_PROHIBITED = Un measureScore para esta Measure Scoring ({0}) no deberia tener unidades +MEASURE_MR_SCORE_VALUE_REQUIRED = Se requiere un valor cuando Measure.scoring = {0} +MEASURE_MR_SCORE_VALUE_INVALID_01 = El valor es inválido - debe ser entre 0 y 1 +MEASURE_MR_SCORE_FIXED = Este valor está fijado por el recurso Measure a {0} +MEASURE_MR_SCORE_UNIT_REQUIRED = La unidad debe estar presente cuando el tipo de scoring es {0} +MEASURE_M_CRITERIA_UNKNOWN = El lenguaje para expresiones {0} no es soportado, asi que no puede ser validado +MEASURE_M_CQL_NOT_FOUND = Ninguna de las bibliotecas CQL define un una función {0} +MEASURE_M_CRITERIA_CQL_NO_LIB = No CQL Libraries found on this Measure +MEASURE_M_CRITERIA_CQL_ONLY_ONE_LIB = Si la expresión CQL no incluye un espacio de nombres solo puede haber un Library para la medida +MEASURE_M_CRITERIA_CQL_LIB_NOT_FOUND = No hay Library para el espacio de nombres {0} +MEASURE_M_CRITERIA_CQL_LIB_DUPL = Multiples bibliotecas encontradas para el espacio de nombres {0} +MEASURE_M_CRITERIA_CQL_ERROR = Error en {0}: ''{1}'' +MEASURE_M_CRITERIA_CQL_NO_ELM = Error en {0}: No se encontreo una versión compilada de CQL +MEASURE_M_CRITERIA_CQL_ELM_NOT_VALID = = Error en {0}: La versión compilada de CQL no es válida +MEASURE_M_CRITERIA_CQL_NOT_FOUND = La función {1} no existe en la biblioteca {0} +XHTML_URL_EMPTY = La URL está vacía +XHTML_URL_INVALID_CHARS_one = La URL contiene Caracteres Inválidos ({1}) +XHTML_URL_INVALID_CHARS_other = La URL contiene {0} Caracteres Inválidos ({1}) +TERMINOLOGY_TX_SYSTEM_HTTPS = La URL de sistema ''{0}'' comienza erróneamente con https: en lugar de http: +CODESYSTEM_CS_NO_VS_NOTCOMPLETE = Revisar odos los conjuntos de valores All Codes - los CodeSystems incompletos no deberian tener especificado ''All Codes'' +TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_IETF_SYSTEM_VALUE = si identifier.system es ''urn:ietf:rfc:3986'', entonces identifier.value debe ser un URI completo (debe empezar con un scheme) +TYPE_SPECIFIC_CHECKS_DT_ATT_SIZE_INVALID = El tamaño declarado del adjunto {0} no es válido +TYPE_SPECIFIC_CHECKS_DT_ATT_SIZE_CORRECT = El tamaño declarado del adjunto {0} no coincide con el tamaño verdadero del adjunto {1} +TYPE_SPECIFIC_CHECKS_DT_ATT_NO_FETCHER = El tamaño declarado del adjunto no puede ser verificado porque el validador no puede acceder a la red (url = {0}) +TYPE_SPECIFIC_CHECKS_DT_ATT_UNKNOWN_URL_SCHEME = El tamaño declarado del adjunto no puede ser verificado porquethe el validador no entiend como acceder a {0} +TYPE_SPECIFIC_CHECKS_DT_ATT_URL_ERROR = El tamaño declarado del adjunto no puede ser verificado porque hubo un error accediendo a {0}: {1} +TYPE_SPECIFIC_CHECKS_DT_ATT_TOO_LONG = El tamaño declarado del adjunto {0} bytes lo cual excede el límite de {1} bytes +TYPE_SPECIFIC_CHECKS_DT_ATT_NO_CONTENT = Los adjuntos tienen datos y/o url, o sino DEBEN tener contentType y/o language +TYPE_SPECIFIC_CHECKS_DT_BASE64_TOO_LONG = El tamaño del Base64 es {0} bytes lo cual excede el límite definido de {1} bytes +TYPE_SPECIFIC_CHECKS_DT_DECIMAL_CHARS = Se encontraron {0} posiciones decimales lo cual excede el límite definido de {1} dígitos +Validation_VAL_Profile_WrongType = El tipo de perfil especificado fue ''{0}'' en el perfil ''{2}'', pero se han encontrado tipo ''{1}'' +Validation_VAL_Profile_WrongType2 = Disonancia de tipos procesando el perfil {0} en el path {1}: El tipo de elemento es {4}, pero el perfil {3} es para un tipo diferente {2} +VALIDATION_VAL_ILLEGAL_TYPE_CONSTRAINT = Restricción inválida en el perfil {0} en el path {1} - no se puede restringir a tipo {2} desde los tipos base {3} +EXTENSION_EXTP_CONTEXT_WRONG_XVER = La extensión {0} de la versión FHIR {3} no se puede utilizar en este punto (permitido = {1}; este elemento es [{2}; esto es una advertencia ya que los contextos pueden haber sido renombrados entre versiones de FHIR) +EXTENSION_EXTM_CONTEXT_WRONG_XVER = The modifier extension {0} from FHIR version {3} no se puede utilizar en este punto (permitido = {1}; este elemento es [{2}; esto es una advertencia ya que los contextos pueden haber sido renombrados entre versiones de FHIR) +SECURITY_STRING_CONTENT_ERROR = El valor de la cadena contiene texto que parece ser etiquetas HTML embebidas, que no pueden ser incluidas por razones de seguridad en este contexto +SECURITY_STRING_CONTENT_WARNING = El valor de la cadena contiene texto que parece ser etiquetas HTML embebidas. Si este contenido se presenta en HTML sin el procesamiento adecuado, puede ser un riesgo de seguridad +ALL_OK = TODO OK +SEARCHPARAMETER_NOTFOUND = Imposible encontrar el parámetro de búsqueda base {0} asi que no puede validarse que este SearchParameter sea una derivacion correcta del mismo +SEARCHPARAMETER_BASE_WRONG = El tipo de recurso {1} no está listado como base en el SearchParameter está derivado de ({0}) +SEARCHPARAMETER_TYPE_WRONG = El tipo {1} es diferente al tipo {0} en el SearchParameter derivado +SEARCHPARAMETER_EXP_WRONG = La expresión ''{2}'' no es compatible con la expresión ''{1}'' en el SearchParameter derivedFrom {0}, y esto indica que la relación de derivación no es válida +VALUESET_NO_SYSTEM_WARNING = No se especifica System, así que los Conceptos y Filtros no pueden ser verificados +VALUESET_INCLUDE_INVALID_CONCEPT_CODE = El código {1} no es válido en el sistema {0} +VALUESET_INCLUDE_INVALID_CONCEPT_CODE_VER = El código {2} no es válido en el sistema {0} versión {1} +VALUESET_UNC_SYSTEM_WARNING = Se especificó el sistema desconocido ''{0}'', así que los Conceptos y Filtros no pueden ser verificados (Detalles: {1}) +VALUESET_UNC_SYSTEM_WARNING_VER = Se especificó un sistema/versión desconocido ''{0}'', así que los Conceptos y Filtros no pueden ser verificados (Detalles: {1}) +Extension_PROF_Type = La definición del perfil ''{0}'' permite el tipo {1} pero se han encontrado tipo {2} +TYPE_CHECKS_PATTERN_CC = El patrón [system {0}, code {1}, y display ''{2}''] definidos en el perfil {3} no se han encontrado. Problemas: {4} +TYPE_CHECKS_PATTERN_CC_US = El patrón [system {0}, code {1}, display ''{2}'' y userSelected {5}] definidos en el perfil {3} no se han encontrado. Problemas: {4} +TYPE_CHECKS_FIXED_CC = El patrón [system {0}, code {1}, y display ''{2}''] definidos en el perfil {3} no se han encontrado. Problemas: {4} +TYPE_CHECKS_FIXED_CC_US = El patrón [system {0}, code {1}, display ''{2}'' y userSelected {5}] definidos en el perfil {3} no se han encontrado. Problemas: {4} +VALIDATION_VAL_GLOBAL_PROFILE_UNKNOWN = La referencia al perfil global ''{0}'' desde la IG {1} no pudo ser resuelta asi que no ha sido verificada +VALIDATION_VAL_PROFILE_SIGNPOST_BASE = Validar el recurso contra el perfil +VALIDATION_VAL_PROFILE_SIGNPOST = Validar el recurso contra el perfil {0} +VALIDATION_VAL_PROFILE_SIGNPOST_META = Validar el recurso contra el perfil {0} (por el elemento meta) +VALIDATION_VAL_PROFILE_SIGNPOST_DEP = Validar el recurso contra el perfil {0} (por http://hl7.org/fhir/StructureDefinition/structuredefinition-dependencies en {1}) +VALIDATION_VAL_PROFILE_SIGNPOST_BUNDLE_PARAM = Validar el recurso contra el perfil {0} - provisto como un parámetro del bundle +VALIDATION_VAL_PROFILE_SIGNPOST_GLOBAL = Validar el recurso contra el perfil {0} - un perfil global en {1} +ERROR_GENERATING_SNAPSHOT = Error generando el Snapshot: {0} (esto usualmente ocurre por problemas en el diferencial) +SNAPSHOT_EXISTING_PROBLEM = El snapshot generado tiene una cantidad de elementos distinta {1} que el snapshot originalmente provisto {0} +FHIRPATH_LOCATION = (en {0}) +FHIRPATH_UNKNOWN_CONTEXT = Contexto desconocido evaluando la expresión FHIRPath: {0} +FHIRPATH_UNKNOWN_CONTEXT_ELEMENT = Elemento de contexto desconocido evaluando la expresión FHIRPath: {0} +FHIRPATH_ALIAS_COLLECTION = Intento de generar un alias para una colección, no un singleton evaluando una expresión FHIRPath +FHIRPATH_UNKNOWN_NAME = Error evaluando la expresión FHIRPath: El nombre {0} no es válido para ninguno de los posibles tipos: {1} +FHIRPATH_UNKNOWN_CONSTANT = Error evaluando la expresión FHIRPath: Constante FHIR Inválida {0} +FHIRPATH_CANNOT_USE = Error evaluando la expresión FHIRPath: No puede utilizar {0} en este contexto porque {1} +FHIRPATH_CANT_COMPARE = Error evaluando la expresión FHIRPath: No se pueden comparar valores de tipo {0} y {1} +#The following error cannot occur for a single item. _one case left intentionally blank. +FHIRPATH_LEFT_VALUE_one = +FHIRPATH_LEFT_VALUE_other = Error evaluando la expresión FHIRPath: el operando a la izquierda de {1} puede tener solo 1 valor pero tiene {0} valores +FHIRPATH_LEFT_VALUE_WRONG_TYPE = Error evaluando la expresión FHIRPath: el operando a la izquierda de {0} tiene el tipo incorrecto {1} +#The following error cannot occur for a single item. _one case left intentionally blank. +FHIRPATH_RIGHT_VALUE_one = +FHIRPATH_RIGHT_VALUE_other = Error evaluando la expresión FHIRPath: el operando a la derecha de {1} puede tener solo 1 valor pero tiene {0} valores +FHIRPATH_RIGHT_VALUE_WRONG_TYPE = Error evaluando la expresión FHIRPath: el operando a la derecha de {0} tiene el tipo incorrecto {1} +FHIRPATH_OP_INCOMPATIBLE = Error evaluating FHIRPath expression {0}: los operandos a la izquierda y a la derecha tienen tipos incompatibles o inválidos ({1}, {2}) +FHIRPATH_HO_HOST_SERVICES = Internal Error evaluando la expresión FHIRPath: No se proveen servicios de host ({0}) +FHIRPATH_WRONG_PARAM_TYPE = Error evaluando la expresión FHIRPath: El tipo de parametro {2} no es válido para {0} parametro {1}. esperando {3} +FHIRPATH_ORDERED_ONLY = Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para colecciones ordenadas +FHIRPATH_REFERENCE_ONLY = Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para los tipos string, uri, canonical or Reference pero se han encontrado {1} +FHIRPATH_CODED_ONLY = Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para los tipos string, code, uri, Coding, CodeableConcept pero se han encontrado {1} +FHIRPATH_STRING_ORD_ONLY = Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para colecciones ordenadas de tipo string, uri, code, id pero se han encontrado {1} +FHIRPATH_STRING_SING_ONLY = Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para string, uri, code, id pero se han encontrado {1} +FHIRPATH_NO_COLLECTION = Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para un valor singleton, pero se han encontrado {1} +FHIRPATH_NOT_IMPLEMENTED = Error evaluando la expresión FHIRPath: La función {0} no fue implementada +FHIRPATH_PARAM_WRONG = Error evaluando la expresión FHIRPath: El tipo de expresión {0} no está soportado {1} para la función {2} +FHIRPATH_CHECK_FAILED = Error evaluando la expresión FHIRPath: La verificación {0} falló +FHIRPATH_NO_TYPE = Error evaluando la expresión FHIRPath: El tipo ''{0}'' es desconocido o no soportado en {1} +FHIRPATH_DISCRIMINATOR_NAME_ALREADY_SLICED = Error en el discriminador en {0}: se encontró un elemento particionado mientras se resolvía un valor fijo para una de las particiones +FHIRPATH_DISCRIMINATOR_THIS_CANNOT_FIND = Problema con el uso de resolve() - el perfil {0} en {1} no pudo ser resuelta +FHIRPATH_DISCRIMINATOR_RESOLVE_NO_TYPE = uso ilegal de resolve() en el discriminador - elemento sin tipo en {0} +#The following error cannot occur for a single item. _one case left intentionally blank. +FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_one = +FHIRPATH_DISCRIMINATOR_RESOLVE_MULTIPLE_TYPES_other = Uso Ilegal de resolve() en el discriminador - {0} tipos posibles en {1} (puede ser uno solo) +FHIRPATH_DISCRIMINATOR_RESOLVE_NOT_REFERENCE = Uso Ilegal de resolve() en el discriminador - el tipo en {0} no es Reference {1} +#The following error cannot occur for a single item. _one case left intentionally blank. +FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_one = +FHIRPATH_RESOLVE_DISCRIMINATOR_NO_TARGET_other = Uso Ilegal de resolve() en el discriminador - {0} perfiles destino posibles de tipo en {1} (solo puede ser uno) +FHIRPATH_RESOLVE_DISCRIMINATOR_CANT_FIND = Problema con el uso de resolve() - el perfil {0} en {1} no pudo ser resuelta +FHIRPATH_DISCRIMINATOR_TYPE_NONE = Uso ilegal de ofType() en el discriminador - no hay tipo en el elemento {0} +FHIRPATH_DISCRIMINATOR_TYPE_MULTIPLE = Uso ilegal de ofType() en el discriminador- Multiples posibles tipos en {0} +FHIRPATH_DISCRIMINATOR_NO_CODE = Uso ilegal de ofType() en el discriminador - Type no tiene codigo en {0} +FHIRPATH_DISCRIMINATOR_BAD_NAME = Nombre de función ilegal {0}() en el discriminador +FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_GROUP = expresión sintáctica ilegal en el discriminador (group ''{0}'') +FHIRPATH_DISCRIMINATOR_BAD_SYNTAX_CONST = expresión sintáctica ilegal en el discriminador (const) +FHIRPATH_DISCRIMINATOR_CANT_FIND = Imposible resolver el discriminador en las definiciones: {0} en el perfil {1} en el elemento {2}, buscando en el perfil {3} +FHIRPATH_DISCRIMINATOR_CANT_FIND_EXTENSION = Imposible resolver el discriminador{0} en {2} encontrado en las definiciones porque la extension {1} no ha sido encontrada en el perfil {3} +FHIRPATH_DISCRIMINATOR_NOTYPE = Error en el discriminador en {0}: no tiene hijos ni tipo +#The following error cannot occur for a single item. _one case left intentionally blank. +FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_one = +FHIRPATH_DISCRIMINATOR_MULTIPLE_TYPES_other = Error en el discriminador en {1}: no tiene hijos , {0} tipos +#The following error cannot occur for a single item. _one case left intentionally blank. +FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_one = +FHIRPATH_DISCRIMINATOR_MULTIPLE_PROFILES_other = Error en el discriminador en {1}: no tiene hijos, {0} perfiles de tipo +FHIRPATH_UNABLE_BOOLEAN = Imposible evaluar como boolean : {0} +XHTML_XHTML_DOCTYPE_ILLEGAL = XHTML Malformado: Se encontró una declaración DocType, y no están permitidas (Protección contra la Vulnerabilidad de seguridad XXE) +PACKAGE_VERSION_MISMATCH = Discordancia de versión de FHIR en el paquete {0}: la versión es {2} pero debe ser {1} (path: {3}) +VALUESET_REFERENCE_UNKNOWN = El conjunto de valores a importar {0} no pudo ser encontrado por lo que no puede verificarse +VALUESET_REFERENCE_INVALID_TYPE = The conjunto de valores a importar {0} apunta a un recurso de tipo {1} que no es válido +SD_MUST_HAVE_DERIVATION = El recurso StructureDefinition {0} debe tener una derivación, ya que tiene un elemento baseDefinition +VALIDATION_VAL_PROFILE_OTHER_VERSION = El perfil es para una versión diferente de FHIR ({0}) así que fue ignorado +VALIDATION_VAL_PROFILE_THIS_VERSION_OK = El perfil es para esta versión de FHIR- Todo OK +VALIDATION_VAL_PROFILE_THIS_VERSION_OTHER = El perfil es para esta versión de FHIR, pero es de tipo inválido {0} +#The following error cannot occur for a single item. _one case left intentionally blank. +BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_one = +BUNDLE_BUNDLE_ENTRY_MULTIPLE_PROFILES_other = {0} perfiles encontrados para el recurso {1}. No hay soporte para más de uno por el monmento. (Type {2}: {3}) +RENDER_BUNDLE_HEADER_ROOT = Bundle {0} De tipo {1} +RENDER_BUNDLE_HEADER_ENTRY = Entry {0} +RENDER_BUNDLE_HEADER_ENTRY_URL = Entry {0} - FullURL = {1} +RENDER_BUNDLE_RESOURCE = Recurso {0}: +RENDER_BUNDLE_SEARCH = Búsqueda: +RENDER_BUNDLE_SEARCH_MODE = mode = {0} +RENDER_BUNDLE_SEARCH_SCORE = score = {0} +RENDER_BUNDLE_RESPONSE = Respuesta: +RENDER_BUNDLE_LOCATION = Location = {0} +RENDER_BUNDLE_ETAG = ETag = {0} +RENDER_BUNDLE_LAST_MOD = LastModified = {0} +RENDER_BUNDLE_REQUEST = Request: +RENDER_BUNDLE_IF_NON_MATCH = If-None-Match = {0} +RENDER_BUNDLE_IF_MOD = If-Modified-Since = {0} +RENDER_BUNDLE_IF_MATCH = If-Match = {0} +RENDER_BUNDLE_IF_NONE = If-None-Exist = {0} +BUNDLE_RULE_NONE = Sin reglas +BUNDLE_RULE_UNKNOWN = LA regla del Bundle refiere a un recurso inválido {0} +BUNDLE_RULE_INVALID_INDEX = El indice de la regla de Bundle no es válido ({0}) +BUNDLE_RULE_PROFILE_UNKNOWN = El perfil de reglas del Bundle {1} es desconocido para {0} +RENDER_BUNDLE_DOCUMENT_CONTENT = Contenido adicional del documento +RENDER_BUNDLE_HEADER_DOC_ENTRY_URD = {0}. {1} ({2}/{3}) +RENDER_BUNDLE_HEADER_DOC_ENTRY_U = {0}. {1} +RENDER_BUNDLE_HEADER_DOC_ENTRY_RD = {0}. {2}/{3} +UNABLE_TO_CHECK_IF_THE_PROVIDED_CODES_ARE_IN_THE_VALUE_SET_ = Imposible determinar si los códigos provistos están en el conjunto de valores {0} porque el conjunto de valores o un sistema de codificación del que depende es desconocido por el validador +TERMINOLOGY_TX_SYSTEM_WRONG_HTML = La referencia al sistema de codificación {0} es errónea - no puede apuntar a una página HTML. Esta puede ser la referencia correcta: {1} +TERMINOLOGY_TX_SYSTEM_WRONG_BUILD = La referencia al sistema de codificación {0} es errónea - no puede apuntar a build.fhir.org. Esta puede ser la referencia correcta: {1} +FHIRPATH_BAD_DATE = Imposible analizar el elemento Date {0} +FHIRPATH_NUMERICAL_ONLY = Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para los tipos integer, decimal o Quantity pero se han encontrado {1} +FHIRPATH_DECIMAL_ONLY = Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para un elemento decimal pero se han encontrado {1} +FHIRPATH_CONTINUOUS_ONLY= Error evaluando la expresión FHIRPath: La función {0} solo puede ser utilizada para un elemento decimal o fecha pero se han encontrado {1} +#The following error cannot occur for a single item. _one case left intentionally blank. +FHIRPATH_FOCUS_one = +FHIRPATH_FOCUS_other = Error evaluando la expresión FHIRPath: el foco para {0} puede tener solo un valor, pero tiene {0} valores +REFERENCE_REF_SUSPICIOUS = La sintaxis de la referencia ''{0}'' parece incorrecta y debe ser verificada +TYPE_SPECIFIC_CHECKS_DT_QTY_NO_ANNOTATIONS = Los códigos UCUM que contiene anotaciones legibles por humanos como {0} pueden ser engañosas. La mejor práctica es no usar anotaciones en los códigos UCUM, y asegurarse que Quantity.unit es correctamente legible por humanos +XHTML_XHTML_ELEMENT_ILLEGAL_IN_PARA = Nombre de elemento ilegal en un párrafo en el XHTML (''{0}'') +UNSUPPORTED_IDENTIFIER_PATTERN_PROPERTY_NOT_SUPPORTED_FOR_DISCRIMINATOR_FOR_SLICE = Propiedad no soportada {3} en el tipo {2} para el patron del discriminador ({0}) para la partición {1} +UNSUPPORTED_IDENTIFIER_PATTERN_NO_PROPERTY_NOT_SUPPORTED_FOR_DISCRIMINATOR_FOR_SLICE = No soportado: no se han encontrado propiedades con valores en el tipo {2} para el patrón para el discriminador ({0}) para la partición {1} +SD_NESTED_MUST_SUPPORT_DIFF = El elemento {0} tiene tipos/perfiles/destinos que están marcados como must-support pero el elemento en sí no está marcado como must-support. Los must-support internos serán ignorados a menos que que el elemento herede must-support = true +SD_NESTED_MUST_SUPPORT_SNAPSHOT = El elemento {0} tiene tipos/perfiles/destinos que están marcados como must-support pero el elemento en sí no está marcado como must-support. +Unable_to_connect_to_terminology_server = Imposible conectarse con el servidor terminológico. Error = {0} +SD_ED_TYPE_PROFILE_UNKNOWN = Imposible resolver el perfil {0} +SD_ED_TYPE_PROFILE_NOTYPE = Se encontró el perfil {0}, pero es imposible definir a que tipo aplica +SD_ED_TYPE_PROFILE_WRONG = El perfil {0} es para el tipo {1}, pero el elemento {3} es de tipo {2} +SD_ED_TYPE_PROFILE_IS_MODIFIER = El perfil {0} no es para una extensión modificante pero el elemento {3} es un modificador +SD_ED_TYPE_PROFILE_NOT_MODIFIER = El perfil {0} es para una extensión modificante pero el elemento {3} no es un modificador +SD_ED_TYPE_PROFILE_WRONG_TARGET = El perfil {0} es para tipo {1}, que no es un {4} (que es requerido porque el elemento {3} es de tipo {2}) +SD_ED_TYPE_NO_TARGET_PROFILE = El tipo {0} no permite perfiles destino +TERMINOLOGY_TX_NOSVC_BOUND_REQ = No se pudo confirmar que los códigos provistos pertenezcan al conjunto de valores requerido {0} porque no hay servicio terminológico +TERMINOLOGY_TX_NOSVC_BOUND_EXT = No se pudo confirmar que los códigos provistos pertenezcan al conjunto de valores extensible {0} porque no hay servicio terminológico +ARRAY_CANNOT_BE_EMPTY = El vector no puede estar vacío - la propiedad no debe estar presente si no tiene valores +XHTML_URL_DATA_NO_DATA = Sin datos en el elemento data de la URL +XHTML_URL_DATA_DATA_INVALID_COMMA = Una coma encontrada en el elemento data de la URL: {0} +XHTML_URL_DATA_DATA_INVALID = El elemento data debe ser contenido base64 válido URL: {0} +XHTML_URL_DATA_MIMETYPE = La porción mimetype de data: URL no es válido ({1}) en la URL: {0} +SD_ED_SHOULD_BIND = El elemento {0} tiene un tipo que deberia tener una vinculación terminológica ({1}), pero no está presente +SD_ED_SHOULD_BIND_WITH_VS = El elemento {0} tiene un tipo que deberia tener una vinculación terminológica ({1}), pero no tiene definido conjunto de valores +SD_ED_BIND_UNKNOWN_VS = La referencia al ValueSet {1} en el elemento {0} no pudo ser resuelta +SD_ED_BIND_NOT_VS = La referencia al ValueSet {1} en el elemento apunta a algo que no es un conjunto de valores ({2}) +SD_ED_BIND_NO_BINDABLE = El elemento {0} tiene una vinculación, pero no se encuentran tipos vinculables {1} +SD_ED_BIND_MULTIPLE_TYPES = El elemento {0} tiene una vinculación, y tiene multiples tipos sujetos a ser vinculados ({1}). La vinculación aplicará a todos los elementos contenidos +DISCRIMINATOR_BAD_PATH = Error procesando la expresión para el discriminador: {0} (src = ''{1}'') +SLICING_CANNOT_BE_EVALUATED = La partición no pudo ser evaluada: {0} +TYPE_SPECIFIC_CHECKS_DT_CANONICAL_RESOLVE = La URL Canónica ''{0}'' no puede resolverse +TYPE_SPECIFIC_CHECKS_DT_CANONICAL_RESOLVE_NC = La URL Canónica ''{0}'' existe pero no puede cargarse, por lo que no puede utilizarse para validación +TYPE_SPECIFIC_CHECKS_DT_CANONICAL_TYPE = La URL Canónica''{0}'' refiere a un recurso del tipo erróneo. Se encontró {1} esperando uno de {2} +CODESYSTEM_CS_NO_SUPPLEMENT = CodeSystem {0} es un suplemento, asi que no puede usarse en Coding.system +CODESYSTEM_CS_SUPP_CANT_CHECK = CodeSystem {0} no se pudo encontrar, por lo que no puede verificarse la validez de los conceptos +CODESYSTEM_CS_SUPP_INVALID_CODE = El código ''{1}'' no se declaró en el CodeSystem base {0} asi que no es válido en el suplemento +SD_VALUE_TYPE_IILEGAL = El elemento {0} tiene un {1} de tipo {2}, que no está en la lista de tipos permitidos ({3}) +SD_VALUE_TYPE_REPEAT_HINT = El elemento repetitivo tiene un {1}. El {1} aplicará a todas las repeticiones (esto no ha quedado claro para todos los usuarios) +SD_VALUE_TYPE_REPEAT_WARNING_DOTNET = El elemento repetitivo tiene un valor {1} para un tipo primitivo. EL validador DotNet no aplicará esto a todas las repeticiones. Esto es un error +SD_NO_TYPES_OR_CONTENTREF = El elemento {0} no tiene tipos asignados, y tampoco referencia a contenido alguno +CODESYSTEM_CS_UNK_EXPANSION = El código provisto ({2}) no está en el conjunto de valores {0}, y se requiere un código de este conjunto de valores. El sistema {1} es desconocido. +BUNDLE_SEARCH_NOSELF = Los Bundles de tipo searchset deben tener un vinculo de tipo self que especifique cual fue la búsqueda +BUNDLE_SEARCH_SELF_NOT_UNDERSTOOD = No se han podido determinar tipos por la cadena de búsqueda, asi que los tipos no pueden ser validados +BUNDLE_SEARCH_ENTRY_NO_RESOURCE = Las Entry en los Bundles de tipo searchset deben contener recursos +BUNDLE_SEARCH_ENTRY_TYPE_NOT_SURE = Imposible determinar si este recurso es del tipo válido para esta búsqueda +BUNDLE_SEARCH_ENTRY_NO_RESOURCE_ID = Los resultados de las búsquedas deben tener id +BUNDLE_SEARCH_ENTRY_WRONG_RESOURCE_TYPE_MODE = Este no es un recurso coincidente con lo esperado para la búsqueda ({0} esperando {1}) +BUNDLE_SEARCH_ENTRY_WRONG_RESOURCE_TYPE_OUTCOME = Este no es un recurso OperationOutcome ({0}) +BUNDLE_SEARCH_ENTRY_WRONG_RESOURCE_TYPE_NO_MODE = Este no es un tipo de recurso coincidente para la búsqueda (¿hace falta un modo de búsqueda?) ({0} esperando {1}) +BUNDLE_SEARCH_NO_MODE = Los bundles de tipo searchset deben tener modos de busqueda en los elementos entry +INV_FAILED = La regla {0} falló +PATTERN_CHECK_STRING = El patrón [{0}] definido en el perfil {1} no fue encontrado. Problemas: {2} +TYPE_SPECIFIC_CHECKS_DT_URL_EXAMPLE = No se permiten URLs de ejemplo en este contexto ({0}) +UNICODE_BIDI_CONTROLS_CHARS_DISALLOWED = La secuencia Unicode tiene caracteres de control bi-di que no se permiten en este contexto: {1} +UNICODE_BIDI_CONTROLS_CHARS_MATCH = La secuencia Unicode tiene caracteres de control bi-di inconclusos (see CVE-2021-42574): {1} +CODESYSTEM_CS_HL7_MISSING_ELEMENT_SHALL = Los CodeSystems definidos por HL7 DEBEN tener un valor definido para el elemento {0} para que los usuarios conozcan el estado y significado del sistema de codificación claramente +CODESYSTEM_CS_HL7_MISSING_ELEMENT_SHOULD = Los CodeSystems definidos por HL7 DEBERIAN tener un valor definido para el elemento {0} para que los usuarios conozcan el estado y significado del sistema de codificación claramente +CODESYSTEM_CS_NONHL7_MISSING_ELEMENT = Los CodeSystems no definidos por HL7 DEBERIAN tener un valor definido para el elemento {0} para que los usuarios conozcan el estado y significado del sistema de codificación claramente +CODESYSTEM_CS_HL7_PRESENT_ELEMENT_SUPPL = Los CodeSystems NO DEBERIAN tener un valor definido para el elemento {0} si son un suplemento +CODESYSTEM_CS_HL7_PRESENT_ELEMENT_SUPPL_WRONG = Los CodeSystem suplementarios DEBEN tener un valor de content = 'supplement' +CODESYSTEM_CS_HL7_PRESENT_ELEMENT_SUPPL_MISSING = Los CodeSystem suplementarios con un valor de content = 'supplement' CodeSystem deben tener un elemento suplements que documenta cual es el code system que suplementan +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_NO_QTY = Encontrado {0} de tipo {2} en el perfil validando un elemento Quantity (para que sea un Quantity) +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_SYSTEM_MISMATCH = El elemento minValue en el perfil tiene un código de system de {0} que es distinto al valor en system {1} asi que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_CODE_MISMATCH = El elemento minValue en el perfil tiene un código de system code de {0} que es distinto al valor en system {1} asi que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_VALUE = El elemento minValue en el perfil no tiene un valor, asi que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_NO_VALUE = La cantidad no tiene un valor, asi que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_SYSTEM = El minValue en el perfil no tiene system asi que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_NO_SYSTEM = El valor no tiene sistema asi que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_CODE = El elemento minValue en el perfil no tiene codigo asi que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_NO_CODE = El valor no tiene código así que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_NO_UCUM_SVC = No hay servicio UCUM y los códigos UCUM no son idénticos, asi que el valor mínimo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_MIN_NO_CONVERT = Imposible convertir el valor {0} desde unidad {1} a la unidad del elemento minValue {2} basado en definiciones UCUM; el valor mínimo no es válido +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_WRONG = El valor en la instancia ({2}) es menor que el valor mínimo especificado ({3}) +TYPE_SPECIFIC_CHECKS_DT_QTY_MIN_VALUE_WRONG_UCUM = El valor en la instancia ({0} {1}) es menor que el valor mínimo especificado ({2} {3}) luego de la conversión UCUM +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_NO_QTY = Se encontró {0} de tipo {2} en el perfil validando una cantidad (debe ser de tipo Quantity) +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_SYSTEM_MISMATCH = El elemento maxValue en el perfil tiene un sistema {0} que es diferente al sistema en el valor {1} asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_CODE_MISMATCH = El elemento maxValue en el perfil tiene un codigo de sistema {0} que es distino al valor en system {1} asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_VALUE = El elemento maxValue en el perfil no tiene valor, asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_NO_VALUE = La cantidad no tiene un valor, asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_SYSTEM = El elemento maxValue en el perfil no tiene system asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_NO_SYSTEM = El elemento value no tiene system asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_CODE = El elemento maxValue en el perfil no tiene code asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_NO_CODE = El valor no tiene code asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_NO_UCUM_SVC = No hay servicio UCUM y los códigos UCUM no son idénticos, asi que el valor máximo no puede ser verificado +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_MIN_NO_CONVERT = Imposible convertir {0} de unidad {1} a la unidad del elemento maxValue {2} basado en definiciones UCUM; máximo valor no es válido +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_WRONG = El valor en la instancia ({2}) es mayor que el valor maximo especificado ({3}) +TYPE_SPECIFIC_CHECKS_DT_QTY_MAX_VALUE_WRONG_UCUM = El valor en la instancia ({0} {1}) es mayor que el valor del elemento maxValue ({2} {3}) luego de la conversión UCUM +TYPE_SPECIFIC_CHECKS_DT_BASE64_NO_WS_ERROR = Los valores codificados con Base64 no pueden contener espacios en blanco (por RFC 4648). Notar que los lectores que no validan son invitados a aceptar espacio en blanco de todas maneras. +TYPE_SPECIFIC_CHECKS_DT_BASE64_NO_WS_WARNING = Los valores codificados con Base64 no deberían contener espacios en blanco (por RFC 4648). Notar que los lectores que no validan son invitados a aceptar espacio en blanco de todas maneras. +SD_DERIVATION_KIND_MISMATCH = La definición de estructura restringe una clase de {0}, pero hay una diferente ({1}) +VALUESET_IMPORT_UNION_INTERSECTION = Este conjunto de valores tiene un sólo include con multiples conjunto de valores importados. Según el item https://jira.hl7.org/browse/FHIR-25179, ha habido confusión en el pasado sobre si estos conjunto de valores se unen o intersectan. Si este conjunto de valores está contenido en un paquete publicado antes del 31-Marzo-2022, se tratará como una unión, sino como una intersección. Si desea una unión, parta el conjunto de valores importado entre multiples includes +TX_SERVER_NO_BATCH_RESPONSE = El servidor devolvió null sobre una solicitud de validación en lote +BUNDLE_POSSSIBLE_MATCHES = El Bundle no contiene una coincidencia para {1} según las reglas de la resolución de referencias en Bundles, pero tiene varios recursos que coinciden {0} por tipo de recurso e id +BUNDLE_BUNDLE_POSSIBLE_MATCH_NO_FU = La Entry {0} coincide con la referencia {1} por tipo e id pero no coincide el fullUrl del destino {2} por reglas de resolución de Bundle +BUNDLE_BUNDLE_POSSIBLE_MATCH_WRONG_FU = La Entry {0} coincide con la referencia {1} por tipo e id pero su fullUrl {2} no coincide el full Url del destino {3} por reglas de resolución de Bundle +SD_ILLEGAL_CHARACTERISTICS = Este elemento tiene un {0} pero los tipos {1} no hacen que este tipo de restricción sea relevante +SD_VALUE_COMPLEX_FIXED = Para el tipo complejo {0}, considere usar un patrón en lugar de un valor fijo para evitar restringir la instancia más allá de lo imprescindible +VALUESET_SHAREABLE_MISSING = El perfil ShareableValueSet dice que el elemento {0} es obligatorio, pero no está presente. Los conjuntos de valores publicados DEBERIAN conformar al perfil ShareableValueSet +VALUESET_SHAREABLE_EXTRA_MISSING = El perfil ShareableValueSet recomienda que el elemento {0} se complete, pero no está presente. Los conjuntos de valores publicados DEBERIAN conformar al perfil ShareableValueSet +VALUESET_SHAREABLE_MISSING_HL7 = El perfil ShareableValueSet dice que el elemento {0} es obligatorio, pero no se encontró. Los conjuntos de valores publicados por HL7 DEBEN conformar al perfil ShareableValueSet +VALUESET_SHAREABLE_EXTRA_MISSING_HL7 = El perfil ShareableValueSet recomienda que el elemento {0} se complete, pero no se encontró.Los conjuntos de valores publicados por HL7 DEBEN conformar al perfil ShareableValueSet +CODESYSTEM_SHAREABLE_MISSING = El perfil ShareableValueSet dice que el elemento {0} es obligatorio, pero no está presente. Los conjuntos de valores publicados DEBERIAN conformar al perfil ShareableValueSet +CODESYSTEM_SHAREABLE_EXTRA_MISSING = The ShareableCodeSystem profile recommends that the {0} element se complete, pero no está presente. Los conjuntos de valores publicados DEBERIAN conformar al perfil ShareableValueSet +CODESYSTEM_SHAREABLE_MISSING_HL7 = El perfil ShareableValueSet dice que el elemento {0} es obligatorio, pero no se encontró. Los conjuntos de valores publicados por HL7 DEBEN conformar al perfil ShareableValueSet +CODESYSTEM_SHAREABLE_EXTRA_MISSING_HL7 = El perfil ShareableValueSet recomienda que el elemento {0} se complete, pero no se encontró. Los conjuntos de valores publicados por HL7 DEBEN conformar al perfil ShareableValueSet +MEASURE_SHAREABLE_MISSING = El perfil ShareableMeasure dice que el elemento {0} es obligatorio, pero no está presente. Las medidas publicadas DEBERIAN conformar al perfil ShareableMeasure +MEASURE_SHAREABLE_EXTRA_MISSING = El perfil ShareableMeasure recomienda que el elemento {0} se complete, pero no está presente. Las medidas publicadas DEBERIAN conformar al perfil ShareableMeasure +MEASURE_SHAREABLE_MISSING_HL7 = El perfil ShareableMeasure dice que el elemento {0} es obligatorio, pero no se encontró. Las medidas publicadas por HL7 DEBEN conformar al perfil ShareableMeasure +MEASURE_SHAREABLE_EXTRA_MISSING_HL7 = El perfil ShareableMeasure recomienda que el elemento {0} se complete, pero no se encontró. Las medidas publicadas por HL7 DEBEN conformar al perfil ShareableMeasure +TYPE_SPECIFIC_CHECKS_DT_MARKDOWN_HTML = El markdown tiene contenido que parece ser un tag de HTML embebido empezando en ''{0}''. Esto será (o DEBIERA ser) be transformado por la capa de presentación. El contenido debería ser verificado para confirmar que esta es la conducta deseada +TYPE_SPECIFIER_ILLEGAL_TYPE = El especificador de tipo {1} especificó un tipo ilegal {0} +TYPE_SPECIFIER_ABSTRACT_TYPE = El especificador de tipo {1} especificó un tipo abstracto {0} +TYPE_SPECIFIER_NM_ILLEGAL_TYPE = Ningún especificador de tipo coincide, y el tipo subyacente {0} no es válido +TYPE_SPECIFIER_NM_ABSTRACT_TYPE = Ningún especificador de tipo coincide, y el tipo subyacente {0} no es abstracto +ELEMENT_CANNOT_BE_NULL = El elemento no puede ser 'null' +#The following error cannot occur for a single item. _one case left intentionally blank. +MULTIPLE_LOGICAL_MODELS_one= +MULTIPLE_LOGICAL_MODELS_other={0} Modelos Lógicos encontrados en los perfiles provistos, asi que es imposible analizar el modelo lógico(puede ser solo uno, se encontraron {1}) +UNRECOGNISED_PROPERTY_TYPE = Tipo JSON inválido {0} para el elemento {1}; tipos válidos = {2} +UNRECOGNISED_PROPERTY_TYPE_WRONG = Tipo inválido {2} para el elemento {1}; tipos válidos = {3}, tipo JSON = {0} +SD_TYPE_MISSING = No se encontró tipo +SD_TYPE_NOT_MATCH_NS = El espacio de nombres para el tipo {0} DEBERIA coincidir con el espacio de nombres de la url {1} para la definición del tipo +SD_TYPE_NOT_DERIVED = El tipo {0} solo puede ser usado como tipo cuando se restringe la definición base del tipo +SD_TYPE_NOT_LOCAL = El tipo {0} no es legal porque no está definida en la especificación FHIR. Otros tipos deben tener un espacio de nombres sobre ellos +SD_TYPE_NOT_LOGICAL = El tipo {0} solo puede ser definido si la categoria es 'logical' no {1} +SD_CONSTRAINED_TYPE_NO_MATCH = El tipo {0} debe ser el mismo en la estructura base {1} que está siendo restringida +SD_SPECIALIZED_TYPE_MATCHES = El tipo {0} no debe ser la misma que el tipo en la estructura base {1} que se está especializando +SD_CONSTRAINED_KIND_NO_MATCH = La clase {0} debe ser la misma {1} en la estructura base {3} (tipo base = {2}) +SD_PATH_TYPE_MISMATCH = El path {1} debe empezar con el tipo de la estructura {0} \ No newline at end of file From 962f3f09eab2453d761bb5a7d5be065ddab1e42e Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Thu, 24 Nov 2022 18:02:21 -0300 Subject: [PATCH 5/5] prepare for changing the way the IG publisher generates narrative --- .../fhir/r5/renderers/ProfileDrivenRenderer.java | 2 +- .../org/hl7/fhir/r5/renderers/RendererFactory.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ProfileDrivenRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ProfileDrivenRenderer.java index 9bea86809..3272a5105 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ProfileDrivenRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ProfileDrivenRenderer.java @@ -790,7 +790,7 @@ public class ProfileDrivenRenderer extends ResourceRenderer { if ("DomainResource.contained".equals(child.getBase().getPath())) { if (round2) { for (BaseWrapper v : p.getValues()) { - if (!RendererFactory.hasSpecificRenderer(v.fhirType())) { + if (v.getBase() != null && !RendererFactory.hasSpecificRenderer(v.fhirType())) { x.hr(); RenderingContext ctxt = context.copy(); ctxt.setContained(true); diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/RendererFactory.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/RendererFactory.java index 1a8863f51..e290476d9 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/RendererFactory.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/RendererFactory.java @@ -4,6 +4,7 @@ import org.hl7.fhir.r5.model.DomainResource; import org.hl7.fhir.r5.model.Resource; import org.hl7.fhir.r5.renderers.utils.BaseWrappers.ResourceWrapper; import org.hl7.fhir.r5.renderers.utils.RenderingContext; +import org.hl7.fhir.r5.renderers.utils.RenderingContext.GenerationRules; import org.hl7.fhir.r5.renderers.utils.Resolver.ResourceContext; import org.hl7.fhir.utilities.Utilities; @@ -145,5 +146,17 @@ public class RendererFactory { "CapabilityStatement", "CompartmentDefinition", "ImplementationGuide", "Library", "NamingSystem", "OperationDefinition", "Questionnaire", "SearchParameter", "StructureDefinition", "ActorDefinition", "Requirements"); } + + /** + * This is a list of renderers that return something different in IG mode, and the implementation guide + * publisher will regenerate the narrative for the IG mode + * @param rt + * @return + */ + public static boolean hasIGSpecificRenderer(String rt) { + + return Utilities.existsInList(rt, "ValueSet", "CapabilityStatement", "Questionnaire"); + } + } \ No newline at end of file