390. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 6/9/2017 3:45:53 PM Eastern Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

390.1 Files compared

# Location File Last Modified
1 eHealth_Exch (eHealth Exchange Enhancements) Build 3 docs & code_May_2017.zip\eHXE_Build3_2017-05-04.zip\NHIN_adapter\AdapterLIB\src\main\java\gov\va\med\nhin\adapter\datamanager\adapters MVIDataAdapter.java Wed Apr 5 01:13:54 2017 UTC
2 eHealth_Exch (eHealth Exchange Enhancements) Build 3 docs & code_May_2017.zip\eHXE_Build3_2017-05-04.zip\NHIN_adapter\AdapterLIB\src\main\java\gov\va\med\nhin\adapter\datamanager\adapters MVIDataAdapter.java Thu Jun 1 21:52:38 2017 UTC

390.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 3 646
Changed 2 4
Inserted 0 0
Removed 0 0

390.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

390.4 Active regular expressions

No regular expressions were active.

390.5 Comparison detail

  1   package go v.va.med.n hin.adapte r.datamana ger.adapte rs;
  2  
  3   import gov .va.med.nh in.adapter .utils.soa p.handler. SOAPHandle rResolver;
  4   import gov .hhs.fha.n hinc.commo n.nhinccom mon.Assert ionType;
  5  
  6   import jav ax.xml.nam espace.QNa me;
  7   import jav ax.xml.soa p.SOAPMess age;
  8   import jav ax.xml.ws. handler.Ha ndler;
  9   import jav ax.xml.ws. handler.Ha ndlerResol ver;
  10   import jav ax.xml.ws. handler.Me ssageConte xt;
  11   import jav ax.xml.ws. handler.Po rtInfo;
  12   import jav ax.xml.ws. handler.so ap.SOAPHan dler;
  13   import jav ax.xml.ws. handler.so ap.SOAPMes sageContex t;
  14  
  15   import gov .va.med.nh in.adapter .datamanag er.DataAda pter;
  16   import gov .va.med.nh in.adapter .datamanag er.DataQue ry;
  17   import gov .va.med.nh in.adapter .utils.Nul lChecker;
  18   import gov .va.med.nh in.adapter .utils.Pro pertiesCol lectionFac tory;
  19   import gov .va.oit.oe d.vaww.VAI dM;
  20   import gov .va.oit.oe d.vaww.VAI dMPort;
  21   import jav a.io.ByteA rrayOutput Stream;
  22   import sta tic java.l ang.Intege r.parseInt ;
  23   import jav a.net.URL;
  24   import jav a.text.Sim pleDateFor mat;
  25   import jav a.util.Arr ayList;
  26   import jav a.util.Dat e;
  27   import jav a.util.Lis t;
  28   import jav a.util.Pro perties;
  29   import jav a.util.Set ;
  30   import jav a.util.Tim eZone;
  31  
  32   import jav ax.xml.bin d.JAXBElem ent;
  33   import org .hl7.v3.CO CTMT090100 UV01Assign edPerson;
  34   import org .hl7.v3.CO CTMT090100 UV01Person ;
  35   import org .hl7.v3.Co mmunicatio nFunctionT ype;
  36   import org .hl7.v3.EN Explicit;
  37   import org .hl7.v3.En ExplicitFa mily;
  38   import org .hl7.v3.En ExplicitGi ven;
  39   import org .hl7.v3.En tityClassD evice;
  40   import org .hl7.v3.II ;
  41   import org .hl7.v3.MC CIMT000100 UV01Agent;
  42   import org .hl7.v3.MC CIMT000100 UV01Device ;
  43   import org .hl7.v3.MC CIMT000100 UV01Organi zation;
  44   import org .hl7.v3.MC CIMT000100 UV01Receiv er;
  45   import org .hl7.v3.MC CIMT000100 UV01Sender ;
  46   import org .hl7.v3.MF MIMT700701 UV01DataEn terer;
  47   import org .hl7.v3.Ob jectFactor y;
  48   import org .hl7.v3.QU QIMT021001 UV01DataEn terer;
  49   import org .hl7.v3.TS Explicit;
  50   import org .slf4j.Log ger;
  51   import org .slf4j.Log gerFactory ;
  52  
  53   import jav a.security .SecureRan dom;
  54  
  55   /**
  56    *
  57    * @author  
D NS    
  58    * @param  <T>
  59    */
  60   public abs tract clas s MVIDataA dapter<T>  implements  DataAdapt er<T>
  61   {
  62       privat e static f inal Logge r logger =  LoggerFac tory.getLo gger(MVIDa taAdapter. class);
  63  
  64       privat e Properti es connect ionPropert ies;
  65       protec ted String  wsdlURL;
  66       protec ted String  processin gCodeStr;
  67       protec ted String  mviSiteKe y1301;
  68       protec ted String  mviSiteKe y1305;
  69       protec ted String  mviSiteKe y1309;
  70  
  71       // MVI  timeout p roperties
  72       protec ted int mv iRetryLimi t = 5;
  73       protec ted int mv iConnectTi meout = 10 000;
  74       protec ted int mv iRequestTi meout = 30 000;
  75  
  76       public  static fi nal String  VA_OID =  "2.16.840. 1.113883.4 .349";
  77  
  78       privat e static S ecureRando m random =  null;
  79  
  80       static  {
  81           ra ndom = new  SecureRan dom();
  82       }
  83  
  84       privat e VAIdM mv iService =  null;
  85  
  86       protec ted void i nitializeP roperties( DataQuery  dataQuery)
  87       {
  88           tr y {
  89                String c onnectionF ilename =  dataQuery. getPropert y("connect ionFilenam e");
  90                String c onnection  = dataQuer y.getPrope rty("conne ction");
  91                Properti es propert iesCollect ion = Prop ertiesColl ectionFact ory.getPro pertiesCol lection(co nnectionFi lename);
  92                connecti onProperti es = (Prop erties) pr opertiesCo llection.g et(connect ion);
  93  
  94                logger.d ebug("conn  props {}  :", connec tionProper ties);
  95  
  96                wsdlURL  = connecti onProperti es.getProp erty("wsdl URL");
  97  
  98                logger.d ebug("wsdl  {} :", ws dlURL);
  99  
  100                processi ngCodeStr  = connecti onProperti es.getProp erty("proc essingCode ");
  101                mviSiteK ey1301 = c onnectionP roperties. getPropert y("mviSite Key1301");
  102                mviSiteK ey1305 = c onnectionP roperties. getPropert y("mviSite Key1305");
  103                mviSiteK ey1309 = c onnectionP roperties. getPropert y("mviSite Key1309");
  104                try {
  105                    mviR etryLimit  = parseInt (connectio nPropertie s.getPrope rty("mviRe tryLimit") );
  106                    mviC onnectTime out = pars eInt(conne ctionPrope rties.getP roperty("m viConnectT imeout"));
  107                    mviR equestTime out = pars eInt(conne ctionPrope rties.getP roperty("m viRequestT imeout"));
  108                }
  109                catch (N umberForma tException  nfe) {
  110                    logg er.error(" Could not  get MVI ti meout prop erties, pr oceeding w ith defaul ts.");
  111                }
  112  
  113                logger.d ebug("Site  keys for  mviSiteKey 1301 = {},  mviSiteKe y1305 = {}  and  mviS iteKey1309  = {} ", n ew Object[ ]{mviSiteK ey1301, mv iSiteKey13 05, mviSit eKey1309}) ;
  114           }
  115           ca tch (Excep tion ex) {
  116                throw ne w DataAdap terExcepti on(ex);
  117           }
  118       }
  119  
  120       protec ted synchr onized VAI dMPort get VAIdMPort( String mvi ServiceWSD L)
  121       {
  122           if  (mviServi ce == null ) {
  123                try {
  124                      mviService  = new VAI dM(new URL (mviServic eWSDL), ne w QName("h ttp:// URL           ", "VAIdM" ));
  125                    mviS ervice.set HandlerRes olver(new  SOAPHandle rResolver( ));
  126                }
  127                catch (E xception e ) {
  128                    thro w new Data AdapterExc eption("Er ror gettin g MVI Serv ice - VAId MPort.", e );
  129                }
  130           }
  131           re turn mviSe rvice.getV AIdMPort() ;
  132       }
  133  
  134       protec ted II cre ateMessage Id(II id)
  135       {
  136           if  (id == nu ll) {
  137                id = new  II();
  138           }
  139           id .setRoot(" 2.16.840.1 .113883.3. 933"); //  VA OID
  140  
  141           //  if partne r passed i n a messag e id then  just use i t, otherwi se
  142           //  generate  one.
  143           if  (id.getEx tension()  == null ||  id.getExt ension().t rim().isEm pty()) {
  144                id.setEx tension("M CID-" + cr eateCreati onTimeStri ng() + "-"  + random. nextLong() );
  145           }
  146  
  147           lo gger.debug ("message  id {} :",  id);
  148  
  149           re turn id;
  150       }
  151  
  152       privat e String c reateCreat ionTimeStr ing()
  153       {
  154           //  Create ti mestamp
  155           St ring times tamp = "";
  156           tr y {
  157                Date now  = new Dat e();
  158                SimpleDa teFormat f ormatter =  new Simpl eDateForma t("yyyyMMd dHHmmss");
  159                formatte r.setTimeZ one(TimeZo ne.getTime Zone("UTC" ));
  160                timestam p = format ter.format (now);
  161  
  162                logger.d ebug("time stamp {} : ", timesta mp);
  163           }
  164           ca tch (Excep tion e) {
  165                logger.e rror("erro r message  ", e);
  166                throw ne w DataAdap terExcepti on("Except ion when c reating XM LGregorian  Date", e) ;
  167           }
  168  
  169           re turn times tamp;
  170       }
  171  
  172       protec ted TSExpl icit creat eCreationT ime()
  173       {
  174           //  Set up th e creation  time stri ng
  175           TS Explicit c reationTim e = new TS Explicit() ;
  176           cr eationTime .setValue( createCrea tionTimeSt ring());
  177  
  178           re turn creat ionTime;
  179       }
  180  
  181       protec ted MCCIMT 000100UV01 Receiver c reateRecei ver()
  182       {
  183           //  Set the r eceiver
  184           MC CIMT000100 UV01Receiv er receive r = new MC CIMT000100 UV01Receiv er();
  185           re ceiver.set TypeCode(C ommunicati onFunction Type.RCV);
  186  
  187           MC CIMT000100 UV01Device  receiverD evice = ne w MCCIMT00 0100UV01De vice();
  188           re ceiverDevi ce.setDete rminerCode ("INSTANCE "); // HL7 Constants. RECEIVER_D ETERMINER_ CODE
  189           re ceiverDevi ce.setClas sCode(Enti tyClassDev ice.DEV);
  190  
  191           II  receiverI d = new II ();
  192           re ceiverId.s etRoot("2. 16.840.1.1 13883.3.36 4"); // VA  OID
  193           re ceiverDevi ce.getId() .add(recei verId);
  194           re ceiver.set Device(rec eiverDevic e);
  195  
  196           re turn recei ver;
  197       }
  198  
  199       protec ted MCCIMT 000100UV01 Sender cre ateSender( String mvi SiteKey, S tring home CommunityO ID, String  facilityN umber)
  200       {
  201           Ob jectFactor y objFacto ry = new O bjectFacto ry();
  202  
  203           //  added tri m since ha d issue wi th extrane ous charac ter in Ada pter DB
  204           //  facility  table.
  205           fa cilityNumb er = facil ityNumber. trim();
  206           //  perhaps t he VA's re cord in Ad apter DB f acility ta ble should  use
  207           //  "200NH".. the NHIE/E xchange's  site key.. .but for n ow just ma p here.
  208           fa cilityNumb er = (faci lityNumber .equals("V A")) ? mvi SiteKey :  facilityNu mber;
  209  
  210           //  Set the s ender
  211           MC CIMT000100 UV01Sender  sender =  new MCCIMT 000100UV01 Sender();
  212           se nder.setTy peCode(Com munication FunctionTy pe.SND);
  213  
  214           MC CIMT000100 UV01Device  senderDev ice = new  MCCIMT0001 00UV01Devi ce();
  215           se nderDevice .setDeterm inerCode(" INSTANCE") ; // HL7Co nstants.SE NDER_DETER MINER_CODE
  216           se nderDevice .setClassC ode(Entity ClassDevic e.DEV);
  217  
  218           II  senderDev iceId = ne w II();
  219           se nderDevice Id.setRoot (VA_OID);
  220           //  senderDev iceId.setE xtension(m viSiteKey) ; // SITEK EY_OBTAINE D_FROM_MVI
  221           se nderDevice Id.setExte nsion(faci lityNumber ); // Per  feedback f rom
  222           //  MVI/Danny  Reed, we
  223           //  should se nd the
  224           //  partner's
  225           //  station#/ facility
  226           //  number... rather tha n
  227           //  the Excha nge's site
  228           //  key.
  229           se nderDevice .getId().a dd(senderD eviceId);
  230  
  231           //  Setup Sen der -> Dev ice -> Age nt
  232           MC CIMT000100 UV01Agent  senderDevi ceAgent =  new MCCIMT 000100UV01 Agent();
  233           se nderDevice Agent.getC lassCode() .add("AGNT ");
  234           MC CIMT000100 UV01Organi zation rep resentedOr g = new MC CIMT000100 UV01Organi zation();
  235           re presentedO rg.setClas sCode("ORG ");
  236           re presentedO rg.setDete rminerCode ("INSTANCE ");
  237  
  238           II  represent edOrgId =  new II();
  239           re presentedO rgId.setRo ot(homeCom munityOID) ;
  240           re presentedO rgId.setEx tension(fa cilityNumb er);
  241           re presentedO rg.getId() .add(repre sentedOrgI d);
  242  
  243           JA XBElement  jaxbElemen tAgent = o bjFactory. createMCCI MT000100UV 01DeviceAs Agent(send erDeviceAg ent);
  244           JA XBElement  jaxbElemen tRepresent edOrg = ob jFactory.c reateMCCIM T000100UV0 1AgentRepr esentedOrg anization( represente dOrg);
  245  
  246           se nderDevice Agent.setR epresented Organizati on(jaxbEle mentRepres entedOrg);
  247           se nderDevice .setAsAgen t(jaxbElem entAgent);
  248           se nder.setDe vice(sende rDevice);
  249  
  250           re turn sende r;
  251       }
  252  
  253       protec ted MFMIMT 700701UV01 DataEntere r createDa taEnterer1 (Assertion Type asser tion)
  254       {
  255           MF MIMT700701 UV01DataEn terer data Enterer =  new MFMIMT 700701UV01 DataEntere r();
  256           th is.createD ataEnterer (assertion , dataEnte rer);
  257           re turn dataE nterer;
  258       }
  259  
  260       protec ted QUQIMT 021001UV01 DataEntere r createDa taEnterer2 (Assertion Type asser tion)
  261       {
  262           QU QIMT021001 UV01DataEn terer data Enterer =  new QUQIMT 021001UV01 DataEntere r();
  263           th is.createD ataEnterer (assertion , dataEnte rer);
  264           re turn dataE nterer;
  265       }
  266  
  267       privat e void cre ateDataEnt erer(Asser tionType a ssertion,  Object dat aEntererOb j)
  268       {
  269           Ob jectFactor y objFacto ry = new O bjectFacto ry();
  270  
  271           CO CTMT090100 UV01Assign edPerson a ssignedPer son = new  COCTMT0901 00UV01Assi gnedPerson ();
  272           as signedPers on.setClas sCode("ASS IGNED");
  273           II  assignedP ersonId =  new II();
  274           as signedPers onId.setRo ot("2.16.8 40.1.11388 3.3.2017") ;
  275           as signedPers onId.setEx tension("1 22");
  276           as signedPers on.getId() .add(assig nedPersonI d);
  277  
  278           CO CTMT090100 UV01Person  person =  new COCTMT 090100UV01 Person();
  279           pe rson.setDe terminerCo de("INSTAN CE");
  280           pe rson.getCl assCode(). add("PSN") ;
  281           EN Explicit n ame = new  ENExplicit ();
  282  
  283           St ring famil yNameStr =  null;
  284           if  (assertio n != null  && asserti on.getUser Info() !=  null && as sertion.ge tUserInfo( ).getPerso nName() !=  null && N ullChecker .isNotNull OrEmpty(as sertion.ge tUserInfo( ).getPerso nName().ge tFamilyNam e())) {
  285                familyNa meStr = as sertion.ge tUserInfo( ).getPerso nName().ge tFamilyNam e();
  286           }
  287           el se {
  288                familyNa meStr = "N one Provid ed";
  289           }
  290           En ExplicitFa mily famil yName = ne w EnExplic itFamily() ;
  291           fa milyName.s etContent( familyName Str);
  292           JA XBElement  jaxbFamily Name = obj Factory.cr eateENExpl icitFamily (familyNam e);
  293  
  294           St ring given NameStr =  null;
  295           if  (assertio n != null  && asserti on.getUser Info() !=  null && as sertion.ge tUserInfo( ).getPerso nName() !=  null && N ullChecker .isNotNull OrEmpty(as sertion.ge tUserInfo( ).getPerso nName().ge tGivenName ())) {
  296                givenNam eStr = ass ertion.get UserInfo() .getPerson Name().get GivenName( );
  297           }
  298           el se {
  299                givenNam eStr = "No ne Provide d";
  300           }
  301  
  302           En ExplicitGi ven givenN ame = new  EnExplicit Given();
  303           gi venName.se tContent(g ivenNameSt r);
  304           JA XBElement  jaxbGivenN ame = objF actory.cre ateENExpli citGiven(g ivenName);
  305  
  306           na me.getCont ent().add( jaxbGivenN ame);
  307           na me.getCont ent().add( jaxbFamily Name);
  308           pe rson.getNa me().add(n ame);
  309           JA XBElement  jaxbElemen tPerson =  objFactory .createCOC TMT090100U V01Assigne dPersonAss ignedPerso n(person);
  310  
  311           as signedPers on.setAssi gnedPerson (jaxbEleme ntPerson);
  312  
  313           if  (dataEnte rerObj ins tanceof MF MIMT700701 UV01DataEn terer) {
  314                ((MFMIMT 700701UV01 DataEntere r) dataEnt ererObj).s etContextC ontrolCode ("AP");
  315                ((MFMIMT 700701UV01 DataEntere r) dataEnt ererObj).g etTypeCode ().add("EN T");
  316                ((MFMIMT 700701UV01 DataEntere r) dataEnt ererObj).s etAssigned Person(ass ignedPerso n);
  317           }
  318           el se if (dat aEntererOb j instance of QUQIMT0 21001UV01D ataEnterer ) {
  319                ((QUQIMT 021001UV01 DataEntere r) dataEnt ererObj).s etContextC ontrolCode ("AP");
  320                ((QUQIMT 021001UV01 DataEntere r) dataEnt ererObj).g etTypeCode ().add("EN T");
  321                ((QUQIMT 021001UV01 DataEntere r) dataEnt ererObj).s etAssigned Person(ass ignedPerso n);
  322           }
  323  
  324       }
  325   }