package org.wso2.carbon.inbound.endpoint.protocol.hl7.context; /** * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you 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. */ import ca.uhn.hl7v2.model.Message; import ca.uhn.hl7v2.parser.Parser; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.nio.reactor.EventMask; import org.apache.http.nio.reactor.IOSession; import org.apache.synapse.transport.passthru.util.BufferFactory; import org.wso2.carbon.inbound.endpoint.protocol.hl7.codec.HL7Codec; import org.wso2.carbon.inbound.endpoint.protocol.hl7.core.MLLPConstants; import java.nio.charset.CharsetDecoder; public class MLLPContext { private static final Log log = LogFactory.getLog(MLLPContext.class); private IOSession session; private StringBuffer requestBuffer; private StringBuffer responseBuffer; private Message hl7Message; private volatile HL7Codec codec; private long requestTime; private int expiry; private boolean validateMessage; private volatile boolean autoAck = true; private volatile boolean nackMode = false; private volatile boolean markForClose = false; private boolean preProcess = true; private boolean applicationAck = false; private volatile String messageId; private Parser preProcessorParser = null; private BufferFactory bufferFactory; public MLLPContext(IOSession session, CharsetDecoder decoder, boolean autoAck, boolean validateMessage, Parser preProcessorParser, BufferFactory bufferFactory) { this.session = session; this.codec = new HL7Codec(decoder); this.autoAck = autoAck; this.validateMessage = validateMessage; this.preProcessorParser = preProcessorParser; this.bufferFactory = bufferFactory; this.expiry = MLLPConstants.DEFAULT_HL7_TIMEOUT; this.requestBuffer = new StringBuffer(); this.responseBuffer = new StringBuffer(); if (preProcessorParser == null) { preProcess = false; } } public HL7Codec getCodec() { return codec; } public StringBuffer getRequestBuffer() { return this.requestBuffer; } public StringBuffer getResponseBuffer() { return responseBuffer; } public Message getHl7Message() { return this.hl7Message; } public void setHl7Message(Message hl7Message) { this.hl7Message = hl7Message; } public void requestOutput() { session.clearEvent(EventMask.READ); session.setEvent(EventMask.WRITE); } public void requestInput() { session.clearEvent(EventMask.WRITE); session.setEvent(EventMask.READ); } public void setRequestTime(long timeStamp) { this.requestTime = timeStamp; } public long getRequestTime() { return this.requestTime; } public void setExpiry(int milliseconds) { if (milliseconds < 1000) { milliseconds = 1000; } this.expiry = milliseconds; } public boolean isExpired() { if (System.currentTimeMillis() > requestTime + expiry) { return true; } return false; } public boolean isAutoAck() { return autoAck; } public void setAutoAck(boolean autoAck) { this.autoAck = autoAck; } public boolean isApplicationAck() { return applicationAck; } public void setApplicationAck(boolean applicationAck) { this.applicationAck = applicationAck; } public boolean isPreProcess() { return preProcess; } public boolean isNackMode() { return nackMode; } public void setNackMode(boolean nackMode) { this.nackMode = nackMode; } public Parser getPreProcessParser() { return preProcessorParser; } public BufferFactory getBufferFactory() { return bufferFactory; } public boolean isValidateMessage() { return validateMessage; } public void setValidateMessage(boolean validateMessage) { this.validateMessage = validateMessage; } public boolean isMarkForClose() { return markForClose; } public void setMarkForClose(boolean markForClose) { this.markForClose = markForClose; } public String getMessageId() { return messageId; } public void setMessageId(String messageId) { this.messageId = messageId; } public void reset() { // Resets MLLP Context and HL7Codec to default states. this.responseBuffer.setLength(0); this.requestBuffer.setLength(0); this.getCodec().setState(HL7Codec.READ_HEADER); this.setNackMode(false); } }