[openempi~source-repository:230] Made various enhancements to the NwHIN Adapter in preparation for a demo
- From: odysseas@kenai.com
- To: commits@openempi.kenai.com
- Subject: [openempi~source-repository:230] Made various enhancements to the NwHIN Adapter in preparation for a demo
- Date: Sat, 11 Feb 2012 19:59:53 +0000
Project: openempi
Repository: source-repository
Revision: 230
Author: odysseas
Date: 2012-02-11 19:59:51 UTC
Link:
Log Message:
------------
Made various enhancements to the NwHIN Adapter in preparation for a demo at
HIMSS
Revisions:
----------
230
Modified Paths:
---------------
branches/2.2.1-SNAPSHOT/openempi/nhin-adapter/src/main/java/org/openhie/openempi/nhinadapter/OpenEmpiAdapter.java
branches/2.2.1-SNAPSHOT/openempi/nhin-adapter/src/main/java/org/openhie/openempi/nhinadapter/hl7/Hl7ConversionHelper.java
branches/2.2.1-SNAPSHOT/openempi/core/src/main/java/org/openhie/openempi/service/impl/PersonQueryServiceImpl.java
branches/2.2.1-SNAPSHOT/openempi/core/src/main/java/org/openhie/openempi/dao/hibernate/PersonDaoHibernate.java
branches/2.2.1-SNAPSHOT/openempi/basic-blocking/src/main/java/org/openhie/openempi/dao/hibernate/BlockingDaoHibernate.java
Diffs:
------
Index:
branches/2.2.1-SNAPSHOT/openempi/core/src/main/java/org/openhie/openempi/service/impl/PersonQueryServiceImpl.java
===================================================================
---
branches/2.2.1-SNAPSHOT/openempi/core/src/main/java/org/openhie/openempi/service/impl/PersonQueryServiceImpl.java
(revision 229)
+++
branches/2.2.1-SNAPSHOT/openempi/core/src/main/java/org/openhie/openempi/service/impl/PersonQueryServiceImpl.java
(revision 230)
@@ -132,7 +132,8 @@
try {
Set<RecordPair> links = matchingService.match(record);
for (RecordPair recordPair : links) {
- persons.add((Person)
recordPair.getRightRecord().getObject());
+ Person personLinked = (Person)
recordPair.getRightRecord().getObject();
+
persons.add(personDao.loadPerson(personLinked.getPersonId()));
}
} catch (ApplicationException e) {
log.warn("While searching for matching persons, the
system encountered an issue: " + e, e);
Index:
branches/2.2.1-SNAPSHOT/openempi/core/src/main/java/org/openhie/openempi/dao/hibernate/PersonDaoHibernate.java
===================================================================
---
branches/2.2.1-SNAPSHOT/openempi/core/src/main/java/org/openhie/openempi/dao/hibernate/PersonDaoHibernate.java
(revision 229)
+++
branches/2.2.1-SNAPSHOT/openempi/core/src/main/java/org/openhie/openempi/dao/hibernate/PersonDaoHibernate.java
(revision 230)
@@ -23,6 +23,8 @@
import java.util.Set;
import org.hibernate.Criteria;
+import org.hibernate.FetchMode;
+import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Disjunction;
@@ -95,9 +97,7 @@
}
List<Person> list = criteria.list();
log.debug("Query by partial identifier
returned: " + list.size() + " elements.");
- for (Person person : list) {
- person.toStringLong();
- }
+ removeDeletedIdentifiers(list);
return list;
}
});
@@ -106,10 +106,16 @@
public Person loadPerson(final Integer personId) {
return (Person) getHibernateTemplate().execute(new
HibernateCallback() {
public Object doInHibernate(Session session) throws
HibernateException, SQLException {
- Person p = (Person)
session.load(Person.class, personId);
- if (p != null) {
- p.toStringLong();
+ @SuppressWarnings("unchecked")
+ List<Person> persons =
session.createCriteria(Person.class)
+
.add(Expression.idEq(personId))
+
.add(Restrictions.isNull("dateVoided"))
+ .list();
+ if (persons.size() == 0) {
+ return null;
}
+ Person p = persons.get(0);
+ removeDeletedIdentifiers(p);
return p;
}});
}
@@ -153,7 +159,7 @@
return null;
}
Person person = list.get(0);
- session.evict(person);
+ removeDeletedIdentifiers(person);
return person;
}
});
@@ -190,10 +196,9 @@
criteriaHibernate.setMaxResults(maxResults);
}
log.debug("Querying by criteria using " +
criteriaHibernate.toString());
- List<Person> list = (List<Person>)
criteriaHibernate.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
- for (Person person : list) {
- person.toStringLong();
- }
+ List<Person> list = (List<Person>)
criteriaHibernate
+
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
+ removeDeletedIdentifiers(list);
log.debug("Query by criteria returned: " +
list.size() + " elements.");
return list;
}
@@ -212,9 +217,11 @@
criteriaHibernate.setMaxResults(maxResults);
}
log.debug("Querying by criteria using " +
criteriaHibernate.toString());
- List<Person> list = (List<Person>)
criteriaHibernate.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
+ List<Person> list = (List<Person>)
criteriaHibernate
+
.setFetchMode("personIdentifiers", FetchMode.JOIN)
+
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
for (Person person : list) {
- person.toStringLong();
+ removeDeletedIdentifiers(person);
}
log.debug("Query by criteria returned: " +
list.size() + " elements.");
return list;
@@ -359,6 +366,42 @@
log.debug("Removed an identifier domain instance.");
}
+ private void initializePersons(List<Person> persons) {
+ for (Person person : persons) {
+ initializeAssociations(person);
+ }
+ }
+
+ private static void initializeAssociations(Person person) {
+ if (person.getAddressType() != null) {
+ Hibernate.initialize(person.getAddressType());
+ }
+ if (person.getEthnicGroup() != null) {
+ Hibernate.initialize(person.getEthnicGroup());
+ }
+ if (person.getGender() != null) {
+ Hibernate.initialize(person.getGender());
+ }
+ if (person.getLanguage() != null) {
+ Hibernate.initialize(person.getLanguage());
+ }
+ if (person.getNameType() != null) {
+ Hibernate.initialize(person.getNameType());
+ }
+ if (person.getNationality() != null) {
+ Hibernate.initialize(person.getNationality());
+ }
+ if (person.getPhoneType() != null) {
+ Hibernate.initialize(person.getPhoneType());
+ }
+ if (person.getRace() != null) {
+ Hibernate.initialize(person.getRace());
+ }
+ if (person.getReligion() != null) {
+ Hibernate.initialize(person.getReligion());
+ }
+ }
+
private void loadAssociations(Person person) {
loadAddressType(person);
loadEthnicGroup(person);
@@ -518,6 +561,7 @@
Criteria criteria =
session.createCriteria(Person.class).add(Restrictions.isNull("dateVoided"));
if (personIdentifiers.size() > 0) {
criteria.createAlias("personIdentifiers", "pi");
+ criteria.add(Restrictions.isNull("pi.dateVoided"));
}
if (hasIdentifierDomainAttributes(personIdentifiers)) {
criteria.createAlias("personIdentifiers.identifierDomain", "id");
@@ -561,7 +605,11 @@
criteriaHibernate.createAlias(extended.getAssociationPath(),
extended.getAlias());
}
if (criterion.getOperation().equals(Operation.EQ) ||
criterion.getValue() instanceof java.util.Date) {
-
criteriaHibernate.add(Restrictions.eq(criterion.getName(),
criterion.getValue()).ignoreCase());
+ if (criterion.getValue() instanceof java.util.Date) {
+
criteriaHibernate.add(Restrictions.eq(criterion.getName(),
criterion.getValue()));
+ } else {
+
criteriaHibernate.add(Restrictions.eq(criterion.getName(),
criterion.getValue()).ignoreCase());
+ }
} else if
(criterion.getOperation().equals(Operation.ISNOTNULL)) {
criteriaHibernate.add(Restrictions.isNotNull(criterion.getName()));
} else if (criterion.getOperation().equals(Operation.ISNULL))
{
@@ -571,7 +619,7 @@
} else if (criterion.getOperation().equals(Operation.EQ)) {
criteriaHibernate.add(Restrictions.eq(criterion.getName(),
criterion.getValue()).ignoreCase());
} else if (criterion.getOperation().equals(Operation.NE)) {
-
criteriaHibernate.add(Restrictions.ne(criterion.getName(),
criterion.getValue()).ignoreCase());
+
criteriaHibernate.add(Restrictions.ne(criterion.getName(),
criterion.getValue()));
}
}
@@ -588,12 +636,15 @@
}
public IdentifierDomain findIdentifierDomain(final IdentifierDomain
identifierDomain) {
- if (identifierDomain.getIdentifierDomainId() != null) {
- return (IdentifierDomain)
getHibernateTemplate().load(IdentifierDomain.class,
identifierDomain.getIdentifierDomainId());
- }
return (IdentifierDomain) getHibernateTemplate().execute(new
HibernateCallback() {
@SuppressWarnings("unchecked")
public Object doInHibernate(Session session) throws
HibernateException, SQLException {
+ if (identifierDomain.getIdentifierDomainId()
!= null) {
+ IdentifierDomain
identifierDomainFound =
+ (IdentifierDomain)
session.load(IdentifierDomain.class,
identifierDomain.getIdentifierDomainId());
+
Hibernate.initialize(identifierDomainFound);
+ return identifierDomainFound;
+ }
Criteria criteria =
session.createCriteria(IdentifierDomain.class);
/**
* A domain identifier uniquely identifies a
domain either through the namespace identifier or through the
@@ -606,16 +657,35 @@
Restrictions.eq("universalIdentifier",
identifierDomain.getUniversalIdentifier()),
Restrictions.eq("id.universalIdentifierTypeCode",
identifierDomain.getUniversalIdentifierTypeCode())));
}
- List<Person> list = criteria.list();
+ List<IdentifierDomain> list = criteria.list();
log.debug("Query by identifier returned: " +
list.size() + " elements.");
if (list.size() == 0) {
return null;
}
- return list.get(0);
+ IdentifierDomain entry = list.get(0);
+ Hibernate.initialize(entry);
+ return entry;
}
});
}
+ private static void removeDeletedIdentifiers(List<Person> list) {
+ for (Person person : list) {
+ removeDeletedIdentifiers(person);
+ }
+ }
+
+ private static void removeDeletedIdentifiers(Person person) {
+ initializeAssociations(person);
+ List<PersonIdentifier> toBeRemoved = new
java.util.ArrayList<PersonIdentifier>();
+ for (PersonIdentifier id : person.getPersonIdentifiers()) {
+ if (id.getDateVoided() != null) {
+ toBeRemoved.add(id);
+ }
+ }
+ person.getPersonIdentifiers().removeAll(toBeRemoved);
+ }
+
@SuppressWarnings("unchecked")
public Gender findGenderByCode(String genderCode) {
List<Gender> list = (List<Gender>) getHibernateTemplate().
Index:
branches/2.2.1-SNAPSHOT/openempi/basic-blocking/src/main/java/org/openhie/openempi/dao/hibernate/BlockingDaoHibernate.java
===================================================================
---
branches/2.2.1-SNAPSHOT/openempi/basic-blocking/src/main/java/org/openhie/openempi/dao/hibernate/BlockingDaoHibernate.java
(revision 229)
+++
branches/2.2.1-SNAPSHOT/openempi/basic-blocking/src/main/java/org/openhie/openempi/dao/hibernate/BlockingDaoHibernate.java
(revision 230)
@@ -21,6 +21,7 @@
import java.util.ArrayList;
import java.util.List;
+import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
@@ -33,6 +34,7 @@
import org.openhie.openempi.model.NameValuePair;
import org.openhie.openempi.model.Operation;
import org.openhie.openempi.model.Person;
+import org.openhie.openempi.model.PersonIdentifier;
import org.openhie.openempi.model.Record;
import org.springframework.orm.hibernate3.HibernateCallback;
@@ -120,11 +122,60 @@
log.debug("Querying by criteria using " +
criteriaHibernate.toString());
List<Person> list = (List<Person>)
criteriaHibernate.setResultTransformer(org.hibernate.Criteria.DISTINCT_ROOT_ENTITY).list();
log.debug("Query by criteria returned: " +
list.size() + " elements.");
+ removeDeletedIdentifiers(list);
return list;
}
});
}
+
+ private static void removeDeletedIdentifiers(List<Person> list) {
+ for (Person person : list) {
+ removeDeletedIdentifiers(person);
+ }
+ }
+
+ private static void removeDeletedIdentifiers(Person person) {
+ initializeAssociations(person);
+ List<PersonIdentifier> toBeRemoved = new
java.util.ArrayList<PersonIdentifier>();
+ for (PersonIdentifier id : person.getPersonIdentifiers()) {
+ if (id.getDateVoided() != null) {
+ toBeRemoved.add(id);
+ }
+ }
+ person.getPersonIdentifiers().removeAll(toBeRemoved);
+ }
+
+ private static void initializeAssociations(Person person) {
+ if (person.getAddressType() != null) {
+ Hibernate.initialize(person.getAddressType());
+ }
+ if (person.getEthnicGroup() != null) {
+ Hibernate.initialize(person.getEthnicGroup());
+ }
+ if (person.getGender() != null) {
+ Hibernate.initialize(person.getGender());
+ }
+ if (person.getLanguage() != null) {
+ Hibernate.initialize(person.getLanguage());
+ }
+ if (person.getNameType() != null) {
+ Hibernate.initialize(person.getNameType());
+ }
+ if (person.getNationality() != null) {
+ Hibernate.initialize(person.getNationality());
+ }
+ if (person.getPhoneType() != null) {
+ Hibernate.initialize(person.getPhoneType());
+ }
+ if (person.getRace() != null) {
+ Hibernate.initialize(person.getRace());
+ }
+ if (person.getReligion() != null) {
+ Hibernate.initialize(person.getReligion());
+ }
+ }
+
private org.hibernate.Criteria buildHibernateCriteria(Session
session, Criteria criteria) {
org.hibernate.Criteria criteriaHibernate =
session.createCriteria(Person.class);
for (Criterion criterion : criteria.getCriteria()) {
Index:
branches/2.2.1-SNAPSHOT/openempi/nhin-adapter/src/main/java/org/openhie/openempi/nhinadapter/hl7/Hl7ConversionHelper.java
===================================================================
---
branches/2.2.1-SNAPSHOT/openempi/nhin-adapter/src/main/java/org/openhie/openempi/nhinadapter/hl7/Hl7ConversionHelper.java
(revision 229)
+++
branches/2.2.1-SNAPSHOT/openempi/nhin-adapter/src/main/java/org/openhie/openempi/nhinadapter/hl7/Hl7ConversionHelper.java
(revision 230)
@@ -671,7 +671,9 @@
List<Serializable> choice =
name.getValue().get(0).getContent();
String nameString = "";
+ int givenNameIndex=0;
EnExplicitGiven givenName = null;
+ EnExplicitGiven middleName = null;
EnExplicitFamily familyName = null;
for (Iterator<Serializable> iterSerialObjects =
choice.iterator(); iterSerialObjects.hasNext(); ) {
log.info("in iterSerialObjects.hasNext() loop");
@@ -694,8 +696,15 @@
familyName = (EnExplicitFamily)
oJAXBElement.getValue();
log.debug("found lastname element;
content=" + familyName.getContent());
} else if (oJAXBElement.getValue() instanceof
EnExplicitGiven) {
- givenName = (EnExplicitGiven)
oJAXBElement.getValue();
- log.info("found firstname element;
content=" + givenName.getContent());
+ if (givenNameIndex == 0) {
+ givenName = (EnExplicitGiven)
oJAXBElement.getValue();
+ log.info("found firstname
element; content=" + givenName.getContent());
+ givenNameIndex++;
+ } else {
+ middleName =
(EnExplicitGiven) oJAXBElement.getValue();
+ log.info("found middlename
element; content=" + givenName.getContent());
+ givenNameIndex++;
+ }
} else {
log.warn("other name part=" +
oJAXBElement.getValue());
}
@@ -704,14 +713,21 @@
}
}
- if (familyName.getContent() != null || givenName.getContent()
!= null) {
- if (familyName.getContent() != null) {
+ if ((familyName != null && familyName.getContent() != null)
||
+ (givenName != null && givenName.getContent()
!= null) ||
+ (middleName != null &&
middleName.getContent() != null)) {
+
+ if (familyName != null && familyName.getContent() !=
null) {
person.setFamilyName(familyName.getContent());
}
- if (givenName.getContent() != null) {
+ if (givenName != null && givenName.getContent() !=
null) {
person.setGivenName(givenName.getContent());
}
+
+ if (middleName != null && middleName.getContent() !=
null) {
+ person.setMiddleName(middleName.getContent());
+ }
} else {
if (nameString.length() > 0) {
Index:
branches/2.2.1-SNAPSHOT/openempi/nhin-adapter/src/main/java/org/openhie/openempi/nhinadapter/OpenEmpiAdapter.java
===================================================================
---
branches/2.2.1-SNAPSHOT/openempi/nhin-adapter/src/main/java/org/openhie/openempi/nhinadapter/OpenEmpiAdapter.java
(revision 229)
+++
branches/2.2.1-SNAPSHOT/openempi/nhin-adapter/src/main/java/org/openhie/openempi/nhinadapter/OpenEmpiAdapter.java
(revision 230)
@@ -64,6 +64,7 @@
org.hl7.v3.PRPAIN201306UV02 response = null;
try {
List<Person> candidates = null;
+ log.debug("With allowPartionMatches set to: " +
hl7ConversionHelper.isAllowPartialMatches() + " searching for person: " +
person);
if (hl7ConversionHelper.isAllowPartialMatches()) {
candidates =
queryService.findMatchingPersonsByAttributes(person);
} else {
|
[openempi~source-repository:230] Made various enhancements to the NwHIN Adapter in preparation for a demo |
odysseas | 02/11/2012 |





