70. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 4/5/2017 4:21:47 PM Central 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.

70.1 Files compared

# Location File Last Modified
1 C:\working_scrub\Unredacted\eHX Code Base\eHX_Bld2_Source Code_CIF_2017-02-14\NHIN_adapter\AdapterLIB\src\main\java\gov\va\med\nhin\adapter\datamanager\adapters MVIDataAdapter.java Fri Feb 10 15:41:44 2017 UTC
2 eHX-CIF.zip\eHX-CIF\eHX Code Base\eHX_Bld2_Source Code_CIF_2017-02-14\NHIN_adapter\AdapterLIB\src\main\java\gov\va\med\nhin\adapter\datamanager\adapters MVIDataAdapter.java Mon Apr 3 14:25:20 2017 UTC

70.2 Comparison summary

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

70.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

70.4 Active regular expressions

No regular expressions were active.

70.5 Comparison detail

  1   package go v.va.med.n hin.adapte r.datamana ger.adapte rs;
  2  
  3   import gov .hhs.fha.n hinc.commo n.nhinccom mon.Assert ionType;
  4  
  5   import jav ax.xml.nam espace.QNa me;
  6   import jav ax.xml.soa p.SOAPMess age;
  7   import jav ax.xml.ws. handler.Ha ndler;
  8   import jav ax.xml.ws. handler.Ha ndlerResol ver;
  9   import jav ax.xml.ws. handler.Me ssageConte xt;
  10   import jav ax.xml.ws. handler.Po rtInfo;
  11   import jav ax.xml.ws. handler.so ap.SOAPHan dler;
  12   import jav ax.xml.ws. handler.so ap.SOAPMes sageContex t;
  13  
  14   import gov .va.med.nh in.adapter .datamanag er.DataAda pter;
  15   import gov .va.med.nh in.adapter .datamanag er.DataQue ry;
  16   import gov .va.med.nh in.adapter .utils.Nul lChecker;
  17   import gov .va.med.nh in.adapter .utils.Pro pertiesCol lectionFac tory;
  18   import gov .va.oit.oe d.vaww.VAI dM;
  19   import gov .va.oit.oe d.vaww.VAI dMPort;
  20   import jav a.io.ByteA rrayOutput Stream;
  21   import sta tic java.l ang.Intege r.parseInt ;
  22   import jav a.net.URL;
  23   import jav a.text.Sim pleDateFor mat;
  24   import jav a.util.Arr ayList;
  25   import jav a.util.Dat e;
  26   import jav a.util.Lis t;
  27   import jav a.util.Pro perties;
  28   import jav a.util.Set ;
  29   import jav a.util.Tim eZone;
  30  
  31   import jav ax.xml.bin d.JAXBElem ent;
  32   import org .hl7.v3.CO CTMT090100 UV01Assign edPerson;
  33   import org .hl7.v3.CO CTMT090100 UV01Person ;
  34   import org .hl7.v3.Co mmunicatio nFunctionT ype;
  35   import org .hl7.v3.EN Explicit;
  36   import org .hl7.v3.En ExplicitFa mily;
  37   import org .hl7.v3.En ExplicitGi ven;
  38   import org .hl7.v3.En tityClassD evice;
  39   import org .hl7.v3.II ;
  40   import org .hl7.v3.MC CIMT000100 UV01Agent;
  41   import org .hl7.v3.MC CIMT000100 UV01Device ;
  42   import org .hl7.v3.MC CIMT000100 UV01Organi zation;
  43   import org .hl7.v3.MC CIMT000100 UV01Receiv er;
  44   import org .hl7.v3.MC CIMT000100 UV01Sender ;
  45   import org .hl7.v3.MF MIMT700701 UV01DataEn terer;
  46   import org .hl7.v3.Ob jectFactor y;
  47   import org .hl7.v3.QU QIMT021001 UV01DataEn terer;
  48   import org .hl7.v3.TS Explicit;
  49   import org .slf4j.Log ger;
  50   import org .slf4j.Log gerFactory ;
  51  
  52   import jav a.security .SecureRan dom;
  53  
  54   /**
  55    *
  56    * @author   DN S      VAZQUD
  57    */
  58   public abs tract clas s MVIDataA dapter imp lements Da taAdapter
  59   {
  60           pr ivate stat ic final L ogger logg er = Logge rFactory.g etLogger(M VIDataAdap ter.class) ;
  61  
  62           pr ivate Prop erties con nectionPro perties;
  63           pr otected St ring wsdlU RL;
  64           pr otected St ring proce ssingCodeS tr;
  65           pr otected St ring mviSi teKey1301;
  66           pr otected St ring mviSi teKey1305;
  67           pr otected St ring mviSi teKey1309;
  68  
  69           //  MVI timeo ut propert ies
  70           pr otected in t mviRetry Limit = 5;
  71           pr otected in t mviConne ctTimeout  = 10000;
  72           pr otected in t mviReque stTimeout  = 30000;
  73  
  74           pu blic stati c final St ring VA_OI D = "2.16. 840.1.1138 83.4.349";
  75  
  76           pr ivate stat ic SecureR andom rand om = null;
  77  
  78           st atic
  79           {
  80                    rand om = new S ecureRando m();
  81           }
  82  
  83           pr ivate VAId M mviServi ce = null;
  84  
  85           pr otected vo id initial izePropert ies(DataQu ery dataQu ery)
  86           {
  87                    try
  88                    {
  89                             String  connectio nFilename  = dataQuer y.getPrope rty("conne ctionFilen ame");
  90                             String  connectio n = dataQu ery.getPro perty("con nection");
  91                             Proper ties prope rtiesColle ction = Pr opertiesCo llectionFa ctory.getP ropertiesC ollection( connection Filename);
  92                             connec tionProper ties = (Pr operties)  properties Collection .get(conne ction);
  93  
  94                             logger .debug("co nn props { } :", conn ectionProp erties);
  95  
  96                             wsdlUR L = connec tionProper ties.getPr operty("ws dlURL");
  97  
  98                             logger .debug("ws dl {} :",  wsdlURL);
  99  
  100                             proces singCodeSt r = connec tionProper ties.getPr operty("pr ocessingCo de");
  101                             mviSit eKey1301 =  connectio nPropertie s.getPrope rty("mviSi teKey1301" );
  102                             mviSit eKey1305 =  connectio nPropertie s.getPrope rty("mviSi teKey1305" );
  103                             mviSit eKey1309 =  connectio nPropertie s.getPrope rty("mviSi teKey1309" );
  104                             try
  105                             {
  106                                      mviRetry Limit = pa rseInt(con nectionPro perties.ge tProperty( "mviRetryL imit"));
  107                                      mviConne ctTimeout  = parseInt (connectio nPropertie s.getPrope rty("mviCo nnectTimeo ut"));
  108                                      mviReque stTimeout  = parseInt (connectio nPropertie s.getPrope rty("mviRe questTimeo ut"));
  109                             }
  110                             catch( NumberForm atExceptio n nfe)
  111                             {
  112                                      logger.e rror("Coul d not get  MVI timeou t properti es, procee ding with  defaults." );
  113                             }
  114                             
  115                             logger .debug("Si te keys fo r mviSiteK ey1301 = { }, mviSite Key1305 =  {} and  mv iSiteKey13 09 = {} ",  new Objec t[]{mviSit eKey1301,  mviSiteKey 1305 , mvi SiteKey130 9});
  116                    }
  117                    catc h(Exceptio n ex)
  118                    {
  119                             throw  new DataAd apterExcep tion(ex);
  120                    }
  121           }
  122  
  123           pr otected sy nchronized  VAIdMPort  getVAIdMP ort(String  mviServic eWSDL)
  124           {
  125                    if(m viService  == null)
  126                    {
  127                             try
  128                             {
  129                                       mviService  = new VAI dM(new URL (mviServic eWSDL), ne w QName("h ttp:// URL           . DNS     ", "VAIdM" ));
  130                                      mviServi ce.setHand lerResolve r(new MVIH andlerReso lver());
  131                             }
  132                             catch( Exception  e)
  133                             {
  134                                      throw ne w DataAdap terExcepti on("Error  getting MV I Service  - VAIdMPor t.", e);
  135                             }
  136                    }
  137                    retu rn mviServ ice.getVAI dMPort();
  138           }
  139  
  140           pr otected II  createMes sageId(II  id)
  141           {
  142                    if(i d == null)
  143                    {
  144                             id = n ew II();
  145                    }
  146                    id.s etRoot("2. 16.840.1.1 13883.3.93 3"); // VA  OID
  147  
  148                    // i f partner  passed in  a message  id then ju st use it,  otherwise
  149                    // g enerate on e.
  150                    if(i d.getExten sion() ==  null || id .getExtens ion().trim ().isEmpty ())
  151                    {
  152                             id.set Extension( "MCID-" +  createCrea tionTimeSt ring() + " -" + rando m.nextLong ());
  153                    }
  154                    
  155                    logg er.debug(" message id  {} :", id );
  156                    
  157                    retu rn id;
  158           }
  159  
  160           pr ivate Stri ng createC reationTim eString()
  161           {
  162                    // C reate time stamp
  163                    Stri ng timesta mp = "";
  164                    try
  165                    {
  166                             Date n ow = new D ate();
  167                             Simple DateFormat  formatter  = new Sim pleDateFor mat("yyyyM MddHHmmss" );
  168                             format ter.setTim eZone(Time Zone.getTi meZone("UT C"));
  169                             timest amp = form atter.form at(now);
  170                             
  171                             logger .debug("ti mestamp {}  :", times tamp);
  172                    }
  173                    catc h(Exceptio n e)
  174                    {
  175                             logger .error("er ror messag e ", e);                
  176                    thro w new Data AdapterExc eption("Ex ception wh en creatin g XMLGrego rian Date" , e);
  177                    }
  178  
  179                    retu rn timesta mp;
  180           }
  181  
  182           pr otected TS Explicit c reateCreat ionTime()
  183           {
  184                    // S et up the  creation t ime string
  185                    TSEx plicit cre ationTime  = new TSEx plicit();
  186                    crea tionTime.s etValue(cr eateCreati onTimeStri ng());
  187  
  188                    retu rn creatio nTime;
  189           }
  190  
  191           pr otected MC CIMT000100 UV01Receiv er createR eceiver()
  192           {
  193                    // S et the rec eiver
  194                    MCCI MT000100UV 01Receiver  receiver  = new MCCI MT000100UV 01Receiver ();
  195                    rece iver.setTy peCode(Com munication FunctionTy pe.RCV);
  196  
  197                    MCCI MT000100UV 01Device r eceiverDev ice = new  MCCIMT0001 00UV01Devi ce();
  198                    rece iverDevice .setDeterm inerCode(" INSTANCE") ; // HL7Co nstants.RE CEIVER_DET ERMINER_CO DE
  199                    rece iverDevice .setClassC ode(Entity ClassDevic e.DEV);
  200  
  201                    II r eceiverId  = new II() ;
  202                    rece iverId.set Root("2.16 .840.1.113 883.3.364" ); // VA O ID
  203                    rece iverDevice .getId().a dd(receive rId);
  204                    rece iver.setDe vice(recei verDevice) ;
  205  
  206                    retu rn receive r;
  207           }
  208  
  209           pr otected MC CIMT000100 UV01Sender  createSen der(String  mviSiteKe y, String  homeCommun ityOID, St ring facil ityNumber)
  210           {
  211                    Obje ctFactory  objFactory  = new Obj ectFactory ();
  212  
  213                    // a dded trim  since had  issue with  extraneou s characte r in Adapt er DB
  214                    // f acility ta ble.
  215                    faci lityNumber  = facilit yNumber.tr im();
  216                    // p erhaps the  VA's reco rd in Adap ter DB fac ility tabl e should u se
  217                    // " 200NH"..th e NHIE/Exc hange's si te key...b ut for now  just map  here.
  218                    faci lityNumber  = (facili tyNumber.e quals("VA" )) ? mviSi teKey : fa cilityNumb er;
  219  
  220                    // S et the sen der
  221                    MCCI MT000100UV 01Sender s ender = ne w MCCIMT00 0100UV01Se nder();
  222                    send er.setType Code(Commu nicationFu nctionType .SND);
  223  
  224                    MCCI MT000100UV 01Device s enderDevic e = new MC CIMT000100 UV01Device ();
  225                    send erDevice.s etDetermin erCode("IN STANCE");  // HL7Cons tants.SEND ER_DETERMI NER_CODE
  226                    send erDevice.s etClassCod e(EntityCl assDevice. DEV);
  227  
  228                    II s enderDevic eId = new  II();
  229                    send erDeviceId .setRoot(V A_OID);
  230                    // s enderDevic eId.setExt ension(mvi SiteKey);  // SITEKEY _OBTAINED_ FROM_MVI
  231                    send erDeviceId .setExtens ion(facili tyNumber);  // Per fe edback fro m
  232                                                                                                                              // MVI/D anny Reed,  we
  233                                                                                                                              // shoul d send the
  234                                                                                                                              // partn er's
  235                                                                                                                              // stati on#/facili ty
  236                                                                                                                              // numbe r...rather  than
  237                                                                                                                              // the E xchange's  site
  238                                                                                                                              // key.
  239                    send erDevice.g etId().add (senderDev iceId);
  240  
  241                    // S etup Sende r -> Devic e -> Agent
  242                    MCCI MT000100UV 01Agent se nderDevice Agent = ne w MCCIMT00 0100UV01Ag ent();
  243                    send erDeviceAg ent.getCla ssCode().a dd("AGNT") ;
  244                    MCCI MT000100UV 01Organiza tion repre sentedOrg  = new MCCI MT000100UV 01Organiza tion();
  245                    repr esentedOrg .setClassC ode("ORG") ;
  246                    repr esentedOrg .setDeterm inerCode(" INSTANCE") ;
  247  
  248                    II r epresented OrgId = ne w II();
  249                    repr esentedOrg Id.setRoot (homeCommu nityOID);
  250                    repr esentedOrg Id.setExte nsion(faci lityNumber );
  251                    repr esentedOrg .getId().a dd(represe ntedOrgId) ;
  252  
  253                    JAXB Element ja xbElementA gent = obj Factory.cr eateMCCIMT 000100UV01 DeviceAsAg ent(sender DeviceAgen t);
  254                    JAXB Element ja xbElementR epresented Org = objF actory.cre ateMCCIMT0 00100UV01A gentRepres entedOrgan ization(re presentedO rg);
  255  
  256                    send erDeviceAg ent.setRep resentedOr ganization (jaxbEleme ntRepresen tedOrg);
  257                    send erDevice.s etAsAgent( jaxbElemen tAgent);
  258                    send er.setDevi ce(senderD evice);
  259  
  260                    retu rn sender;
  261           }
  262  
  263           pr otected MF MIMT700701 UV01DataEn terer crea teDataEnte rer1(Asser tionType a ssertion)
  264           {
  265                    MFMI MT700701UV 01DataEnte rer dataEn terer = ne w MFMIMT70 0701UV01Da taEnterer( );
  266                    this .createDat aEnterer(a ssertion,  dataEntere r);
  267                    retu rn dataEnt erer;
  268           }
  269  
  270           pr otected QU QIMT021001 UV01DataEn terer crea teDataEnte rer2(Asser tionType a ssertion)
  271           {
  272                    QUQI MT021001UV 01DataEnte rer dataEn terer = ne w QUQIMT02 1001UV01Da taEnterer( );
  273                    this .createDat aEnterer(a ssertion,  dataEntere r);
  274                    retu rn dataEnt erer;
  275           }
  276  
  277           pr ivate void  createDat aEnterer(A ssertionTy pe asserti on, Object  dataEnter erObj)
  278           {
  279                    Obje ctFactory  objFactory  = new Obj ectFactory ();
  280  
  281                    COCT MT090100UV 01Assigned Person ass ignedPerso n = new CO CTMT090100 UV01Assign edPerson() ;
  282                    assi gnedPerson .setClassC ode("ASSIG NED");
  283                    II a ssignedPer sonId = ne w II();
  284                    assi gnedPerson Id.setRoot ("2.16.840 .1.113883. 3.2017");
  285                    assi gnedPerson Id.setExte nsion("122 ");
  286                    assi gnedPerson .getId().a dd(assigne dPersonId) ;
  287  
  288                    COCT MT090100UV 01Person p erson = ne w COCTMT09 0100UV01Pe rson();
  289                    pers on.setDete rminerCode ("INSTANCE ");
  290                    pers on.getClas sCode().ad d("PSN");
  291                    ENEx plicit nam e = new EN Explicit() ;
  292  
  293                    Stri ng familyN ameStr = n ull;
  294                    if(a ssertion ! = null &&  assertion. getUserInf o() != nul l && asser tion.getUs erInfo().g etPersonNa me() != nu ll && Null Checker.is NotNullOrE mpty(asser tion.getUs erInfo().g etPersonNa me().getFa milyName() ))
  295                    {
  296                             family NameStr =  assertion. getUserInf o().getPer sonName(). getFamilyN ame();
  297                    }
  298                    else
  299                    {
  300                             family NameStr =  "None Prov ided";
  301                    }
  302                    EnEx plicitFami ly familyN ame = new  EnExplicit Family();
  303                    fami lyName.set Content(fa milyNameSt r);
  304                    JAXB Element ja xbFamilyNa me = objFa ctory.crea teENExplic itFamily(f amilyName) ;
  305  
  306                    Stri ng givenNa meStr = nu ll;
  307                    if(a ssertion ! = null &&  assertion. getUserInf o() != nul l && asser tion.getUs erInfo().g etPersonNa me() != nu ll && Null Checker.is NotNullOrE mpty(asser tion.getUs erInfo().g etPersonNa me().getGi venName()) )
  308                    {
  309                             givenN ameStr = a ssertion.g etUserInfo ().getPers onName().g etGivenNam e();
  310                    }
  311                    else
  312                    {
  313                             givenN ameStr = " None Provi ded";
  314                    }
  315  
  316                    EnEx plicitGive n givenNam e = new En ExplicitGi ven();
  317                    give nName.setC ontent(giv enNameStr) ;
  318                    JAXB Element ja xbGivenNam e = objFac tory.creat eENExplici tGiven(giv enName);
  319  
  320                    name .getConten t().add(ja xbGivenNam e);
  321                    name .getConten t().add(ja xbFamilyNa me);
  322                    pers on.getName ().add(nam e);
  323                    JAXB Element ja xbElementP erson = ob jFactory.c reateCOCTM T090100UV0 1AssignedP ersonAssig nedPerson( person);
  324  
  325                    assi gnedPerson .setAssign edPerson(j axbElement Person);
  326  
  327                    if(d ataEnterer Obj instan ceof MFMIM T700701UV0 1DataEnter er)
  328                    {
  329                             ((MFMI MT700701UV 01DataEnte rer) dataE ntererObj) .setContex tControlCo de("AP");
  330                             ((MFMI MT700701UV 01DataEnte rer) dataE ntererObj) .getTypeCo de().add(" ENT");
  331                             ((MFMI MT700701UV 01DataEnte rer) dataE ntererObj) .setAssign edPerson(a ssignedPer son);
  332                    }
  333                    else  if(dataEn tererObj i nstanceof  QUQIMT0210 01UV01Data Enterer)
  334                    {
  335                             ((QUQI MT021001UV 01DataEnte rer) dataE ntererObj) .setContex tControlCo de("AP");
  336                             ((QUQI MT021001UV 01DataEnte rer) dataE ntererObj) .getTypeCo de().add(" ENT");
  337                             ((QUQI MT021001UV 01DataEnte rer) dataE ntererObj) .setAssign edPerson(a ssignedPer son);
  338                    }
  339  
  340           }
  341  
  342           pr ivate clas s MVIHandl erResolver  implement s HandlerR esolver
  343           {
  344                    publ ic MVIHand lerResolve r()
  345                    {
  346  
  347                    }
  348  
  349                    publ ic List<Ha ndler> get HandlerCha in(PortInf o portInfo )
  350                    {
  351                             List<H andler> re t = new Ar rayList<Ha ndler>();
  352                             ret.ad d(new MVIS OAPHandler ());
  353                             return  ret;
  354                    }
  355           }
  356  
  357           pr ivate clas s MVISOAPH andler imp lements SO APHandler< SOAPMessag eContext>
  358           {
  359                    publ ic MVISOAP Handler()
  360                    {
  361  
  362                    }
  363  
  364                    publ ic Set<QNa me> getHea ders()
  365                    {
  366                             return  null;
  367                    }
  368  
  369                    publ ic void cl ose(Messag eContext c ontext)
  370                    {
  371                    }
  372  
  373                    publ ic boolean  handleFau lt(SOAPMes sageContex t context)
  374                    {
  375                             return  true;
  376                    }
  377  
  378                    publ ic boolean  handleMes sage(SOAPM essageCont ext smc)
  379                    {
  380                             Boolea n outbound Property =  (Boolean)  smc.get(M essageCont ext.MESSAG E_OUTBOUND _PROPERTY) ;
  381  
  382                             if(out boundPrope rty.boolea nValue())
  383                             {
  384                                      logger.d ebug("MVI  Outbound m essage"); 
  385                             }
  386                             else
  387                             {
  388                                      logger.d ebug("MVI  Inbound me ssage"); 
  389                             }
  390  
  391                             ByteAr rayOutputS tream baos  = new Byt eArrayOutp utStream() ;
  392  
  393                             SOAPMe ssage mess age = smc. getMessage ();
  394                             try
  395                             {
  396                                      message. writeTo(ba os);
  397                                      logger.d ebug("Outp ut Stream  {}: ", new  String(ba os.toByteA rray()));
  398                             }
  399                             catch( Exception  e)
  400                             {
  401                                      throw ne w DataAdap terExcepti on("Except ions occur red while  trying to  process th e message" , e);
  402                             }
  403  
  404                             return  outboundP roperty;
  405                    }
  406           }
  407   }