// background (this dictates the web console to execute the following lines of code in the background) import app.* def DIR = 'C:/work4globaldb'//'/var/tmp' def date = Date.parse('yyyyMMdd', '20120208') def p, o def parseDate = {d-> try{ if(!d)return null switch(d.size()) { case 4:return Date.parse('yyyy', d) case 6:return Date.parse('yyyyMM', d) case 8:return Date.parse('yyyyMMdd', d) } }catch(x){return null} } def storeObject = {objectContainer, object-> object.id = UUID.randomUUID().toString() object.dateCreated = date object.createdBy = 'sam.ds.chen@gmail.com' objectContainer.store object } System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: Starting..." [//'GRS_PATIENT_DETAILS_2'// PATIENTs already imported 'GRS_PATIENT_LABTEST' , 'GRS_PATIENT_MH' , 'GRS_PT_CMVIEW' , 'GRS_PT_PE' , 'GRS_PT_VS' ].each {view-> System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: importing data from ${view}" def metadata = [] new File("${DIR}/_final_${view}.dat").eachLine {line, n-> def sv = line.split('\\|') def m = [:] if(n == 1) { // get metadata sv.each{metadata << it} } else { sv.eachWithIndex{v,i-> m[metadata[i]] = (v == 'null' ? null : v) } switch(view) { case'GRS_PATIENT_DETAILS_2': p = new Patient( loc : m.COUNTRY , patientNo : m.PT , dob : parseDate(m.DOBDATE) , race : m.RACE , gender : m.GENDER , dataSource : "Oracle Clinical: ${m.STUDY} ${m.INVSITE}" , study : m.STUDY , site : m.INVSITE) storeObject(oc, p) break case'GRS_PATIENT_LABTEST': p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE) o = new LabTest( patient : p , dcmDate : parseDate(m.DCMDATE) , cpEvent : m.CPEVENT , visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null , labType : m.LABTYPE , testName : m.TESTNAME , lparm : m.LPARM , result : m.RESULT , unit : m.UNIT , significant : m.SIGNIFICANT , resultStd : m.RESULT_STD , highRange : m.HIGH_RANGE , lowRange : m.LOW_RANGE ) if(p) { p.hasLabTest = true oc.store p } storeObject(oc, o) break case'GRS_PATIENT_MH': p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE) o = new MedicalHistory( patient : p , dcmDate : parseDate(m.DCMDATE) , cpEvent : m.CPEVENT , visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null , bodySystem : m.BODY_SYSTEM , medTerm : m.MEDTERM , startDate : parseDate(m.START_DATE) , active : m.ACTIVE ) if(p) { p.hasMedicalHistory = true oc.store p } storeObject(oc, o) break case'GRS_PT_CMVIEW': p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE) o = new CmView( patient : p , dcmDate : parseDate(m.DCMDATE) , cpEvent : m.CPEVENT , visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null , cmTerm : m.CMTERM , startDate : parseDate(m.START_DATE) , stopDate : parseDate(m.STOP_DATE) , dose : m.DOSE , units : m.UNITES , frequency : m.FREQUENCY , indication : m.INDICATION , continuing : m.CONTINUING ) if(p) { p.hasCmView = true oc.store p } storeObject(oc, o) break case'GRS_PT_PE': p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE) o = new Pe( patient : p , dcmDate : parseDate(m.DCMDATE) , cpEvent : m.CPEVENT , visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null , repeatSn : m.REPEATSN , bodySystem : m.BODY_SYSTEM , notDone : m.NOTDONE , result : m.RESULT , specify : m.SPECIFY ) if(p) { p.hasPe = true oc.store p } storeObject(oc, o) break case'GRS_PT_VS': p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE) o = new Vs( patient : p , cpEvent : m.CPEVENT , timePeriod : m.TIME_PERIOD , height : m.HEIGHT , heightUnit : m.HEIGHT_UNIT , weight : m.WEIGHT , weightUnit : m.WEIGHT_UNIT , heartRate : m.HEARTRATE , hrUnit : m.HR_UNIT , respiration : m.RESPIRATION , respirationUnit : m.RESPIRATION_UNIT , bodyTemperature : m.BODY_TEMPERATURE , temperatureUnit : m.TEMPERATURE_UNIT , bpSystolic : m.BP_SYSTOLIC , bpSysUnit : m.BP_SYS_UNIT , bpDiastolic : m.BP_DIASTOLIC , bpDiaUnit : m.BP_DIA_UNIT , bmi : m.BMI ) if(p) { p.hasVs = true oc.store p } storeObject(oc, o) break } } } } System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: Done."