Search in sources :

Example 1 with MLLPTransport

use of ca.uhn.hl7v2.protocol.impl.MLLPTransport in project pentaho-kettle by pentaho.

the class HL7MLLPAcknowledge method execute.

public Result execute(Result previousResult, int nr) {
    Result result = previousResult;
    try {
        String serverName = environmentSubstitute(server);
        int portNumber = Integer.parseInt(environmentSubstitute(port));
        String variable = environmentSubstitute(variableName);
        MLLPSocketCacheEntry entry = MLLPSocketCache.getInstance().getServerSocketStreamSource(serverName, portNumber);
        MLLPTransport transport = entry.getTransport();
        // 
        synchronized (transport) {
            String message = getVariable(variable);
            // Parse the message and extract the acknowledge message.
            // 
            Parser parser = new GenericParser();
            ValidationContext validationContext = new NoValidation();
            parser.setValidationContext(validationContext);
            Message msg = parser.parse(message);
            Message ack = msg.generateACK();
            String ackMessage = ack.encode();
            String APPNAME = "PDI4";
            if (ack instanceof ca.uhn.hl7v2.model.v21.message.ACK) {
                ca.uhn.hl7v2.model.v21.message.ACK mod = (ca.uhn.hl7v2.model.v21.message.ACK) ack;
                mod.getMSH().getSENDINGAPPLICATION().setValue(APPNAME);
                mod.getMSH().getSENDINGFACILITY().setValue(APPNAME);
                ackMessage = mod.encode();
            } else if (ack instanceof ca.uhn.hl7v2.model.v22.message.ACK) {
                ca.uhn.hl7v2.model.v22.message.ACK mod = (ca.uhn.hl7v2.model.v22.message.ACK) ack;
                mod.getMSH().getSendingApplication().setValue(APPNAME);
                mod.getMSH().getSendingFacility().setValue(APPNAME);
                ackMessage = mod.encode();
            } else if (ack instanceof ca.uhn.hl7v2.model.v23.message.ACK) {
                ca.uhn.hl7v2.model.v23.message.ACK mod = (ca.uhn.hl7v2.model.v23.message.ACK) ack;
                mod.getMSH().getSendingApplication().getNamespaceID().setValue(APPNAME);
                mod.getMSH().getSendingFacility().getNamespaceID().setValue(APPNAME);
                ackMessage = mod.encode();
            } else if (ack instanceof ca.uhn.hl7v2.model.v231.message.ACK) {
                ca.uhn.hl7v2.model.v231.message.ACK mod = (ca.uhn.hl7v2.model.v231.message.ACK) ack;
                mod.getMSH().getSendingApplication().getNamespaceID().setValue(APPNAME);
                mod.getMSH().getSendingFacility().getNamespaceID().setValue(APPNAME);
                ackMessage = mod.encode();
            } else if (ack instanceof ca.uhn.hl7v2.model.v24.message.ACK) {
                ca.uhn.hl7v2.model.v24.message.ACK mod = (ca.uhn.hl7v2.model.v24.message.ACK) ack;
                mod.getMSH().getSendingApplication().getNamespaceID().setValue(APPNAME);
                mod.getMSH().getSendingFacility().getNamespaceID().setValue(APPNAME);
                ackMessage = mod.encode();
            } else if (ack instanceof ca.uhn.hl7v2.model.v25.message.ACK) {
                ca.uhn.hl7v2.model.v25.message.ACK mod = (ca.uhn.hl7v2.model.v25.message.ACK) ack;
                mod.getMSH().getSendingApplication().getNamespaceID().setValue(APPNAME);
                mod.getMSH().getSendingFacility().getNamespaceID().setValue(APPNAME);
                ackMessage = mod.encode();
            } else if (ack instanceof ca.uhn.hl7v2.model.v251.message.ACK) {
                ca.uhn.hl7v2.model.v251.message.ACK mod = (ca.uhn.hl7v2.model.v251.message.ACK) ack;
                mod.getMSH().getSendingApplication().getNamespaceID().setValue(APPNAME);
                mod.getMSH().getSendingFacility().getNamespaceID().setValue(APPNAME);
                ackMessage = mod.encode();
            } else if (ack instanceof ca.uhn.hl7v2.model.v26.message.ACK) {
                ca.uhn.hl7v2.model.v26.message.ACK mod = (ca.uhn.hl7v2.model.v26.message.ACK) ack;
                mod.getMSH().getSendingApplication().getNamespaceID().setValue(APPNAME);
                mod.getMSH().getSendingFacility().getNamespaceID().setValue(APPNAME);
                ackMessage = mod.encode();
            } else {
                logError("This job entry does not support the HL7 dialect used. Found ACK class: " + ack.getClass().getName());
            }
            Transportable transportable = new TransportableImpl(ackMessage);
            transport.doSend(transportable);
        }
        // All went well..
        // 
        result.setNrErrors(0);
        result.setResult(true);
    } catch (Exception e) {
        log.logError(BaseMessages.getString(PKG, "HL7MLLPInput.Exception.UnexpectedError"), e);
        result.setNrErrors(1);
        result.setResult(false);
    }
    return result;
}
Also used : Message(ca.uhn.hl7v2.model.Message) Result(org.pentaho.di.core.Result) MLLPSocketCacheEntry(org.pentaho.di.trans.steps.hl7input.common.MLLPSocketCacheEntry) Transportable(ca.uhn.hl7v2.protocol.Transportable) TransportableImpl(ca.uhn.hl7v2.protocol.impl.TransportableImpl) KettleException(org.pentaho.di.core.exception.KettleException) KettleDatabaseException(org.pentaho.di.core.exception.KettleDatabaseException) KettleXMLException(org.pentaho.di.core.exception.KettleXMLException) Parser(ca.uhn.hl7v2.parser.Parser) GenericParser(ca.uhn.hl7v2.parser.GenericParser) GenericParser(ca.uhn.hl7v2.parser.GenericParser) ValidationContext(ca.uhn.hl7v2.validation.ValidationContext) MLLPTransport(ca.uhn.hl7v2.protocol.impl.MLLPTransport) NoValidation(ca.uhn.hl7v2.validation.impl.NoValidation)

Example 2 with MLLPTransport

use of ca.uhn.hl7v2.protocol.impl.MLLPTransport in project pentaho-kettle by pentaho.

the class HL7MLLPInput method execute.

public Result execute(Result previousResult, int nr) {
    Result result = previousResult;
    try {
        String serverName = environmentSubstitute(server);
        int portNumber = Integer.parseInt(environmentSubstitute(port));
        String messageVariable = environmentSubstitute(messageVariableName);
        String messageTypeVariable = environmentSubstitute(messageTypeVariableName);
        String versionVariable = environmentSubstitute(versionVariableName);
        MLLPSocketCacheEntry entry = MLLPSocketCache.getInstance().getServerSocketStreamSource(serverName, portNumber);
        if (entry.getJobListener() != null) {
            parentJob.addJobListener(entry.getJobListener());
        }
        MLLPTransport transport = entry.getTransport();
        // 
        synchronized (transport) {
            Transportable transportable = transport.doReceive();
            String message = transportable.getMessage();
            logDetailed("Received message: " + message);
            parentJob.setVariable(messageVariable, message);
            // Parse the message and extract the control ID.
            // 
            Parser parser = new GenericParser();
            ValidationContext validationContext = new NoValidation();
            parser.setValidationContext(validationContext);
            Message msg = parser.parse(message);
            Structure structure = msg.get("MSH");
            String messageType = null;
            String version = msg.getVersion();
            if (structure instanceof ca.uhn.hl7v2.model.v21.segment.MSH) {
                messageType = ((ca.uhn.hl7v2.model.v21.segment.MSH) structure).getMESSAGETYPE().encode();
            } else if (structure instanceof ca.uhn.hl7v2.model.v22.segment.MSH) {
                messageType = ((ca.uhn.hl7v2.model.v22.segment.MSH) structure).getMessageType().encode();
            } else if (structure instanceof ca.uhn.hl7v2.model.v23.segment.MSH) {
                messageType = ((ca.uhn.hl7v2.model.v23.segment.MSH) structure).getMessageType().encode();
            } else if (structure instanceof ca.uhn.hl7v2.model.v231.segment.MSH) {
                messageType = ((ca.uhn.hl7v2.model.v231.segment.MSH) structure).getMessageType().getMessageStructure().getValue();
            } else if (structure instanceof ca.uhn.hl7v2.model.v24.segment.MSH) {
                messageType = ((ca.uhn.hl7v2.model.v24.segment.MSH) structure).getMessageType().getMessageStructure().getValue();
            } else if (structure instanceof ca.uhn.hl7v2.model.v25.segment.MSH) {
                messageType = ((ca.uhn.hl7v2.model.v25.segment.MSH) structure).getMessageType().getMessageStructure().getValue();
            } else if (structure instanceof ca.uhn.hl7v2.model.v251.segment.MSH) {
                messageType = ((ca.uhn.hl7v2.model.v251.segment.MSH) structure).getMessageType().getMessageStructure().getValue();
            } else if (structure instanceof ca.uhn.hl7v2.model.v26.segment.MSH) {
                messageType = ((ca.uhn.hl7v2.model.v26.segment.MSH) structure).getMessageType().getMessageStructure().getValue();
            } else {
                logError("This job entry does not support the HL7 dialect used. Found MSH class: " + structure.getClass().getName());
            }
            if (!Utils.isEmpty(messageTypeVariable)) {
                parentJob.setVariable(messageTypeVariable, messageType);
            }
            if (!Utils.isEmpty(versionVariable)) {
                parentJob.setVariable(versionVariable, version);
            }
        }
        // All went well..
        // 
        result.setNrErrors(0);
        result.setResult(true);
    } catch (Exception e) {
        log.logError(BaseMessages.getString(PKG, "HL7MLLPInput.Exception.UnexpectedError"), e);
        result.setNrErrors(1);
        result.setResult(false);
    }
    return result;
}
Also used : Message(ca.uhn.hl7v2.model.Message) Result(org.pentaho.di.core.Result) MLLPSocketCacheEntry(org.pentaho.di.trans.steps.hl7input.common.MLLPSocketCacheEntry) Structure(ca.uhn.hl7v2.model.Structure) Transportable(ca.uhn.hl7v2.protocol.Transportable) KettleException(org.pentaho.di.core.exception.KettleException) KettleDatabaseException(org.pentaho.di.core.exception.KettleDatabaseException) KettleXMLException(org.pentaho.di.core.exception.KettleXMLException) Parser(ca.uhn.hl7v2.parser.Parser) GenericParser(ca.uhn.hl7v2.parser.GenericParser) GenericParser(ca.uhn.hl7v2.parser.GenericParser) ValidationContext(ca.uhn.hl7v2.validation.ValidationContext) MLLPTransport(ca.uhn.hl7v2.protocol.impl.MLLPTransport) NoValidation(ca.uhn.hl7v2.validation.impl.NoValidation)

Example 3 with MLLPTransport

use of ca.uhn.hl7v2.protocol.impl.MLLPTransport in project pentaho-kettle by pentaho.

the class MLLPSocketCache method getServerSocketStreamSource.

public MLLPSocketCacheEntry getServerSocketStreamSource(String server, int port) throws Exception {
    final String key = createKey(server, port);
    MLLPSocketCacheEntry s = map.get(key);
    if (s != null) {
        return s;
    }
    // Open the socket for this server/port combination.
    // 
    ServerSocket serverSocket = new ServerSocket(port);
    StreamSource streamSource = new ServerSocketStreamSource(serverSocket, server);
    MLLPTransport transport = new MLLPTransport(streamSource);
    transport.connect();
    final MLLPSocketCacheEntry entry = new MLLPSocketCacheEntry(serverSocket, streamSource, transport);
    entry.setJobListener(new JobAdapter() {

        @Override
        public void jobFinished(Job job) throws KettleException {
            KettleException exception = null;
            try {
                entry.getTransport().disconnect();
            } catch (Exception e) {
                exception = new KettleException(e);
            }
            try {
                entry.getStreamSource().disconnect();
            } catch (Exception e) {
                exception = new KettleException(e);
            }
            try {
                entry.getServerSocket().close();
            } catch (Exception e) {
                exception = new KettleException(e);
            }
            map.remove(key);
            if (exception != null) {
                throw exception;
            }
        }
    });
    // Store a copy in our map to make sure that only the first return value contains the job listener.
    // 
    map.put(key, new MLLPSocketCacheEntry(serverSocket, streamSource, transport));
    return entry;
}
Also used : KettleException(org.pentaho.di.core.exception.KettleException) MLLPTransport(ca.uhn.hl7v2.protocol.impl.MLLPTransport) ServerSocketStreamSource(ca.uhn.hl7v2.protocol.impl.ServerSocketStreamSource) ServerSocketStreamSource(ca.uhn.hl7v2.protocol.impl.ServerSocketStreamSource) StreamSource(ca.uhn.hl7v2.protocol.StreamSource) ServerSocket(java.net.ServerSocket) Job(org.pentaho.di.job.Job) JobAdapter(org.pentaho.di.job.JobAdapter) KettleException(org.pentaho.di.core.exception.KettleException)

Aggregations

MLLPTransport (ca.uhn.hl7v2.protocol.impl.MLLPTransport)3 KettleException (org.pentaho.di.core.exception.KettleException)3 Message (ca.uhn.hl7v2.model.Message)2 GenericParser (ca.uhn.hl7v2.parser.GenericParser)2 Parser (ca.uhn.hl7v2.parser.Parser)2 Transportable (ca.uhn.hl7v2.protocol.Transportable)2 ValidationContext (ca.uhn.hl7v2.validation.ValidationContext)2 NoValidation (ca.uhn.hl7v2.validation.impl.NoValidation)2 Result (org.pentaho.di.core.Result)2 KettleDatabaseException (org.pentaho.di.core.exception.KettleDatabaseException)2 KettleXMLException (org.pentaho.di.core.exception.KettleXMLException)2 MLLPSocketCacheEntry (org.pentaho.di.trans.steps.hl7input.common.MLLPSocketCacheEntry)2 Structure (ca.uhn.hl7v2.model.Structure)1 StreamSource (ca.uhn.hl7v2.protocol.StreamSource)1 ServerSocketStreamSource (ca.uhn.hl7v2.protocol.impl.ServerSocketStreamSource)1 TransportableImpl (ca.uhn.hl7v2.protocol.impl.TransportableImpl)1 ServerSocket (java.net.ServerSocket)1 Job (org.pentaho.di.job.Job)1 JobAdapter (org.pentaho.di.job.JobAdapter)1