250 likes | 390 Vues
The January 2013 update of Everest introduces significant advancements across its .NET, Java, and Compact editions, enhancing integration with WCF and providing better support for mobile applications. Highlighted features include tighter WCF integration, detailed validation errors for data types, and an enhanced documentation framework. The update also introduces a separate Java codebase, optimizing resource management for mobile platforms, including Windows Phone. Everest remains an essential open-source HL7v3 toolkit that revolutionizes development in health informatics.
E N D
Everest 1.2Update – Progress – New Features Justin Fyfe Duane Bender January 2013 WGM
Agenda • Overview • News • New Features • .NET Version • Silverlight and Windows Phone 7/8 Version • Java Version • Roadmap
A (brief) History • Everest: • Started in 2008 • An HL7v3 toolkit for writing Windows applications • Code generated from MIF files • Traditionally, focused on Microsoft .NET platform • Tight integration with WCF • Integrates with Visual Studio • Open Source (Apache 2)
News : Everest Book • Complete Development guide • Covers 1.0 • eBook and Hardcover • Free for contributors
News : Public SVN • Everest and jEverest have publicly accessible SVN repositories • Readonly anonymous access • Patches can be submitted by anyone to justin.fyfe1@mohawkcollege.ca • Serious contributors can be given commit access
New Features .NET Edition
Better integration with WCF • Better support for accessing SOAP headers from messages receiveResult.ResponseHeaders = newSystem.ServiceModel.Channels.MessageHeaders(receiveResult.Headers.MessageVersion);receiveResult.ResponseHeaders.Add(MessageHeader.CreateHeader("myHeader", "urn:my-ns:com", "Value"));
Better Integration with WCF • Creation of a custom binding provider for existing WCF services • EverestSerializerFormat attribute replaces standard XmlSerializerFormat attribute on service contract [EverestSerializerFormat(Formatter = typeof(XmlIts1Formatter), GraphAide= typeof(DatatypeFormatter), ValidateConformance= false)][ServiceContract(Namespace="urn:hl7-org:v3")]publicinterfaceIServiceContract{ ///<summary> /// Do something ///</summary> [OperationContract(Action="*")]IGraphableAnything(IGraphable request);}
Other Features • Detailed validation errors/warnings for data types • Over 60 defects were corrected • Enhanced documentation on data types classes • Formatter performance enhancements
New Features Everest Compact Version
Compact Edition? • Optimized for low resource execution environments • Phones (Windows Phone 7/8) • Windows RT Devices (ARM based Windows 8) • Silverlight (Browser based execution)
Supported Features • Full data types support (including behaviors) • Serialization support for • XML ITS1 and Data Types R1 (R2 on roadmap) • Tested with NE2008, NE2010, and CA standards • Connectivity • WCF (SOAP 1.1/1.2) over http/https • Limitations • Reflection formatter only • Can use a pre-generation tool to make this faster
Why? • Mobile apps can benefit from integration using HL7v3 • FHIR is not yet ready • HL7v3 registries/repositories have lots of information that can be leveraged on mobile • PIX/PDQ HL7v3 can be useful in mobile apps • Especially when integrating with XDS on mobile platforms • HL7v3 is preferable over HL7v2.x on mobile platforms as WS-* can easily be implemented on mobile platforms using WCF. • A debate between myself and a coworker in our lab … an “I’ll show you” project
New Features Java version
The Java Version • Finally, after 3 years • Separate code base from .NET version • Leverages Java patterns • Code generated from MIF from GPMR • Tested with NE2008, NE2010, CA • Technical challenges with Java • Lack of reified generics • No closures / lambda expressions
Adaptations from .NET Java .NET INT ten = new INT(10); for(INT i = new INT(0); i.compareTo(ten) < 0; i= i.increment()) System.out.println(i.toString()); for (INT i = 0; i < 10; i++) Console.WriteLine(i); ST str = new ST("Justin"); TS today = TS.now(); PQ day = new PQ(BigDecimal.ONE, "d"), hours = new PQ(BigDecimal.valueOf(3), "h"); PQ dayLessHours = day.subtract(hours); INT rad = new INT(3); REAL pi = new REAL(Math.PI); REAL area = pi.multiply(new REAL(Math.pow(rad.toDouble(), 2))); STstr = "Justin"; TS today = DateTime.Today; PQ day = "1 d", hours = “3 h"; PQdayLessHours = day - hours; INTrad = 3; REAL pi = Math.PI; REAL area = pi * Math.Pow((double)rad, 2); TS now = TS.now(); System.out.println(now.getValue()); PQ day = new PQ(BigDecimal.ONE, "d"); TS yesterday = now.subtract(day); System.out.println(yesterday.getValue()); TS now = DateTime.Now; Console.WriteLine(now.Value); TS yesterday = now - "1 d"; Console.WriteLine(yesterday.Value);
Constructing an Instance // Quickly create an instance MCCI_IN000002CA instance = new MCCI_IN000002CA( new II(UUID.randomUUID()), TS.now(), ResponseMode.Immediate, MCCI_IN000002CA.defaultInteractionId(), MCCI_IN000002CA.defaultProfileId(), ProcessingID.Production, AcknowledgementCondition.Never ); // Format try(XmlIts1Formatter fmtr = new XmlIts1Formatter()) { // Add a helper formatter for R1 fmtr.getGraphAides().add(newDatatypeFormatter()); ByteArrayOutputStreamoutStream = newByteArrayOutputStream(); IFormatterGraphResultgraphResult = fmtr.graph(outStream, instance); // Output validation errors for(IResultDetail detail : graphResult.getDetails()) System.out.printf("%s : %s", detail.getType(), detail.getMessage()); } catch(Exception e) { e.printStackTrace(); }
Sending/Receiving v3 • Everest integrates with Spring one of two ways: • Using SpringClientConnector • Similar to the WcfClientConnector in .NET • Using EverestMarshaller / EverestUnmarshaller in AppContext xml configuration
Feature Comparison ǂ - Not fully ported
Version 1.2 “Todo” List • Unit Testing (Jan – Feb 2013) • Currently one student in charge of porting unit tests (help is appreciated) • Spring Connector • Currently needs testing and additional development work. • Documentation & Clean-up
Roadmap • If interest continues development will continue on Everest • 1.4 (Q1 2014) • Data Types R2 for Java and Compact version • CDA/XDS Connectors (experimentation required) • MEX support (for WCF services) and WSDL import functionality (map XMLSerializer to Everest classes) • JSON Formatter • Android version of jEverest
More Info • http://everest.marc-hi.ca • SVN: • https://fisheye.marc-hi.ca/svn/Everest • https://fisheye.marc-hi.ca/svn/jEverest • UN: Guest