diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java index c66e6e812..5e76f9a56 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/BaseValidator.java @@ -168,6 +168,7 @@ public class BaseValidator implements IValidationContextResourceLoader, IMessagi protected final String TYPE = "type"; protected final String BUNDLE = "Bundle"; protected final String LAST_UPDATED = "lastUpdated"; + protected final String VERSION_ID = "versionId"; protected BaseValidator parent; protected IWorkerContext context; @@ -1048,8 +1049,9 @@ public class BaseValidator implements IValidationContextResourceLoader, IMessagi if (resource != null) { String et = resource.getType(); String eid = resource.getNamedChildValue(ID, false); + String rl = null; if (eid != null) { - String rl = et+"/"+eid; + rl = et+"/"+eid; list = relMap.get(rl); if (list == null) { list = new ArrayList(); @@ -1057,6 +1059,30 @@ public class BaseValidator implements IValidationContextResourceLoader, IMessagi } list.add(entry); } + boolean versionIdPresent = resource.hasChild(META, false) + && resource.getNamedChild(META, false).hasChild(VERSION_ID, false) + && resource.getNamedChild(META, false).getNamedChild(VERSION_ID, false).hasValue(); + if (versionIdPresent){ + String versionId = resource.getNamedChild(META).getNamedChild(VERSION_ID).getValue(); + String fullUrlVersioned = fu + "/_history/" + versionId; + List listMapVersioned = null; + listMapVersioned = map.get(fullUrlVersioned); + if (listMapVersioned == null) { + listMapVersioned = new ArrayList(); + map.put(fullUrlVersioned, listMapVersioned); + } + listMapVersioned.add(entry); + if (rl != null) { + String relativePathVersioned = rl + "/_history/" + versionId; + List listRelMapVersioned = null; + listRelMapVersioned = relMap.get(relativePathVersioned); + if (listRelMapVersioned == null) { + listRelMapVersioned = new ArrayList(); + relMap.put(relativePathVersioned, listRelMapVersioned); + } + listRelMapVersioned.add(entry); + } + } } } }