Search in sources :

Example 1 with HapiContext

use of ca.uhn.hl7v2.HapiContext in project camel by apache.

the class HL7ValidateTest method createRouteBuilder.

protected RouteBuilder createRouteBuilder() throws Exception {
    HapiContext hapiContext = new DefaultHapiContext();
    hapiContext.setValidationContext(new NoValidation());
    Parser p = new GenericParser(hapiContext);
    hl7 = new HL7DataFormat();
    hl7.setParser(p);
    /*
         * Let's start by adding a validation rule to the default validation
         * that disallows PID-2 to be empty.
         */
    ValidationRuleBuilder builder = new ValidationRuleBuilder() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void configure() {
            forVersion(Version.V24).message("ADT", "*").terser("PID-2", not(empty()));
        }
    };
    ValidationContext customValidationContext = ValidationContextFactory.fromBuilder(builder);
    HapiContext customContext = new DefaultHapiContext(customValidationContext);
    final Parser customParser = new GenericParser(customContext);
    return new RouteBuilder() {

        public void configure() throws Exception {
            from("direct:unmarshalFailed").unmarshal().hl7().to("mock:unmarshal");
            from("direct:unmarshalOk").unmarshal().hl7(false).to("mock:unmarshal");
            from("direct:unmarshalOkCustom").unmarshal(hl7).to("mock:unmarshal");
            from("direct:start1").marshal().hl7(customParser).to("mock:end");
            from("direct:start2").marshal().hl7(true).to("mock:end");
        }
    };
}
Also used : RouteBuilder(org.apache.camel.builder.RouteBuilder) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) NoValidation(ca.uhn.hl7v2.validation.impl.NoValidation) HapiContext(ca.uhn.hl7v2.HapiContext) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) ValidationRuleBuilder(ca.uhn.hl7v2.validation.builder.ValidationRuleBuilder) Parser(ca.uhn.hl7v2.parser.Parser) GenericParser(ca.uhn.hl7v2.parser.GenericParser) GenericParser(ca.uhn.hl7v2.parser.GenericParser) ValidationContext(ca.uhn.hl7v2.validation.ValidationContext)

Example 2 with HapiContext

use of ca.uhn.hl7v2.HapiContext in project nifi by apache.

the class TestHL7Query method createMessage.

private HL7Message createMessage(final String msgText) throws HL7Exception, IOException {
    final HapiContext hapiContext = new DefaultHapiContext();
    hapiContext.setValidationContext(ValidationContextFactory.noValidation());
    final PipeParser parser = hapiContext.getPipeParser();
    final Message message = parser.parse(msgText);
    return new HapiMessage(message);
}
Also used : HapiMessage(org.apache.nifi.hl7.hapi.HapiMessage) PipeParser(ca.uhn.hl7v2.parser.PipeParser) HapiMessage(org.apache.nifi.hl7.hapi.HapiMessage) Message(ca.uhn.hl7v2.model.Message) HL7Message(org.apache.nifi.hl7.model.HL7Message) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) HapiContext(ca.uhn.hl7v2.HapiContext) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext)

Example 3 with HapiContext

use of ca.uhn.hl7v2.HapiContext in project nifi by apache.

the class RouteHL7 method onTrigger.

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) throws ProcessException {
    FlowFile flowFile = session.get();
    if (flowFile == null) {
        return;
    }
    final Charset charset = Charset.forName(context.getProperty(CHARACTER_SET).evaluateAttributeExpressions(flowFile).getValue());
    final byte[] buffer = new byte[(int) flowFile.getSize()];
    session.read(flowFile, new InputStreamCallback() {

        @Override
        public void process(final InputStream in) throws IOException {
            StreamUtils.fillBuffer(in, buffer);
        }
    });
    @SuppressWarnings("resource") final HapiContext hapiContext = new DefaultHapiContext();
    hapiContext.setValidationContext((ca.uhn.hl7v2.validation.ValidationContext) ValidationContextFactory.noValidation());
    final PipeParser parser = hapiContext.getPipeParser();
    final String hl7Text = new String(buffer, charset);
    final HL7Message message;
    try {
        final Message hapiMessage = parser.parse(hl7Text);
        message = new HapiMessage(hapiMessage);
    } catch (final Exception e) {
        getLogger().error("Failed to parse {} as HL7 due to {}; routing to failure", new Object[] { flowFile, e });
        session.transfer(flowFile, REL_FAILURE);
        return;
    }
    final Set<String> matchingRels = new HashSet<>();
    final Map<Relationship, HL7Query> queryMap = queries;
    for (final Map.Entry<Relationship, HL7Query> entry : queryMap.entrySet()) {
        final Relationship relationship = entry.getKey();
        final HL7Query query = entry.getValue();
        final QueryResult result = query.evaluate(message);
        if (result.isMatch()) {
            FlowFile clone = session.clone(flowFile);
            clone = session.putAttribute(clone, "RouteHL7.Route", relationship.getName());
            session.transfer(clone, relationship);
            session.getProvenanceReporter().route(clone, relationship);
            matchingRels.add(relationship.getName());
        }
    }
    session.transfer(flowFile, REL_ORIGINAL);
    getLogger().info("Routed a copy of {} to {} relationships: {}", new Object[] { flowFile, matchingRels.size(), matchingRels });
}
Also used : HapiMessage(org.apache.nifi.hl7.hapi.HapiMessage) HapiMessage(org.apache.nifi.hl7.hapi.HapiMessage) Message(ca.uhn.hl7v2.model.Message) HL7Message(org.apache.nifi.hl7.model.HL7Message) QueryResult(org.apache.nifi.hl7.query.QueryResult) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) HapiContext(ca.uhn.hl7v2.HapiContext) HashSet(java.util.HashSet) FlowFile(org.apache.nifi.flowfile.FlowFile) HL7Query(org.apache.nifi.hl7.query.HL7Query) PipeParser(ca.uhn.hl7v2.parser.PipeParser) InputStream(java.io.InputStream) Charset(java.nio.charset.Charset) HL7Message(org.apache.nifi.hl7.model.HL7Message) IOException(java.io.IOException) ProcessException(org.apache.nifi.processor.exception.ProcessException) IOException(java.io.IOException) HL7QueryParsingException(org.apache.nifi.hl7.query.exception.HL7QueryParsingException) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) Relationship(org.apache.nifi.processor.Relationship) InputStreamCallback(org.apache.nifi.processor.io.InputStreamCallback) HashMap(java.util.HashMap) Map(java.util.Map)

Example 4 with HapiContext

use of ca.uhn.hl7v2.HapiContext in project streamsx.health by IBMStreams.

the class TestServer method main.

public static void main(String[] args) {
    try {
        HapiContext ctx = new DefaultHapiContext();
        CanonicalModelClassFactory mcf = new CanonicalModelClassFactory("2.6");
        ctx.setModelClassFactory(mcf);
        ctx.setValidationRuleBuilder(new NoValidationBuilder());
        ctx.setExecutorService(Executors.newCachedThreadPool());
        HL7Service server = ctx.newServer(8082, false);
        server.registerApplication(new HapiMessageHandler(null));
        server.registerConnectionListener(new ConnectionListener() {

            @Override
            public void connectionReceived(Connection c) {
                System.out.println("Connection received.");
            }

            @Override
            public void connectionDiscarded(Connection c) {
                System.out.println("Connection discarded.");
            }
        });
        server.startAndWait();
        ctx.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Also used : NoValidationBuilder(ca.uhn.hl7v2.validation.builder.support.NoValidationBuilder) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) HL7Service(ca.uhn.hl7v2.app.HL7Service) Connection(ca.uhn.hl7v2.app.Connection) ConnectionListener(ca.uhn.hl7v2.app.ConnectionListener) IOException(java.io.IOException) HapiContext(ca.uhn.hl7v2.HapiContext) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) CanonicalModelClassFactory(ca.uhn.hl7v2.parser.CanonicalModelClassFactory)

Example 5 with HapiContext

use of ca.uhn.hl7v2.HapiContext in project nifi by apache.

the class ExtractHL7Attributes method onTrigger.

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) throws ProcessException {
    FlowFile flowFile = session.get();
    if (flowFile == null) {
        return;
    }
    final Charset charset = Charset.forName(context.getProperty(CHARACTER_SET).evaluateAttributeExpressions(flowFile).getValue());
    final Boolean useSegmentNames = context.getProperty(USE_SEGMENT_NAMES).asBoolean();
    final Boolean parseSegmentFields = context.getProperty(PARSE_SEGMENT_FIELDS).asBoolean();
    final Boolean skipValidation = context.getProperty(SKIP_VALIDATION).asBoolean();
    final String inputVersion = context.getProperty(HL7_INPUT_VERSION).getValue();
    final byte[] buffer = new byte[(int) flowFile.getSize()];
    session.read(flowFile, new InputStreamCallback() {

        @Override
        public void process(final InputStream in) throws IOException {
            StreamUtils.fillBuffer(in, buffer);
        }
    });
    @SuppressWarnings("resource") final HapiContext hapiContext = new DefaultHapiContext();
    if (!inputVersion.equals("autodetect")) {
        hapiContext.setModelClassFactory(new CanonicalModelClassFactory(inputVersion));
    }
    if (skipValidation) {
        hapiContext.setValidationContext((ValidationContext) ValidationContextFactory.noValidation());
    }
    final PipeParser parser = hapiContext.getPipeParser();
    final String hl7Text = new String(buffer, charset);
    try {
        final Message message = parser.parse(hl7Text);
        final Map<String, String> attributes = getAttributes(message, useSegmentNames, parseSegmentFields);
        flowFile = session.putAllAttributes(flowFile, attributes);
        getLogger().debug("Added the following attributes for {}: {}", new Object[] { flowFile, attributes });
    } catch (final HL7Exception e) {
        getLogger().error("Failed to extract attributes from {} due to {}", new Object[] { flowFile, e });
        session.transfer(flowFile, REL_FAILURE);
        return;
    }
    session.transfer(flowFile, REL_SUCCESS);
}
Also used : FlowFile(org.apache.nifi.flowfile.FlowFile) PipeParser(ca.uhn.hl7v2.parser.PipeParser) Message(ca.uhn.hl7v2.model.Message) InputStream(java.io.InputStream) Charset(java.nio.charset.Charset) IOException(java.io.IOException) CanonicalModelClassFactory(ca.uhn.hl7v2.parser.CanonicalModelClassFactory) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) InputStreamCallback(org.apache.nifi.processor.io.InputStreamCallback) HL7Exception(ca.uhn.hl7v2.HL7Exception) DefaultHapiContext(ca.uhn.hl7v2.DefaultHapiContext) HapiContext(ca.uhn.hl7v2.HapiContext)

Aggregations

DefaultHapiContext (ca.uhn.hl7v2.DefaultHapiContext)7 HapiContext (ca.uhn.hl7v2.HapiContext)7 Message (ca.uhn.hl7v2.model.Message)5 Parser (ca.uhn.hl7v2.parser.Parser)3 PipeParser (ca.uhn.hl7v2.parser.PipeParser)3 IOException (java.io.IOException)3 RouteBuilder (org.apache.camel.builder.RouteBuilder)3 CanonicalModelClassFactory (ca.uhn.hl7v2.parser.CanonicalModelClassFactory)2 GenericParser (ca.uhn.hl7v2.parser.GenericParser)2 NoValidation (ca.uhn.hl7v2.validation.impl.NoValidation)2 InputStream (java.io.InputStream)2 Charset (java.nio.charset.Charset)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2 FlowFile (org.apache.nifi.flowfile.FlowFile)2 HapiMessage (org.apache.nifi.hl7.hapi.HapiMessage)2 HL7Message (org.apache.nifi.hl7.model.HL7Message)2 InputStreamCallback (org.apache.nifi.processor.io.InputStreamCallback)2 HL7Exception (ca.uhn.hl7v2.HL7Exception)1 Connection (ca.uhn.hl7v2.app.Connection)1