Thursday, February 23, 2012

Everest 1.0 Is Here!

It has been a long journey, but the Everest Framework 1.0 release is now available at the MARC-HI Technology Exchange (http://everest.marc-hi.ca). There are a multitude of new features and usability enhancements include:

  • Support for NE2010, NE2011 and CDAr2 (Though only base versions of NE2010 and CDAr2 are included)
  • Formatters available for Data Types R2 (ISO21090:2009)
  • A new GPMR Wizard which makes turning MIFs into DLLs much easier
  • Changes in the way that GraphAides are added to formatters
  • Improvements in formatter error detail reporting

The next version on our roadmap is 1.5 slated for a 2013 release. Features so far include:

  • A JSON ITS Formatter
  • A REST based connector
  • Improvements to way that IListenWaitConnector and IListenWaitRespondConnector implementations raise notifications of messages received
  • JavaScript renderer for GPMR (output JS files that can be used to construct JSON objects using the JSON ITS)

The whole Everest team hopes that you enjoy the new version of Everest. Please feel free to leave comments on our forums (http://te.marc-hi.ca/forums) or submit any issues you encounter.

Thursday, December 8, 2011

Collection Shortcuts in Everest 1.0


The goal of the Everest framework data types is to provide functionality that allows developers to easily construct and interact with the HL7v3 data types. In previous versions of the Everest Framework, creating collections could be difficult. Consider the AD data type which is nothing more than a collection of ADXP components. In previous versions of Everest, creating this structure would look something like this:

AD homeAddress = new AD(
  new SET<CS<PostalAddressUse>>()
  {
     PostalAddressUse.Alphabetic,
     PostalAddressUse.Direct
  },
  new ADXP[] {
     new ADXP("123 Main Street", AddressPartType.StreetAddressLine),
     new ADXP("West", AddressPartType.Direction),
     new ADXP("Hamilton", AddressPartType.City),
     new ADXP("Ontario", AddressPartType.State),
     new ADXP("Canada", AddressPartType.Country)
  }
);

This code can be quite large and is difficult to track if not styled properly (indentation is the key here). So, to make the construction of sets a little easier, we've added static "creator" methods on each of the collection data types. They are used as follows:

AD homeAddress = AD.CreateAD(
   SET<PostalAddressUse>.CreateSET(
      PostalAddressUse.Alphabetic,
      PostalAddressUse.Direct
   ),
   new ADXP("123 Main Street", AddressPartType.City),
   new ADXP("West", AddressPartType.Direction),
   new ADXP("Hamilton", AddressPartType.City),
   new ADXP("Ontario", AddressPartType.State),
   new ADXP("Canada", AddressPartType.Country)
);

The benefit of this shortcut is illustrated better with more complex sets such as SXPR and QSET. The following snippet represents the construction of an SXPR that represents numbers {1..10}, intersected with the result of a union of numbers {3..5} and {7..9}.

SXPR<INT> result = new SXPR<INT>()
{
   new IVL<INT>(1, 10),
   new SXPR<INT>() {
       Operator = SetOperator.Intersect,
       Terms = new LIST<SXCM<INT>>() {
          new IVL<INT>(3, 5),
          new IVL<INT>(7, 9)
          {
              Operator = SetOperator.Inclusive
          }
       }
   }
};

Using the new constructor which is a shortcut, the following expression can be used:

SXPR<INT> result = new SXPR<INT>(
   new IVL<INT>(1, 10),
   new SXPR<INT>(
       new IVL<INT>(3, 5),
       new IVL<INT>(7, 9)
       {
           Operator = SetOperator.Inclusive
       }
   )
   {
      Operator = SetOperator.Intersect
   }
);

These new shortcut methods are intended to assist developers even more than previous attempts at the Data Types implementation and are one of the many improvements in the Everest 1.0 data types library.