use of ca.uhn.hl7v2.HL7Exception in project nifi by apache.
the class ExtractHL7Attributes method getAttributes.
public static Map<String, String> getAttributes(final Group group, final boolean useNames, final boolean parseFields) throws HL7Exception {
final Map<String, String> attributes = new TreeMap<>();
if (!isEmpty(group)) {
for (final Map.Entry<String, Segment> segmentEntry : getAllSegments(group).entrySet()) {
final String segmentKey = segmentEntry.getKey();
final Segment segment = segmentEntry.getValue();
final Map<String, Type> fields = getAllFields(segmentKey, segment, useNames);
for (final Map.Entry<String, Type> fieldEntry : fields.entrySet()) {
final String fieldKey = fieldEntry.getKey();
final Type field = fieldEntry.getValue();
// change the existing non-broken behavior of the processor
if (parseFields && (field instanceof Composite) && !isTimestamp(field)) {
for (final Map.Entry<String, Type> componentEntry : getAllComponents(fieldKey, field, useNames).entrySet()) {
final String componentKey = componentEntry.getKey();
final Type component = componentEntry.getValue();
final String componentValue = HL7_ESCAPING.unescape(component.encode(), HL7_ENCODING);
if (!StringUtils.isEmpty(componentValue)) {
attributes.put(componentKey, componentValue);
}
}
} else {
final String fieldValue = HL7_ESCAPING.unescape(field.encode(), HL7_ENCODING);
if (!StringUtils.isEmpty(fieldValue)) {
attributes.put(fieldKey, fieldValue);
}
}
}
}
}
return attributes;
}
use of ca.uhn.hl7v2.HL7Exception in project nifi by apache.
the class ExtractHL7Attributes method getAllComponents.
private static Map<String, Type> getAllComponents(final String fieldKey, final Type field, final boolean useNames) throws HL7Exception {
final Map<String, Type> components = new TreeMap<>();
if (!isEmpty(field) && (field instanceof Composite)) {
if (useNames) {
final Pattern p = Pattern.compile("^(cm_msg|[a-z][a-z][a-z]?)([0-9]+)_(\\w+)$");
try {
final java.beans.PropertyDescriptor[] properties = PropertyUtils.getPropertyDescriptors(field);
for (final java.beans.PropertyDescriptor property : properties) {
final String propertyName = property.getName();
final Matcher matcher = p.matcher(propertyName);
if (matcher.find()) {
final Type type = (Type) PropertyUtils.getProperty(field, propertyName);
if (!isEmpty(type)) {
final String componentName = matcher.group(3);
final String typeKey = new StringBuilder().append(fieldKey).append(".").append(componentName).toString();
components.put(typeKey, type);
}
}
}
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
} else {
final Type[] types = ((Composite) field).getComponents();
for (int i = 0; i < types.length; i++) {
final Type type = types[i];
if (!isEmpty(type)) {
String fieldName = field.getName();
if (fieldName.equals("CM_MSG")) {
fieldName = "CM";
}
final String typeKey = new StringBuilder().append(fieldKey).append(".").append(fieldName).append(".").append(i + 1).toString();
components.put(typeKey, type);
}
}
}
}
return components;
}
use of ca.uhn.hl7v2.HL7Exception in project nifi by apache.
the class ExtractHL7Attributes method isRepeating.
private static boolean isRepeating(final Segment segment) throws HL7Exception {
if (isEmpty(segment)) {
return false;
}
final Group parent = segment.getParent();
final Group grandparent = parent.getParent();
if (parent == grandparent) {
return false;
}
return grandparent.isRepeating(parent.getName());
}
use of ca.uhn.hl7v2.HL7Exception 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);
}
use of ca.uhn.hl7v2.HL7Exception in project camel by apache.
the class AckExpression method evaluate.
@Override
public Object evaluate(Exchange exchange) {
Throwable t = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
Message msg = exchange.getIn().getBody(Message.class);
try {
HL7Exception hl7e = generateHL7Exception(t);
AcknowledgmentCode code = acknowledgementCode;
if (t != null && code == null) {
code = AcknowledgmentCode.AE;
}
return msg.generateACK(code == null ? AcknowledgmentCode.AA : code, hl7e);
} catch (Exception e) {
throw ObjectHelper.wrapRuntimeCamelException(e);
}
}
Aggregations