public HapiSegment(final Segment segment) throws HL7Exception { this.segment = segment; final List<HL7Field> fieldList = new ArrayList<>(); for (int i = 1; i <= segment.numFields(); i++) { final Type[] types = segment.getField(i); if (types == null || types.length == 0) { fieldList.add(new EmptyField()); continue; } for (final Type type : types) { fieldList.add(new HapiField(type)); } } this.fields = Collections.unmodifiableList(fieldList); }
@Override public String getName() { return segment.getName(); }
private static Map<String, Type> getAllFields(final String segmentKey, final Segment segment, final boolean useNames) throws HL7Exception { final Map<String, Type> fields = new TreeMap<>(); final String[] segmentNames = segment.getNames(); for (int i = 1; i <= segment.numFields(); i++) { final Type field = segment.getField(i, 0); if (!isEmpty(field)) { final String fieldName; if (useNames) { fieldName = WordUtils.capitalize(segmentNames[i-1]).replaceAll("\\W+", ""); } else { fieldName = String.valueOf(i); } final String fieldKey = new StringBuilder() .append(segmentKey) .append(".") .append(fieldName) .toString(); fields.put(fieldKey, field); } } return fields; }
/** * Checks a segment against a list of allowed fields (ie those mentioned in the profile with * usage other than X). Returns a list of exceptions representing field that appear but are not * supposed to. * * @param allowedFields an array of Integers containing field #s of allowed fields */ protected void checkForExtraFields(Segment segment, List<Integer> allowedFields, List<HL7Exception> exList) throws ProfileException { for (int i = 1; i <= segment.numFields(); i++) { if (!allowedFields.contains(i)) { try { Type[] reps = segment.getField(i); for (Type rep : reps) { if (!rep.isEmpty()) { HL7Exception e = new XElementPresentException("Field " + i + " in " + segment.getName() + " appears in the message but not in the profile"); exList.add(e); } } } catch (HL7Exception he) { throw new ProfileException("Problem testing against profile", he); } } } }
Primitive type = (Primitive) segment.getField(typeField, 0); Type[] reps = segment.getField(dataField); for (Type rep : reps) { Varies v = (Varies)rep; if (type.getValue() == null) { if (defaultType != null) { LOG.debug("setting default {}-{} type to {}", new Object[] {segment.getName(), typeField, defaultType}); type.setValue(defaultType); if (!(v.getData() instanceof Primitive) || ((Primitive) v.getData()).getValue() != null) { throw new HL7Exception(String.format( "A datatype for %s-%n must be specified in %s-%n.", segment.getName(), dataField, segment.getName(), typeField), ErrorCode.REQUIRED_FIELD_MISSING); String version = segment.getMessage().getVersion(); String typeValue = type.getValue(); Class<? extends Type> c = factory.getTypeClass(typeValue, version); Primitive obx1 = (Primitive) segment.getField(1, 0); HL7Exception h = new HL7Exception("\'" + type.getValue() + "\' in record " + obx1.getValue() + " is invalid for version " + version, ErrorCode.DATA_TYPE_ERROR); h.setSegmentName(segment.getName()); h.setFieldPosition(typeField); throw h; for (Type stype : subComponentsInFirstField) { if (firstComponentValue.length() != 0) {
/** * Returns the Primitive object at the given location. */ private static Primitive getPrimitive(Segment segment, int field, int rep, int component, int subcomponent) throws HL7Exception { Type type = segment.getField(field, rep); return getPrimitive(type, component, subcomponent); }
if (isDelimDefSegment(destination.getName())) { fieldOffset = 1; boolean isMSH2 = isDelimDefSegment(destination.getName()) && i+fieldOffset == 2; if (isMSH2) { reps = new String[1]; Type field = destination.getField(i + fieldOffset, j); if (isMSH2) { Terser.getPrimitive(field, 1, 1).setValue(reps[j]); e.setSegmentRepetition(MessageIterator.getIndex(destination.getParent(), destination).rep); e.setSegmentName(destination.getName()); throw e;
public static void fixMFE4(Segment segment, ModelClassFactory factory, ParserConfiguration parserConfiguration) throws HL7Exception { if (!(segment.getName().contains("MFE")) && Version.versionOf(segment.getMessage().getVersion()).isGreaterThan(Version.V23)) { throw new IllegalArgumentException("Expected MFE segment, but was: " + segment.getName()); } fix(segment, 5, 4, null, null, factory, parserConfiguration); }
public int numFields() { return getDelegate().numFields(); }
public String[] getNames() { return getDelegate().getNames(); }
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()); }
public String encode() throws HL7Exception { return getDelegate().encode(); }
public int getMaxCardinality(int number) throws HL7Exception { return getDelegate().getMaxCardinality(number); }
public int getLength(int number) throws HL7Exception { return getDelegate().getLength(number); }
/** * Checks a segment against a list of allowed fields (ie those mentioned in the profile with * usage other than X). Returns a list of exceptions representing field that appear but are not * supposed to. * * @param allowedFields an array of Integers containing field #s of allowed fields */ protected void checkForExtraFields(Segment segment, List<Integer> allowedFields, List<HL7Exception> exList) throws ProfileException { for (int i = 1; i <= segment.numFields(); i++) { if (!allowedFields.contains(i)) { try { Type[] reps = segment.getField(i); for (Type rep : reps) { if (!rep.isEmpty()) { HL7Exception e = new XElementPresentException("Field " + i + " in " + segment.getName() + " appears in the message but not in the profile"); exList.add(e); } } } catch (HL7Exception he) { throw new ProfileException("Problem testing against profile", he); } } } }
Primitive type = (Primitive) segment.getField(typeField, 0); Type[] reps = segment.getField(dataField); for (Type rep : reps) { Varies v = (Varies)rep; if (type.getValue() == null) { if (defaultType != null) { LOG.debug("setting default {}-{} type to {}", new Object[] {segment.getName(), typeField, defaultType}); type.setValue(defaultType); if (!(v.getData() instanceof Primitive) || ((Primitive) v.getData()).getValue() != null) { throw new HL7Exception(String.format( "A datatype for %s-%n must be specified in %s-%n.", segment.getName(), dataField, segment.getName(), typeField), ErrorCode.REQUIRED_FIELD_MISSING); String version = segment.getMessage().getVersion(); String typeValue = type.getValue(); Class<? extends Type> c = factory.getTypeClass(typeValue, version); Primitive obx1 = (Primitive) segment.getField(1, 0); HL7Exception h = new HL7Exception("\'" + type.getValue() + "\' in record " + obx1.getValue() + " is invalid for version " + version, ErrorCode.DATA_TYPE_ERROR); h.setSegmentName(segment.getName()); h.setFieldPosition(typeField); throw h; for (Type stype : subComponentsInFirstField) { if (firstComponentValue.length() != 0) {
private void parseReps(Segment segmentObject, Element segmentElement, String fieldName, int fieldNum) throws HL7Exception { NodeList reps = segmentElement.getElementsByTagName(fieldName); for (int i = 0; i < reps.getLength(); i++) { parse(segmentObject.getField(fieldNum, i), (Element) reps.item(i)); } }
if (isDelimDefSegment(destination.getName())) { fieldOffset = 1; boolean isMSH2 = isDelimDefSegment(destination.getName()) && i+fieldOffset == 2; if (isMSH2) { reps = new String[1]; Type field = destination.getField(i + fieldOffset, j); if (isMSH2) { Terser.getPrimitive(field, 1, 1).setValue(reps[j]); e.setSegmentRepetition(MessageIterator.getIndex(destination.getParent(), destination).rep); e.setSegmentName(destination.getName()); throw e;
public static void fixMFE4(Segment segment, ModelClassFactory factory, ParserConfiguration parserConfiguration) throws HL7Exception { if (!(segment.getName().contains("MFE")) && Version.versionOf(segment.getMessage().getVersion()).isGreaterThan(Version.V23)) { throw new IllegalArgumentException("Expected MFE segment, but was: " + segment.getName()); } fix(segment, 5, 4, null, null, factory, parserConfiguration); }
public int numFields() { return getDelegate().numFields(); }