

package org.somecompany.camel;


import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import ca.uhn.hl7v2.model.Message;
import org.apache.camel.builder.RouteBuilder;
import ca.uhn.hl7v2.util.Terser;
import ca.uhn.hl7v2.DefaultHapiContext;
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.HapiContext;
import java.util.Base64;
import org.apache.camel.spi.DataFormat;


import ca.uhn.hl7v2.parser.Parser;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.camel.component.sql.SqlComponent;

public class MyRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
                 BasicDataSource basicDataSource = new BasicDataSource();
                 basicDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                 basicDataSource.setUrl("jdbc:sqlserver://INFPRDDB:52739;databaseName=MGH_Work;");
                 basicDataSource.setUsername("username");
                 basicDataSource.setPassword("password");
                 SqlComponent sqlComponent = new SqlComponent();
                 sqlComponent.setDataSource(basicDataSource);
                 getContext().addComponent("psoft-sql", sqlComponent);


        from("mllp://0.0.0.0:8888")
        .log("..Received HL7 message with control id ${header.CamelMllpMessageControlId}")
        .convertBodyTo(String.class)
        .unmarshal()
        .hl7(false)
        .process(new Processor() {
          public void process(Exchange exchange) throws Exception {
          Message message = exchange.getIn().getBody(Message.class);
          ca.uhn.hl7v2.util.Terser terser = new Terser(message);
          String obx5 = terser.get("/.OBX-5-5");
          String EDMId = terser.get("/.OBR-3") + ".pdf";
          String voucher = terser.get("/.OBR-2");

          byte[] decoded = Base64.getDecoder().decode(obx5);
          exchange.getOut().setBody(decoded);
          exchange.getOut().setHeader("voucher", voucher);
          exchange.getOut().setHeader("CamelFileName", EDMId );
            }
          } )
       .log("..Processed voucher ${header.voucher} to file ${header.CamelFileName}")
       .to("file:target/messages/others")
       .recipientList(simple("psoft-sql:INSERT INTO lawsonprod.PeopleSoftVCR (Voucher, Facility, image) VALUES ('12345', '1', '${header.CamelFileName}')") )
       ;

    }

}
