Using ATL/EMFTVM for import/export of medical data

Post on 31-Dec-2015

31 views 3 download

description

Using ATL/EMFTVM for import/export of medical data. 8-Oct-2014 , Dennis Wagelaar. Import/export a common programming scenario. SuMEHR. SuMEHR. GPSMF. GPSMF. PMF. PMF. Corilus XML. Corilus XML. Corilus XML as pivot model. SuMEHR. GPSMF. Corilus XML. PMF. Corilus XML as pivot model. - PowerPoint PPT Presentation

Transcript of Using ATL/EMFTVM for import/export of medical data

Using ATL/EMFTVM for import/export of medical data

8-Oct-2014, Dennis Wagelaar

2

Import/exporta 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/exportsimplified

Corilus XML

Corilus XML

7

Why ATL?(ATL Transformation Language)

Domain-specific language for

transformationMore 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)

10https://wiki.eclipse.org/ATL/EMFTVM

EMF vs. POJOs

Uses Uses

EMF Models Plain Old Java Objects

(JPA)

11

EMF vs. POJOsThis is what we have...

(JPA)

Uses

Plain Old Java Objects

12

From POJOs to EMFMoDisco and EMiFy

Java Model Reverse Engineer Plain Old Java Objects

13

From POJOs to EMFMoDisco and EMiFy

Java Model

Ecore Model

EMiFy.atl

14

From POJOs to EMFMoDisco and EMiFy

Ecore Model

Generate Model

EMF Java Objects

15

From POJOs to EMFMoDisco and EMiFy

Java Model

Ecore Model

EMiFy.atl

Reverse Engineer

Generate Model

EMF Java Objects

16

Using ATL

17

Using ATL

18

Using ATLImplicit tracing

19

Using ATLImplicit tracing

20

Using ATLCollaboration

21

.NET developer Java developer

Java developerJava developer

Common: 178 lines of ATL codeImport: 7283 lines of ATL codeExport: 4617 lines of ATL code

4906 lines of Java import/export code

Runtime performance

22

03-10-2014 | 13:57:19,223 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.rs.ImportResource | Import partial document 50403-10-2014 | 13:57:19,307 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Start full import for ...03-10-2014 | 13:57:20,006 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Starting transformation...03-10-2014 | 13:57:21,099 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.emftvm.impl.AbstractEMFTVMTransformer | Timing data: Loading finished at 0,000036 seconds (duration: 0,000036 seconds) Matching finished at 0,285989 seconds (duration: 0,285953 seconds) Applying finished at 1,091511 seconds (duration: 0,805522 seconds) Post-applying finished at 1,091712 seconds (duration: 0,000201 seconds) Recursive stage finished at 1,091751 seconds (duration: 0,000039 seconds) Execution finished at 1,091915 seconds (duration: 0,000203 seconds)

03-10-2014 | 13:57:21,118 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 1 Patient instances03-10-2014 | 13:57:21,155 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 3 ExternalUser instances03-10-2014 | 13:57:21,156 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 1 HealthInsurance instances03-10-2014 | 13:57:21,161 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 138 Contact instances03-10-2014 | 13:57:21,282 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 33 Episode instances03-10-2014 | 13:57:21,316 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 33 HealthApproach instances03-10-2014 | 13:57:21,349 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 553 SubContact instances03-10-2014 | 13:57:21,925 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 2 ContactPerson instances03-10-2014 | 13:57:23,240 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 1 Vaccination instances03-10-2014 | 13:57:23,255 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 134 NormalMedicationEntry instances03-10-2014 | 13:57:23,649 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 4 MagistralMedicationEntry instances03-10-2014 | 13:57:23,673 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 138 FreeTextPosology instances03-10-2014 | 13:57:24,041 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 224 SOEPRule instances03-10-2014 | 13:57:24,473 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 78 Letter instances03-10-2014 | 13:57:25,416 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 30 LabResult instances03-10-2014 | 13:57:25,495 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 776 LabResultEntry instances03-10-2014 | 13:57:28,533 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 51 ParameterGroup instances03-10-2014 | 13:57:28,657 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 72 ParameterGroupEntry instances03-10-2014 | 13:57:28,992 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 3 SickLeave instances03-10-2014 | 13:57:29,023 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.services.impl.CorilusXMLImportServiceImpl | Processing 2 Note instances03-10-2014 | 13:57:33,992 | INFO | http-0.0.0.0-8080-4 | be.healthconnect.emr.server.rs.ImportResource | Finished import partial document 504 in 14.768414891

XML

load

ing

0,7 sec Tr

ansf

orm

ation

1,1 sec

Hib

erna

te st

orag

e

12,9 sec

Medium-large patient file (2277 record entries)

ConclusionWe 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?

http://www.healthconnect.be/http://www.corilus.be/http://www.careconnect.be/

Questions

?