[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
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120518.3c65429)
 
 
Close
loading
Please Confirm
Close