/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠReg ents Ġof Ġthe ĠUniversity Ġof ĠMin nes ota . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġedu . umn . bio med ic us . io Ċ Ċ import Ġedu . umn . bio med ic us . annotations . Component Setting Ċ import Ġedu . umn . nlp engine . Artifact Ċ import Ġedu . umn . nlp engine . Artifact Source Ċ import Ġedu . umn . nlp engine . Standard Artifact Ċ import Ġorg . yaml . s na key aml . Yaml Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . nio . file . Path Ċ import Ġjava . sql . Connection Ċ import Ġjava . sql . Driver Manager Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . sql . Statement Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠA Ġdocument Ġsource Ġthat Ġpull s Ġfrom Ġa Ġdatabase Ġusing ĠJDBC . Ċ Ġ*/ Ċ class ĠJdbc Artifact Source Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ@ Component Setting (" document Name ") Ġprivate Ġval Ġdocument Name : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ Component Setting (" configFile . as Path ") Ġprivate Ġval Ġconfig File : ĠPath Ċ ) Ġ: ĠArtifact Source Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġconnection : ĠConnection ĊĊĠĠĠ Ġprivate Ġval Ġstatement : ĠStatement ĊĊĠĠĠ Ġprivate Ġval ĠresultSet : ĠResultSet ĊĊĠĠĠ Ġprivate Ġval Ġid Column : ĠString ĊĊĠĠĠ Ġprivate Ġval Ġtext Column : ĠString ĊĊĠĠĠ Ġprivate Ġval Ġmetadata Mappings : ĠMap < String , ĠString > ĊĊĠĠĠ Ġprivate Ġval Ġsize : ĠInt ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġval Ġconfig : ĠMap < String , ĠAny > Ġ= ĠFileInputStream ( configFile . to File ()). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYaml (). load ( it ) Ġas ĠMap < String , ĠAny > ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmetadata Map Ġ= Ġconfig [" metadata Map "] ĊĠĠĠĠĠĠĠ Ġif Ġ( metadata Map Ġis ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . metadata Mappings Ġ= Ġmetadata Map Ġas ĠMap < String , ĠString > ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . metadata Mappings Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġid Column Ġ= Ġconfig [" id Column "] Ġas ĠString ĊĠĠĠĠĠĠĠ Ġtext Column Ġ= Ġconfig [" text Column "] Ġas ĠString ĊĊĠĠĠĠĠĠĠ ĠClass . forName ( config [" driver "] Ġas ĠString ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprops Ġ= ĠProperties () ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġprops . put All ( config [" properties "] Ġas ĠMap < out ĠAny , ĠAny >) ĊĊĠĠĠĠĠĠĠ Ġconnection Ġ= ĠDriver Manager . getConnection ( config [" url "] Ġas ĠString , Ġprops ) ĊĠĠĠĠĠĠĠ Ġstatement Ġ= Ġconnection . createStatement () ĊĠĠĠĠĠĠĠ Ġval Ġquery Text Ġ= ĠFile ( config [" query File "] Ġas ĠString ). read Text () ĊĠĠĠĠĠĠĠ ĠresultSet Ġ= Ġstatement . executeQuery ( query Text ) ĊĊĠĠĠĠĠĠĠ Ġsize Ġ= Ġconfig [" size "] Ġas ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtry Advance ( consumer : Ġ( Artifact ) Ġ-> ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( resultSet . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠresultSet . getString ( id Column ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartifact Ġ= ĠStandard Artifact ( id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Mappings . forEach Ġ{ Ġcolumn , Ġtarget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ: ĠString ? Ġ= ĠresultSet . getString ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( metadata Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifact . metadata [ target ] Ġ= Ġmetadata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext : ĠString ? Ġ= ĠresultSet . getString ( text Column ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifact . add Document ( document Name , Ġtext Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer . invoke ( artifact ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġestimate Total (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsize . to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠresultSet . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatement . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ