250 likes | 383 Views
Everest 1.2 Update – 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
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