Fix issue with JPA search params

This commit is contained in:
jamesagnew 2014-06-16 18:07:55 -04:00
parent bba62b2972
commit e0ae780ff2
8 changed files with 61 additions and 38 deletions

View File

@ -81,7 +81,7 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
private Class<T> myResourceType; private Class<T> myResourceType;
private String mySecondaryPrimaryKeyParamName; private String mySecondaryPrimaryKeyParamName;
private Set<Long> addPredicateDate(Set<Long> thePids, List<IQueryParameterType> theOrParams) { private Set<Long> addPredicateDate(String theParamName, Set<Long> thePids, List<IQueryParameterType> theOrParams) {
if (theOrParams == null || theOrParams.isEmpty()) { if (theOrParams == null || theOrParams.isEmpty()) {
return thePids; return thePids;
} }
@ -111,11 +111,12 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
Predicate masterCodePredicate = builder.or(codePredicates.toArray(new Predicate[0])); Predicate masterCodePredicate = builder.or(codePredicates.toArray(new Predicate[0]));
Predicate type = builder.equal(from.get("myResourceType"), myResourceName); Predicate type = builder.equal(from.get("myResourceType"), myResourceName);
Predicate name = builder.equal(from.get("myParamName"), theParamName);
if (thePids.size() > 0) { if (thePids.size() > 0) {
Predicate inPids = (from.get("myResourcePid").in(thePids)); Predicate inPids = (from.get("myResourcePid").in(thePids));
cq.where(builder.and(type, inPids, masterCodePredicate)); cq.where(builder.and(type, name, masterCodePredicate,inPids));
} else { } else {
cq.where(builder.and(type, masterCodePredicate)); cq.where(builder.and(type, name,masterCodePredicate));
} }
TypedQuery<Long> q = myEntityManager.createQuery(cq); TypedQuery<Long> q = myEntityManager.createQuery(cq);
@ -161,7 +162,7 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
} }
} }
private Set<Long> addPredicateQuantity(Set<Long> thePids, List<IQueryParameterType> theOrParams) { private Set<Long> addPredicateQuantity(String theParamName, Set<Long> thePids, List<IQueryParameterType> theOrParams) {
if (theOrParams == null || theOrParams.isEmpty()) { if (theOrParams == null || theOrParams.isEmpty()) {
return thePids; return thePids;
} }
@ -234,11 +235,12 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
Predicate masterCodePredicate = builder.or(codePredicates.toArray(new Predicate[0])); Predicate masterCodePredicate = builder.or(codePredicates.toArray(new Predicate[0]));
Predicate type = builder.equal(from.get("myResourceType"), myResourceName); Predicate type = builder.equal(from.get("myResourceType"), myResourceName);
Predicate name = builder.equal(from.get("myParamName"), theParamName);
if (thePids.size() > 0) { if (thePids.size() > 0) {
Predicate inPids = (from.get("myResourcePid").in(thePids)); Predicate inPids = (from.get("myResourcePid").in(thePids));
cq.where(builder.and(type, inPids, masterCodePredicate)); cq.where(builder.and(type, name, masterCodePredicate, inPids));
} else { } else {
cq.where(builder.and(type, masterCodePredicate)); cq.where(builder.and(type, name, masterCodePredicate));
} }
TypedQuery<Long> q = myEntityManager.createQuery(cq); TypedQuery<Long> q = myEntityManager.createQuery(cq);
@ -276,7 +278,9 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
Long targetPid = Long.valueOf(resourceId); Long targetPid = Long.valueOf(resourceId);
ourLog.info("Searching for resource link with target PID: {}", targetPid); ourLog.info("Searching for resource link with target PID: {}", targetPid);
Predicate eq = builder.equal(from.get("myTargetResourcePid"), targetPid); Predicate eq = builder.equal(from.get("myTargetResourcePid"), targetPid);
codePredicates.add(eq); codePredicates.add(eq);
} else { } else {
String chain = getContext().getResourceDefinition(myResourceType).getSearchParam(theParamName).getPath(); String chain = getContext().getResourceDefinition(myResourceType).getSearchParam(theParamName).getPath();
BaseRuntimeChildDefinition def = getContext().newTerser().getDefinition(myResourceType, chain); BaseRuntimeChildDefinition def = getContext().newTerser().getDefinition(myResourceType, chain);
@ -331,7 +335,7 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
Predicate type = builder.equal(from.get("mySourcePath"), path); Predicate type = builder.equal(from.get("mySourcePath"), path);
if (pidsToRetain.size() > 0) { if (pidsToRetain.size() > 0) {
Predicate inPids = (from.get("mySourceResourcePid").in(pidsToRetain)); Predicate inPids = (from.get("mySourceResourcePid").in(pidsToRetain));
cq.where(builder.and(type, inPids, masterCodePredicate)); cq.where(builder.and(type, masterCodePredicate, inPids));
} else { } else {
cq.where(builder.and(type, masterCodePredicate)); cq.where(builder.and(type, masterCodePredicate));
} }
@ -340,7 +344,7 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
return new HashSet<Long>(q.getResultList()); return new HashSet<Long>(q.getResultList());
} }
private Set<Long> addPredicateString(Set<Long> thePids, List<IQueryParameterType> theOrParams) { private Set<Long> addPredicateString(String theParamName, Set<Long> thePids, List<IQueryParameterType> theOrParams) {
if (theOrParams == null || theOrParams.isEmpty()) { if (theOrParams == null || theOrParams.isEmpty()) {
return thePids; return thePids;
} }
@ -373,18 +377,19 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
Predicate masterCodePredicate = builder.or(codePredicates.toArray(new Predicate[0])); Predicate masterCodePredicate = builder.or(codePredicates.toArray(new Predicate[0]));
Predicate type = builder.equal(from.get("myResourceType"), myResourceName); Predicate type = builder.equal(from.get("myResourceType"), myResourceName);
Predicate name = builder.equal(from.get("myParamName"), theParamName);
if (thePids.size() > 0) { if (thePids.size() > 0) {
Predicate inPids = (from.get("myResourcePid").in(thePids)); Predicate inPids = (from.get("myResourcePid").in(thePids));
cq.where(builder.and(type, inPids, masterCodePredicate)); cq.where(builder.and(type, name, masterCodePredicate, inPids));
} else { } else {
cq.where(builder.and(type, masterCodePredicate)); cq.where(builder.and(type, name, masterCodePredicate));
} }
TypedQuery<Long> q = myEntityManager.createQuery(cq); TypedQuery<Long> q = myEntityManager.createQuery(cq);
return new HashSet<Long>(q.getResultList()); return new HashSet<Long>(q.getResultList());
} }
private Set<Long> addPredicateToken(Set<Long> thePids, List<IQueryParameterType> theOrParams) { private Set<Long> addPredicateToken(String theParamName, Set<Long> thePids, List<IQueryParameterType> theOrParams) {
if (theOrParams == null || theOrParams.isEmpty()) { if (theOrParams == null || theOrParams.isEmpty()) {
return thePids; return thePids;
} }
@ -430,11 +435,12 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
Predicate masterCodePredicate = builder.or(codePredicates.toArray(new Predicate[0])); Predicate masterCodePredicate = builder.or(codePredicates.toArray(new Predicate[0]));
Predicate type = builder.equal(from.get("myResourceType"), myResourceName); Predicate type = builder.equal(from.get("myResourceType"), myResourceName);
Predicate name = builder.equal(from.get("myParamName"), theParamName);
if (thePids.size() > 0) { if (thePids.size() > 0) {
Predicate inPids = (from.get("myResourcePid").in(thePids)); Predicate inPids = (from.get("myResourcePid").in(thePids));
cq.where(builder.and(type, inPids, masterCodePredicate)); cq.where(builder.and(type, name, masterCodePredicate,inPids));
} else { } else {
cq.where(builder.and(type, masterCodePredicate)); cq.where(builder.and(type, name, masterCodePredicate));
} }
TypedQuery<Long> q = myEntityManager.createQuery(cq); TypedQuery<Long> q = myEntityManager.createQuery(cq);
@ -752,28 +758,28 @@ public class FhirResourceDao<T extends IResource> extends BaseFhirDao implements
if (nextParamDef != null) { if (nextParamDef != null) {
if (nextParamDef.getParamType() == SearchParamTypeEnum.TOKEN) { if (nextParamDef.getParamType() == SearchParamTypeEnum.TOKEN) {
for (List<IQueryParameterType> nextAnd : nextParamEntry.getValue()) { for (List<IQueryParameterType> nextAnd : nextParamEntry.getValue()) {
pids = addPredicateToken(pids, nextAnd); pids = addPredicateToken(nextParamName, pids, nextAnd);
if (pids.isEmpty()) { if (pids.isEmpty()) {
return new HashSet<Long>(); return new HashSet<Long>();
} }
} }
} else if (nextParamDef.getParamType() == SearchParamTypeEnum.STRING) { } else if (nextParamDef.getParamType() == SearchParamTypeEnum.STRING) {
for (List<IQueryParameterType> nextAnd : nextParamEntry.getValue()) { for (List<IQueryParameterType> nextAnd : nextParamEntry.getValue()) {
pids = addPredicateString(pids, nextAnd); pids = addPredicateString(nextParamName, pids, nextAnd);
if (pids.isEmpty()) { if (pids.isEmpty()) {
return new HashSet<Long>(); return new HashSet<Long>();
} }
} }
} else if (nextParamDef.getParamType() == SearchParamTypeEnum.QUANTITY) { } else if (nextParamDef.getParamType() == SearchParamTypeEnum.QUANTITY) {
for (List<IQueryParameterType> nextAnd : nextParamEntry.getValue()) { for (List<IQueryParameterType> nextAnd : nextParamEntry.getValue()) {
pids = addPredicateQuantity(pids, nextAnd); pids = addPredicateQuantity(nextParamName, pids, nextAnd);
if (pids.isEmpty()) { if (pids.isEmpty()) {
return new HashSet<Long>(); return new HashSet<Long>();
} }
} }
} else if (nextParamDef.getParamType() == SearchParamTypeEnum.DATE) { } else if (nextParamDef.getParamType() == SearchParamTypeEnum.DATE) {
for (List<IQueryParameterType> nextAnd : nextParamEntry.getValue()) { for (List<IQueryParameterType> nextAnd : nextParamEntry.getValue()) {
pids = addPredicateDate(pids, nextAnd); pids = addPredicateDate(nextParamName, pids, nextAnd);
if (pids.isEmpty()) { if (pids.isEmpty()) {
return new HashSet<Long>(); return new HashSet<Long>();
} }

View File

@ -21,7 +21,7 @@ public abstract class BaseResourceIndexedSearchParam implements Serializable {
private Long myId; private Long myId;
@Column(name = "SP_NAME", length = 100, nullable=false) @Column(name = "SP_NAME", length = 100, nullable=false)
private String myName; private String myParamName;
@ManyToOne(optional = false) @ManyToOne(optional = false)
@JoinColumn(name = "RES_ID", referencedColumnName="RES_ID") @JoinColumn(name = "RES_ID", referencedColumnName="RES_ID")
@ -33,12 +33,12 @@ public abstract class BaseResourceIndexedSearchParam implements Serializable {
@Column(name = "RES_ID", insertable = false, updatable = false) @Column(name = "RES_ID", insertable = false, updatable = false)
private Long myResourcePid; private Long myResourcePid;
public String getName() { public String getParamName() {
return myName; return myParamName;
} }
public void setName(String theName) { public void setParamName(String theName) {
myName = theName; myParamName = theName;
} }
public ResourceTable getResource() { public ResourceTable getResource() {

View File

@ -10,7 +10,7 @@ import javax.persistence.TemporalType;
@Entity @Entity
@Table(name = "HFJ_SPIDX_DATE" /*, indexes= {@Index(name="IDX_SP_DATE", columnList= "SP_VALUE_LOW,SP_VALUE_HIGH")}*/) @Table(name = "HFJ_SPIDX_DATE" /*, indexes= {@Index(name="IDX_SP_DATE", columnList= "SP_VALUE_LOW,SP_VALUE_HIGH")}*/)
@org.hibernate.annotations.Table(appliesTo = "HFJ_SPIDX_DATE", indexes= {@org.hibernate.annotations.Index(name="IDX_SP_DATE", columnNames= {"SP_VALUE_LOW","SP_VALUE_HIGH"})}) @org.hibernate.annotations.Table(appliesTo = "HFJ_SPIDX_DATE", indexes= {@org.hibernate.annotations.Index(name="IDX_SP_DATE", columnNames= {"RES_TYPE", "SP_NAME", "SP_VALUE_LOW","SP_VALUE_HIGH"})})
public class ResourceIndexedSearchParamDate extends BaseResourceIndexedSearchParam { public class ResourceIndexedSearchParamDate extends BaseResourceIndexedSearchParam {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -29,7 +29,7 @@ public class ResourceIndexedSearchParamDate extends BaseResourceIndexedSearchPar
} }
public ResourceIndexedSearchParamDate(String theName, Date theLow, Date theHigh) { public ResourceIndexedSearchParamDate(String theName, Date theLow, Date theHigh) {
setName(theName); setParamName(theName);
setValueLow(theLow); setValueLow(theLow);
setValueHigh(theHigh); setValueHigh(theHigh);
} }

View File

@ -8,7 +8,7 @@ import javax.persistence.Table;
@Entity @Entity
@Table(name = "HFJ_SPIDX_NUMBER" /*, indexes= {@Index(name="IDX_SP_NUMBER", columnList="SP_VALUE")}*/ ) @Table(name = "HFJ_SPIDX_NUMBER" /*, indexes= {@Index(name="IDX_SP_NUMBER", columnList="SP_VALUE")}*/ )
@org.hibernate.annotations.Table(appliesTo = "HFJ_SPIDX_NUMBER", indexes= {@org.hibernate.annotations.Index(name="IDX_SP_NUMBER", columnNames= {"SP_VALUE"})}) @org.hibernate.annotations.Table(appliesTo = "HFJ_SPIDX_NUMBER", indexes= {@org.hibernate.annotations.Index(name="IDX_SP_NUMBER", columnNames= {"RES_TYPE", "SP_NAME", "SP_VALUE"})})
public class ResourceIndexedSearchParamNumber extends BaseResourceIndexedSearchParam { public class ResourceIndexedSearchParamNumber extends BaseResourceIndexedSearchParam {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -23,7 +23,7 @@ public class ResourceIndexedSearchParamNumber extends BaseResourceIndexedSearchP
public BigDecimal myValue; public BigDecimal myValue;
public ResourceIndexedSearchParamNumber(String theParamName, BigDecimal theValue, String theSystem, String theUnits) { public ResourceIndexedSearchParamNumber(String theParamName, BigDecimal theValue, String theSystem, String theUnits) {
setName(theParamName); setParamName(theParamName);
setSystem(theSystem); setSystem(theSystem);
setValue(theValue); setValue(theValue);
setUnits(theUnits); setUnits(theUnits);

View File

@ -7,7 +7,7 @@ import javax.persistence.Table;
@Entity @Entity
@Table(name = "HFJ_SPIDX_STRING"/*, indexes= {@Index(name="IDX_SP_STRING", columnList="SP_VALUE_NORMALIZED")}*/) @Table(name = "HFJ_SPIDX_STRING"/*, indexes= {@Index(name="IDX_SP_STRING", columnList="SP_VALUE_NORMALIZED")}*/)
@org.hibernate.annotations.Table(appliesTo="HFJ_SPIDX_STRING",indexes= { @org.hibernate.annotations.Table(appliesTo="HFJ_SPIDX_STRING",indexes= {
@org.hibernate.annotations.Index(name="IDX_SP_STRING", columnNames= {"SP_VALUE_NORMALIZED"})}) @org.hibernate.annotations.Index(name="IDX_SP_STRING", columnNames= {"RES_TYPE", "SP_NAME", "SP_VALUE_NORMALIZED"})})
public class ResourceIndexedSearchParamString extends BaseResourceIndexedSearchParam { public class ResourceIndexedSearchParamString extends BaseResourceIndexedSearchParam {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -22,7 +22,7 @@ public class ResourceIndexedSearchParamString extends BaseResourceIndexedSearchP
} }
public ResourceIndexedSearchParamString(String theName, String theValueNormalized, String theValueExact) { public ResourceIndexedSearchParamString(String theName, String theValueNormalized, String theValueExact) {
setName(theName); setParamName(theName);
setValueNormalized(theValueNormalized); setValueNormalized(theValueNormalized);
setValueExact(theValueExact); setValueExact(theValueExact);
} }

View File

@ -8,7 +8,7 @@ import org.apache.commons.lang3.StringUtils;
@Entity @Entity
@Table(name = "HFJ_SPIDX_TOKEN" /* , indexes = { @Index(name = "IDX_SP_TOKEN", columnList = "SP_SYSTEM,SP_VALUE") } */) @Table(name = "HFJ_SPIDX_TOKEN" /* , indexes = { @Index(name = "IDX_SP_TOKEN", columnList = "SP_SYSTEM,SP_VALUE") } */)
@org.hibernate.annotations.Table(appliesTo = "HFJ_SPIDX_TOKEN", indexes = { @org.hibernate.annotations.Index(name = "IDX_SP_TOKEN", columnNames = { "SP_SYSTEM", "SP_VALUE" }) }) @org.hibernate.annotations.Table(appliesTo = "HFJ_SPIDX_TOKEN", indexes = { @org.hibernate.annotations.Index(name = "IDX_SP_TOKEN", columnNames = { "RES_TYPE", "SP_NAME", "SP_SYSTEM", "SP_VALUE" }) })
public class ResourceIndexedSearchParamToken extends BaseResourceIndexedSearchParam { public class ResourceIndexedSearchParamToken extends BaseResourceIndexedSearchParam {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -23,7 +23,7 @@ public class ResourceIndexedSearchParamToken extends BaseResourceIndexedSearchPa
} }
public ResourceIndexedSearchParamToken(String theName, String theSystem, String theValue) { public ResourceIndexedSearchParamToken(String theName, String theSystem, String theValue) {
setName(theName); setParamName(theName);
setSystem(theSystem); setSystem(theSystem);
setValue(theValue); setValue(theValue);
} }

View File

@ -16,7 +16,7 @@ import org.apache.commons.lang3.Validate;
@Entity @Entity
@Table(name = "HFJ_RES_LINK"/*, indexes= {@Index(name="IDX_RL_TPATHRES", columnList= "SRC_PATH,TARGET_RESOURCE_ID")}*/) @Table(name = "HFJ_RES_LINK"/*, indexes= {@Index(name="IDX_RL_TPATHRES", columnList= "SRC_PATH,TARGET_RESOURCE_ID")}*/)
@org.hibernate.annotations.Table(appliesTo="HFJ_RES_LINK",indexes= { @org.hibernate.annotations.Table(appliesTo="HFJ_RES_LINK",indexes= {
@org.hibernate.annotations.Index(name="IDX_RL_TPATHRES", columnNames= {"SRC_PATH","TARGET_RESOURCE_ID"})}) @org.hibernate.annotations.Index(name="IDX_RL_TPATHRES", columnNames= {"SRC_PATH", "TARGET_RESOURCE_ID"})})
public class ResourceLink implements Serializable { public class ResourceLink implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -160,9 +160,13 @@ public class FhirResourceDaoTest {
ourPatientDao.create(patient); ourPatientDao.create(patient);
List<Patient> found = ourPatientDao.search("birthdate", new QualifiedDateParam(QuantityCompararatorEnum.GREATERTHAN, "2000-01-01")); List<Patient> found = ourPatientDao.search(Patient.SP_BIRTHDATE, new QualifiedDateParam(QuantityCompararatorEnum.GREATERTHAN, "2000-01-01"));
assertEquals(1, found.size()); assertEquals(1, found.size());
// If this throws an exception, that would be an acceptable outcome as well..
found = ourPatientDao.search(Patient.SP_BIRTHDATE+"AAAA", new QualifiedDateParam(QuantityCompararatorEnum.GREATERTHAN, "2000-01-01"));
assertEquals(0, found.size());
} }
@Test @Test
@ -228,7 +232,7 @@ public class FhirResourceDaoTest {
map.get(Patient.SP_IDENTIFIER).get(0).add(new IdentifierDt("urn:system", "001testPersistSearchParams")); map.get(Patient.SP_IDENTIFIER).get(0).add(new IdentifierDt("urn:system", "001testPersistSearchParams"));
map.put(Patient.SP_GENDER, new ArrayList<List<IQueryParameterType>>()); map.put(Patient.SP_GENDER, new ArrayList<List<IQueryParameterType>>());
map.get(Patient.SP_GENDER).add(new ArrayList<IQueryParameterType>()); map.get(Patient.SP_GENDER).add(new ArrayList<IQueryParameterType>());
map.get(Patient.SP_GENDER).get(0).add(new IdentifierDt(null, "M")); map.get(Patient.SP_GENDER).get(0).add(new IdentifierDt(AdministrativeGenderCodesEnum.M.getSystem(), "M"));
found = ourPatientDao.search(map); found = ourPatientDao.search(map);
assertEquals(1, found.size()); assertEquals(1, found.size());
assertEquals(id, found.get(0).getId().asLong().longValue()); assertEquals(id, found.get(0).getId().asLong().longValue());
@ -239,7 +243,7 @@ public class FhirResourceDaoTest {
map.get(Patient.SP_IDENTIFIER).get(0).add(new IdentifierDt("urn:system", "001testPersistSearchParams")); map.get(Patient.SP_IDENTIFIER).get(0).add(new IdentifierDt("urn:system", "001testPersistSearchParams"));
map.put(Patient.SP_GENDER, new ArrayList<List<IQueryParameterType>>()); map.put(Patient.SP_GENDER, new ArrayList<List<IQueryParameterType>>());
map.get(Patient.SP_GENDER).add(new ArrayList<IQueryParameterType>()); map.get(Patient.SP_GENDER).add(new ArrayList<IQueryParameterType>());
map.get(Patient.SP_GENDER).get(0).add(new IdentifierDt(null, "F")); map.get(Patient.SP_GENDER).get(0).add(new IdentifierDt(AdministrativeGenderCodesEnum.M.getSystem(), "F"));
found = ourPatientDao.search(map); found = ourPatientDao.search(map);
assertEquals(0, found.size()); assertEquals(0, found.size());
@ -287,12 +291,25 @@ public class FhirResourceDaoTest {
assertEquals(1, patients.size()); assertEquals(1, patients.size());
assertEquals(id1.getUnqualifiedId(), patients.get(0).getId().getUnqualifiedId()); assertEquals(id1.getUnqualifiedId(), patients.get(0).getId().getUnqualifiedId());
// Given name shouldn't return for family param
params = new HashMap<String, IQueryParameterType>(); params = new HashMap<String, IQueryParameterType>();
params.put(Patient.SP_FAMILY, new StringDt("testSearchNameParam01Giv")); params.put(Patient.SP_FAMILY, new StringDt("testSearchNameParam01Giv"));
patients = ourPatientDao.search(params); patients = ourPatientDao.search(params);
assertEquals(0, patients.size());
params = new HashMap<String, IQueryParameterType>();
params.put(Patient.SP_NAME, new StringDt("testSearchNameParam01Fam"));
patients = ourPatientDao.search(params);
assertEquals(1, patients.size()); assertEquals(1, patients.size());
assertEquals(id1.getUnqualifiedId(), patients.get(0).getId().getUnqualifiedId()); assertEquals(id1.getUnqualifiedId(), patients.get(0).getId().getUnqualifiedId());
params = new HashMap<String, IQueryParameterType>();
params.put(Patient.SP_NAME, new StringDt("testSearchNameParam01Giv"));
patients = ourPatientDao.search(params);
assertEquals(1, patients.size());
assertEquals(id1.getUnqualifiedId(), patients.get(0).getId().getUnqualifiedId());
params = new HashMap<String, IQueryParameterType>(); params = new HashMap<String, IQueryParameterType>();
params.put(Patient.SP_FAMILY, new StringDt("testSearchNameParam01Foo")); params.put(Patient.SP_FAMILY, new StringDt("testSearchNameParam01Foo"));
patients = ourPatientDao.search(params); patients = ourPatientDao.search(params);
@ -329,14 +346,14 @@ public class FhirResourceDaoTest {
ourLog.info("P1[{}] P2[{}] O1[{}] O2[{}] D1[{}]", new Object[] { patientId01, patientId02, obsId01, obsId02, drId01 }); ourLog.info("P1[{}] P2[{}] O1[{}] O2[{}] D1[{}]", new Object[] { patientId01, patientId02, obsId01, obsId02, drId01 });
List<Observation> result = ourObservationDao.search(Observation.SP_SUBJECT, new ReferenceParam(Patient.SP_IDENTIFIER, "testSearchResourceLinkWithChain01")); List<Observation> result = ourObservationDao.search(Observation.SP_SUBJECT, new ReferenceParam(Patient.SP_IDENTIFIER, "urn:system|testSearchResourceLinkWithChain01"));
assertEquals(1, result.size()); assertEquals(1, result.size());
assertEquals(obsId01.getUnqualifiedId(), result.get(0).getId().getUnqualifiedId()); assertEquals(obsId01.getUnqualifiedId(), result.get(0).getId().getUnqualifiedId());
result = ourObservationDao.search(Observation.SP_SUBJECT, new ReferenceParam(Patient.SP_IDENTIFIER, "999999999999")); result = ourObservationDao.search(Observation.SP_SUBJECT, new ReferenceParam(Patient.SP_IDENTIFIER, "999999999999"));
assertEquals(0, result.size()); assertEquals(0, result.size());
result = ourObservationDao.search(Observation.SP_SUBJECT, new ReferenceParam(Patient.SP_IDENTIFIER, "testSearchResourceLinkWithChainXX")); result = ourObservationDao.search(Observation.SP_SUBJECT, new ReferenceParam(Patient.SP_IDENTIFIER, "urn:system|testSearchResourceLinkWithChainXX"));
assertEquals(2, result.size()); assertEquals(2, result.size());
} }
@ -607,13 +624,13 @@ public class FhirResourceDaoTest {
} }
Map<String, IQueryParameterType> params = new HashMap<String, IQueryParameterType>(); Map<String, IQueryParameterType> params = new HashMap<String, IQueryParameterType>();
params.put(Patient.SP_FAMILY, new StringDt("testSearchStringParamWithNonNormalized_hora")); params.put(Patient.SP_GIVEN, new StringDt("testSearchStringParamWithNonNormalized_hora"));
List<Patient> patients = ourPatientDao.search(params); List<Patient> patients = ourPatientDao.search(params);
assertEquals(2, patients.size()); assertEquals(2, patients.size());
StringParam parameter = new StringParam("testSearchStringParamWithNonNormalized_hora"); StringParam parameter = new StringParam("testSearchStringParamWithNonNormalized_hora");
parameter.setExact(true); parameter.setExact(true);
params.put(Patient.SP_FAMILY, parameter); params.put(Patient.SP_GIVEN, parameter);
patients = ourPatientDao.search(params); patients = ourPatientDao.search(params);
assertEquals(0, patients.size()); assertEquals(0, patients.size());