View Javadoc
1   /*
2    * Copyright 2010 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *     
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.openehealth.ipf.platform.camel.ihe.mllp.core.intercept.producer;
17  
18  import org.apache.camel.Exchange;
19  import org.apache.camel.Message;
20  import org.openehealth.ipf.platform.camel.core.util.Exchanges;
21  import org.openehealth.ipf.platform.camel.ihe.core.InterceptorSupport;
22  import org.openehealth.ipf.platform.camel.ihe.hl7v2.Hl7v2MarshalUtils;
23  import org.openehealth.ipf.platform.camel.ihe.mllp.core.FragmentationUtils;
24  import org.openehealth.ipf.platform.camel.ihe.mllp.core.MllpEndpoint;
25  
26  
27  /**
28   * Producer-side MLLP interceptor that sets character encoding configured
29   * for the given endpoint, and handles segment fragmentation (\rADD|...).
30   * @author Dmytro Rud
31   */
32  public class ProducerStringProcessingInterceptor extends InterceptorSupport<MllpEndpoint<?,?,?>> {
33  
34      @Override
35      public void process(Exchange exchange) throws Exception {
36          final String charsetName = getEndpoint().getCharsetName();
37          exchange.setProperty(Exchange.CHARSET_NAME, charsetName);
38  
39          boolean supportSegmentFragmentation = getEndpoint().isSupportSegmentFragmentation();
40          int segmentFragmentationThreshold = getEndpoint().getSegmentFragmentationThreshold();
41          Message message;
42          
43          // preprocess output
44          if (supportSegmentFragmentation && (segmentFragmentationThreshold >= 5)) {
45              message = exchange.getIn();
46              String s = message.getBody(String.class);
47              s = FragmentationUtils.ensureMaximalSegmentsLength(s, segmentFragmentationThreshold);
48              message.setBody(s);
49          }
50          
51          // run the route
52          getWrappedProcessor().process(exchange);
53  
54          // read in the response
55          message = Exchanges.resultMessage(exchange);
56          message.setBody(Hl7v2MarshalUtils.convertBodyToString(
57                  message,
58                  charsetName,
59                  supportSegmentFragmentation));
60      }
61  }