Dynamic Custom Model Class Factories with Groovy
Custom HL7 message structures are added by defining an
org.openehealth.ipf.modules.hl7.config.CustomModelClasses
bean in a custom Spring application context file. This bean definition represents a mapping with a message structure
version as a mapping-key and the package name of custom model classes as a mapping-value.
These custom message structures have priority over the existing message structures.
<bean id="customClasses"
class="org.openehealth.ipf.modules.hl7.config.CustomModelClasses">
<property name="modelClasses">
<map>
<entry key="2.5">
<list>
<value>org.openehealth.ipf.modules.hl7.parser.test.hl7v2.def.v25</value>
</list>
</entry>
</map>
</property>
</bean>
The custom model classes from the given package will be picked up by the
CustomModelClassFactoryConfigurer and automatically
added to the shared CustomModelClassFactory.
It is also possible to use theGroovyCustomModelClassFactory and mix script-based with class-based model class definitions:
<bean id="groovyCustomModelClassFactory"
class="org.openehealth.ipf.modules.hl7.parser.GroovyCustomModelClassFactory">
<constructor-arg ref="javaCustomModelClassFactory"/> <!-- fallback -->
</bean>
<bean id="javaCustomModelClassFactory"
class="org.openehealth.ipf.modules.hl7.parser.CustomModelClassFactory" >
</bean>
<bean id="configurer"
class="org.openehealth.ipf.modules.hl7.config.CustomModelClassFactoryConfigurer">
<property name="customModelClassFactory" ref="groovyCustomModelClassFactory" />
</bean>
Now the custom Spring context file can have custom model classes as both scripts and compiled classes:
<bean id="customClasses"
class="org.openehealth.ipf.modules.hl7.config.CustomModelClasses">
<property name="modelClasses">
<map>
<entry key="2.5"> <!-- compiled classes -->
<list>
<value>org.openehealth.ipf.modules.hl7.parser.compiled.hl7v2.def.v25</value>
</list>
</entry>
<entry key="2.4"> <!-- groovy scripts -->
<list>
<value>org.openehealth.ipf.modules.hl7.parser.notcompiled.hl7v2.def.v24</value>
</list>
</entry>
</map>
</property>
</bean>