@Test public void shouldHandleBasicAllTypes() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource("basic-types-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(1).fields(); assertThat(fields.get(0).name(), is("header")); assertThat(fields.get(1).name(), is("EDTField")); assertThat(fields.get(2).name(), is("ENUMField")); assertThat(fields.get(3).name(), is("SETField")); assertThat(fields.get(4).name(), is("int64Field")); } }
@Test public void shouldHandleEmbeddedCountForGroup() throws Exception { final MessageSchema schema = parse( TestUtil.getLocalResource("embedded-length-and-count-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(1).fields(); assertThat(fields.get(1).name(), is("ListOrdGrp")); assertThat(valueOf(fields.get(1).id()), is(valueOf(73))); Assert.assertNotNull(fields.get(1).dimensionType()); final List<Field> groupFields = fields.get(1).groupFields(); Assert.assertNotNull(groupFields); }
@Test public void shouldParseSchemaSuccessfully() throws Exception { final MessageSchema schema = parse(TestUtil.getLocalResource( "group-with-data-schema.xml"), ParserOptions.DEFAULT); final List<Field> fields = schema.getMessage(1).fields(); final Field entriesGroup = fields.get(1); final CompositeType dimensionType = entriesGroup.dimensionType(); final List<Field> entriesFields = entriesGroup.groupFields(); assertThat(entriesGroup.name(), is("Entries")); assertThat(dimensionType.name(), is("groupSizeEncoding")); final Field varDataField = entriesFields.get(2); assertThat(varDataField.name(), is("varDataField")); assertTrue(varDataField.isVariableLength()); } }
.build(); XmlSchemaParser.checkForValidName(node, field.name());
final Field composite = fields.get(0); assertThat(composite.name(), is("structure")); final CompositeType compositeType = (CompositeType)composite.type();
private void addFieldSignal(final Field field, final Signal signal) { final Encoding.Builder encodingBuilder = new Encoding.Builder() .epoch(field.epoch()) .timeUnit(field.timeUnit()) .presence(mapPresence(field.presence())) .semanticType(semanticTypeOf(null, field)); if (field.presence() == Presence.CONSTANT && null != field.valueRef()) { final String valueRef = field.valueRef(); final byte[] bytes; bytes = valueRef.getBytes(StandardCharsets.UTF_8); encodingBuilder.constValue(new PrimitiveValue(bytes, "UTF-8", valueRef.length())); encodingBuilder.primitiveType(PrimitiveType.CHAR); } final Token token = new Token.Builder() .signal(signal) .size(field.computedBlockLength()) .name(field.name()) .description(field.description()) .id(field.id()) .offset(field.computedOffset()) .version(field.sinceVersion()) .deprecated(field.deprecated()) .encoding(encodingBuilder.build()) .build(); tokenList.add(token); }
handleError(node, "Offset provides insufficient space at field: " + field.name());
private Field parseGroupField(final NodeList nodeList, final int nodeIndex) throws XPathExpressionException { final String dimensionTypeName = getAttributeValue(nodeList.item(nodeIndex), "dimensionType", "groupSizeEncoding"); Type dimensionType = typeByNameMap.get(dimensionTypeName); if (dimensionType == null) { handleError(nodeList.item(nodeIndex), "could not find dimensionType: " + dimensionTypeName); } else if (!(dimensionType instanceof CompositeType)) { handleError(nodeList.item(nodeIndex), "dimensionType should be a composite type: " + dimensionTypeName); dimensionType = null; } else { ((CompositeType)dimensionType).checkForWellFormedGroupSizeEncoding(nodeList.item(nodeIndex)); } final Field field = new Field.Builder() .name(getAttributeValue(nodeList.item(nodeIndex), "name")) .description(getAttributeValueOrNull(nodeList.item(nodeIndex), "description")) .id(Integer.parseInt(getAttributeValue(nodeList.item(nodeIndex), "id"))) .blockLength(Integer.parseInt(getAttributeValue(nodeList.item(nodeIndex), "blockLength", "0"))) .sinceVersion(Integer.parseInt(getAttributeValue(nodeList.item(nodeIndex), "sinceVersion", "0"))) .dimensionType((CompositeType)dimensionType) .build(); XmlSchemaParser.checkForValidName(nodeList.item(nodeIndex), field.name()); field.groupFields(parseFieldsAndGroups(nodeList.item(nodeIndex))); // recursive call return field; }
.build(); XmlSchemaParser.checkForValidName(node, field.name());
.build(); XmlSchemaParser.checkForValidName(node, field.name());
private void addFieldSignal(final Field field, final Signal signal) { final Token token = new Token.Builder() .signal(signal) .size(field.computedBlockLength()) .name(field.name()) .id(field.id()) .offset(field.computedOffset()) .version(field.sinceVersion()) .encoding(new Encoding.Builder() .epoch(field.epoch()) .timeUnit(field.timeUnit()) .semanticType(semanticTypeOf(null, field)) .build()) .build(); tokenList.add(token); }
handleError(node, "Offset provides insufficient space at field: " + field.name());
private void addFieldSignal(final Field field, final Signal signal) { final Encoding.Builder encodingBuilder = new Encoding.Builder() .epoch(field.epoch()) .timeUnit(field.timeUnit()) .presence(mapPresence(field.presence())) .semanticType(semanticTypeOf(null, field)); if (field.presence() == Presence.CONSTANT && null != field.valueRef()) { final String valueRef = field.valueRef(); final byte[] bytes; bytes = valueRef.getBytes(StandardCharsets.UTF_8); encodingBuilder.constValue(new PrimitiveValue(bytes, "UTF-8", valueRef.length())); encodingBuilder.primitiveType(PrimitiveType.CHAR); } final Token token = new Token.Builder() .signal(signal) .size(field.computedBlockLength()) .name(field.name()) .description(field.description()) .id(field.id()) .offset(field.computedOffset()) .version(field.sinceVersion()) .deprecated(field.deprecated()) .encoding(encodingBuilder.build()) .build(); tokenList.add(token); }
private void addFieldSignal(final Field field, final Signal signal) { final Encoding.Builder encodingBuilder = new Encoding.Builder() .epoch(field.epoch()) .timeUnit(field.timeUnit()) .presence(mapPresence(field.presence())) .semanticType(semanticTypeOf(null, field)); if (field.presence() == Presence.CONSTANT && null != field.valueRef()) { final String valueRef = field.valueRef(); final byte[] bytes; bytes = valueRef.getBytes(StandardCharsets.UTF_8); encodingBuilder.constValue(new PrimitiveValue(bytes, "UTF-8", valueRef.length())); encodingBuilder.primitiveType(PrimitiveType.CHAR); } final Token token = new Token.Builder() .signal(signal) .size(field.computedBlockLength()) .name(field.name()) .description(field.description()) .id(field.id()) .offset(field.computedOffset()) .version(field.sinceVersion()) .deprecated(field.deprecated()) .encoding(encodingBuilder.build()) .build(); tokenList.add(token); }
handleError(node, "Offset provides insufficient space at field: " + field.name());
handleError(node, "Offset provides insufficient space at field: " + field.name());