Using ATL/EMFTVM for import/export of medical data 8-Oct-2014, Dennis Wagelaar
2
Import/export a common programming scenario SuMEHR GPSMF PMF Corilus XML SuMEHR GPSMF PMF Corilus XML 4
Corilus XML as pivot model SuMEHR GPSMF PMF Corilus XML 5
Corilus XML as pivot model SuMEHR GPSMF PMF Corilus XML 6
Import/export simplified Corilus XML 7
Why ATL? (ATL Transformation Language) Domain-specific language for transformation More expressive than mapping frameworks embedded in Java, e.g. Dozer Less verbose for transformations than general- purpose languages Uses OCL standard for expressions Uses EMF for data representation Closely related to plain Java objects Enriched with additional concepts, e.g. containment and associated properties 8
Why EMFTVM? (EMF Transformation Virtual Machine) Enhanced for “online” use (performance) Reuse pre-loaded transformations for multiple executions JIT compiler translates to Java bytecode Adaptive matching algorithm adds performance Improved modularity Supports multiple rule inheritance across different modules Supports module import across different source languages 9
Why EMFTVM? (EMF Transformation Virtual Machine) 10
EMF vs. POJOs Uses EMF Models Plain Old Java Objects (JPA) 11
EMF vs. POJOs This is what we have... (JPA) Uses Plain Old Java Objects 12
From POJOs to EMF MoDisco and EMiFy Java ModelReverse EngineerPlain Old Java Objects 13
From POJOs to EMF MoDisco and EMiFy Java Model Ecore Model EMiFy.atl 14
From POJOs to EMF MoDisco and EMiFy Ecore Model Generate Model EMF Java Objects 15
From POJOs to EMF MoDisco and EMiFy Java Model Ecore Model EMiFy.atl Reverse Engineer Generate Model EMF Java Objects 16
Using ATL 17
Using ATL 18
Using ATL Implicit tracing 19
Using ATL Implicit tracing 20
Using ATL Collaboration 21.NET developerJava developer Common: 178 lines of ATL code Import: 7283 lines of ATL code Export: 4617 lines of ATL code 4906 lines of Java import/export code
Runtime performance | 13:57:19,223 | INFO | http | be.healthconnect.emr.server.rs.ImportResource | Import partial document | 13:57:19,307 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Start full import for | 13:57:20,006 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Starting transformation | 13:57:21,099 | INFO | http | be.healthconnect.emr.server.emftvm.impl.AbstractEMFTVMTransformer | Timing data: Loading finished at 0, seconds (duration: 0, seconds) Matching finished at 0, seconds (duration: 0, seconds) Applying finished at 1, seconds (duration: 0, seconds) Post-applying finished at 1, seconds (duration: 0, seconds) Recursive stage finished at 1, seconds (duration: 0, seconds) Execution finished at 1, seconds (duration: 0, seconds) | 13:57:21,118 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 1 Patient instances | 13:57:21,155 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 3 ExternalUser instances | 13:57:21,156 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 1 HealthInsurance instances | 13:57:21,161 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 138 Contact instances | 13:57:21,282 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 33 Episode instances | 13:57:21,316 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 33 HealthApproach instances | 13:57:21,349 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 553 SubContact instances | 13:57:21,925 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 2 ContactPerson instances | 13:57:23,240 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 1 Vaccination instances | 13:57:23,255 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 134 NormalMedicationEntry instances | 13:57:23,649 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 4 MagistralMedicationEntry instances | 13:57:23,673 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 138 FreeTextPosology instances | 13:57:24,041 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 224 SOEPRule instances | 13:57:24,473 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 78 Letter instances | 13:57:25,416 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 30 LabResult instances | 13:57:25,495 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 776 LabResultEntry instances | 13:57:28,533 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 51 ParameterGroup instances | 13:57:28,657 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 72 ParameterGroupEntry instances | 13:57:28,992 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 3 SickLeave instances | 13:57:29,023 | INFO | http | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 2 Note instances | 13:57:33,992 | INFO | http | be.healthconnect.emr.server.rs.ImportResource | Finished import partial document 504 in XML loading 0,7 sec Transformation 1,1 sec Hibernate storage 12,9 sec Medium-large patient file (2277 record entries)
Conclusion We tackled a complex and common programming scenario such as import/export by breaking it up in three ways: 23 Use specialised language for translating between domain model and pivot model Use regular Java to handle file I/O and database interaction Use pivot model for import/ export => only support a single import/export format XML
24 Questions? Questions ?