Skip to content

Commit

Permalink
fix(plc4j/codgen): write encoding of strings fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
sruehl committed Jan 24, 2022
1 parent 15524ae commit e7dcb11
Show file tree
Hide file tree
Showing 31 changed files with 385 additions and 362 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ public<#if type.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${ty
<#assign namedField = field.asNamedField().orElseThrow()>

// Simple Field (${namedField.name})
<#if helper.isEnumTypeReference(typedField.type)>writeSimpleEnumField("${namedField.name}", "${helper.getLanguageTypeNameForField(field)}", ${namedField.name}, ${helper.getEnumDataWriterCall(typedField.type, namedField.name, "value")});<#else>writeSimpleField("${namedField.name}", ${simpleField.name}, ${helper.getDataWriterCall(typedField.type, namedField.name)});</#if>
<#if helper.isEnumTypeReference(typedField.type)>writeSimpleEnumField("${namedField.name}", "${helper.getLanguageTypeNameForField(field)}", ${namedField.name}, ${helper.getEnumDataWriterCall(typedField.type, namedField.name, "value")});<#else>writeSimpleField("${namedField.name}", ${simpleField.name}, ${helper.getDataWriterCall(typedField.type, namedField.name)}${helper.getFieldOptions(typedField, parserArguments)});</#if>
<#break>
<#case "switch">
<#assign switchField = field.asSwitchField().orElseThrow()>
Expand Down Expand Up @@ -688,7 +688,7 @@ public<#if type.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${ty
<#assign validationField = field.asValidationField().orElseThrow()>
// Validation
if (!(${helper.toParseExpression(validationField, helper.boolTypeReference, validationField.getValidationExpression(), null)})) {
throw new ParseAssertException(${validationField.getDescription().orElse("Validation failed")});
throw new ParseAssertException(${validationField.getDescription().orElse("Validation failed")});
}
<#break>
<#case "peek">
Expand Down
624 changes: 313 additions & 311 deletions plc4go/assets/testing/protocols/bacnet/ParserSerializerTestsuite.xml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@

public interface FieldCommons {

default Optional<ByteOrder> extractByteOder(WithReaderArgs... readerArgs) {
return extractByteOder(Stream.of(readerArgs).map(WithReaderWriterArgs.class::cast).toArray(WithReaderWriterArgs[]::new));
default Optional<ByteOrder> extractByteOrder(WithReaderArgs... readerArgs) {
return extractByteOrder(Stream.of(readerArgs).map(WithReaderWriterArgs.class::cast).toArray(WithReaderWriterArgs[]::new));
}

default Optional<ByteOrder> extractByteOder(WithWriterArgs... writerArgs) {
return extractByteOder(Stream.of(writerArgs).map(WithReaderWriterArgs.class::cast).toArray(WithReaderWriterArgs[]::new));
default Optional<ByteOrder> extractByteOrder(WithWriterArgs... writerArgs) {
return extractByteOrder(Stream.of(writerArgs).map(WithReaderWriterArgs.class::cast).toArray(WithReaderWriterArgs[]::new));
}

default Optional<ByteOrder> extractByteOder(WithReaderWriterArgs... readerWriterArgs) {
default Optional<ByteOrder> extractByteOrder(WithReaderWriterArgs... readerWriterArgs) {
for (WithReaderWriterArgs arg : readerWriterArgs) {
if (arg instanceof withOptionByteOrder) {
return Optional.of(((withOptionByteOrder) arg).byteOrder());
Expand All @@ -44,6 +44,23 @@ default Optional<ByteOrder> extractByteOder(WithReaderWriterArgs... readerWriter
return Optional.empty();
}

default Optional<String> extractEncoding(WithReaderArgs... readerArgs) {
return extractEncoding(Stream.of(readerArgs).map(WithReaderWriterArgs.class::cast).toArray(WithReaderWriterArgs[]::new));
}

default Optional<String> extractEncoding(WithWriterArgs... writerArgs) {
return extractEncoding(Stream.of(writerArgs).map(WithReaderWriterArgs.class::cast).toArray(WithReaderWriterArgs[]::new));
}

default Optional<String> extractEncoding(WithReaderWriterArgs... readerWriterArgs) {
for (WithReaderWriterArgs arg : readerWriterArgs) {
if (arg instanceof withOptionEncoding) {
return Optional.of(((withOptionEncoding) arg).encoding());
}
}
return Optional.empty();
}

default <T> T switchParseByteOrderIfNecessary(RunParseWrapped<T> runnable, ByteOrderAware byteOrderAware, ByteOrder wantedByteOrder) throws ParseException {
Objects.requireNonNull(runnable);
Objects.requireNonNull(byteOrderAware);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class FieldReaderChecksum<T> implements FieldCommons {

public T readChecksumField(String logicalName, DataReader<T> dataReader, T referenceValue, WithReaderArgs... readerArgs) throws ParseException {
LOGGER.debug("reading field {}", logicalName);
T checksumValue = switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
T checksumValue = switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
if (!Objects.equals(checksumValue, referenceValue)) {
throw new ParseException("Checksum value '" + checksumValue + "' doesn't match expected '" + referenceValue + "'");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class FieldReaderConst<T> implements FieldCommons {

public T readConstField(String logicalName, DataReader<T> dataReader, T expectedValue, WithReaderArgs... readerArgs) throws ParseException {
LOGGER.debug("reading field {}", logicalName);
T constValue = switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
T constValue = switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
if (!Objects.equals(constValue, expectedValue)) {
throw new ParseException("Actual value " + constValue + " doesn't match expected " + expectedValue + ". Byte position: " + dataReader.getPos());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldReaderDiscriminator<T> implements FieldCommons {

public T readDiscriminatorField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
LOGGER.debug("reading field {}", logicalName);
return switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
return switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public class FieldReaderEnum<T> implements FieldCommons {
public T readEnumField(String logicalName, String innerName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
LOGGER.debug("reading field {}", logicalName);
dataReader.pullContext(logicalName, WithReaderWriterArgs.WithRenderAsList(true));
T result = switchParseByteOrderIfNecessary(() -> dataReader.read(innerName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
T result = switchParseByteOrderIfNecessary(() -> dataReader.read(innerName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
dataReader.closeContext(logicalName, WithReaderWriterArgs.WithRenderAsList(true));
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldReaderImplicit<T> implements FieldCommons {

public T readImplicitField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
LOGGER.debug("reading field {}", logicalName);
return switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
return switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
package org.apache.plc4x.java.spi.codegen.fields;

import org.apache.plc4x.java.spi.codegen.FieldCommons;
import org.apache.plc4x.java.spi.codegen.io.DataReader;
import org.apache.plc4x.java.spi.codegen.io.ParseSupplier;
import org.apache.plc4x.java.spi.generation.ParseException;
import org.apache.plc4x.java.spi.generation.ReadBuffer;
Expand All @@ -34,7 +33,7 @@ public class FieldReaderManual<T> implements FieldCommons {
public T readManualField(String logicalName, ReadBuffer readBuffer, ParseSupplier<T> parseFunction, WithReaderArgs... readerArgs) throws ParseException {
LOGGER.debug("reading field {}", logicalName);
readBuffer.pullContext(logicalName);
T value = switchParseByteOrderIfNecessary(parseFunction::get, readBuffer, extractByteOder(readerArgs).orElse(null));
T value = switchParseByteOrderIfNecessary(parseFunction::get, readBuffer, extractByteOrder(readerArgs).orElse(null));
readBuffer.closeContext(logicalName);
return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public T readOptionalField(String logicalName, DataReader<T> dataReader, boolean

int curPos = dataReader.getPos();
try {
T field = switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
T field = switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
LOGGER.debug("done reading field {}. Value: {}", logicalName, field);
return field;
} catch (ParseAssertException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public T readPeekField(String logicalName, DataReader<T> dataReader, int offset,
int curPos = dataReader.getPos();
try {
// TODO: implement offset. We either need to pass the readBuffer or add a instruction to the dataReader
T field = switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
T field = switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
LOGGER.debug("done reading field {}. Value: {}", logicalName, field);
return field;
} catch (ParseAssertException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldReaderSimple<T> implements FieldCommons {

public T readSimpleField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
LOGGER.debug("reading field {}", logicalName);
return switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
return switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldReaderTypeSwitch<T> implements FieldCommons {

public T readTypeSwitchField(String logicalName, DataReader<T> dataReader, WithReaderArgs... readerArgs) throws ParseException {
LOGGER.debug("reading field {}", logicalName);
return switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOder(readerArgs).orElse(null));
return switchParseByteOrderIfNecessary(() -> dataReader.read(logicalName, readerArgs), dataReader, extractByteOrder(readerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public void writeSimpleTypeArrayField(String logicalName, List<T> values, DataWr
}
dataWriter.popContext(logicalName, WithReaderWriterArgs.WithRenderAsList(true));
}
}, dataWriter, extractByteOder(writerArgs).orElse(null));
}, dataWriter, extractByteOrder(writerArgs).orElse(null));
}

public void writeComplexTypeArrayField(String logicalName, List<? extends Message> values, WriteBuffer writeBuffer, WithWriterArgs... writerArgs) throws SerializationException {
Expand All @@ -60,7 +60,7 @@ public void writeComplexTypeArrayField(String logicalName, List<? extends Messag
}
writeBuffer.popContext(logicalName, WithReaderWriterArgs.WithRenderAsList(true));
}
}, writeBuffer, extractByteOder(writerArgs).orElse(null));
}, writeBuffer, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldWriterChecksum<T> implements FieldCommons {

public void writeChecksumField(String logicalName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldWriterConst<T> implements FieldCommons {

public void writeConstField(String logicalName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldWriterDiscriminator<T> implements FieldCommons {

public void writeDiscriminatorField(String logicalName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class FieldWriterDiscriminatorEnum<T> implements FieldCommons {
public void writeDiscriminatorEnumField(String logicalName, String innerName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
dataWriter.pushContext(logicalName);
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(innerName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(innerName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
dataWriter.popContext(logicalName);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class FieldWriterEnum<T> implements FieldCommons {
public void writeEnumField(String logicalName, String innerName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
dataWriter.pushContext(logicalName);
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(innerName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(innerName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
dataWriter.popContext(logicalName);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldWriterImplicit<T> implements FieldCommons {

public void writeImplicitField(String logicalName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldWriterManual<T> implements FieldCommons {

public void writeManualField(String logicalName, RunSerializeWrapped consumer, WriteBuffer writeBuffer, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
switchSerializeByteOrderIfNecessary(consumer, writeBuffer, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(consumer, writeBuffer, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void writeManualArrayField(String logicalName, List<T> values, ConsumeSer
}
writeBuffer.popContext(logicalName, WithReaderWriterArgs.WithRenderAsList(true));
}
}, writeBuffer, extractByteOder(writerArgs).orElse(null));
}, writeBuffer, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class FieldWriterOptional<T> implements FieldCommons {
public void writeOptionalField(String logicalName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
if (value != null) {
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void writeOptionalEnumField(String logicalName, String innerName, T value
LOGGER.debug("write field {}", logicalName);
dataWriter.pushContext(logicalName);
if(value != null) {
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(innerName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(innerName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
}
dataWriter.popContext(logicalName);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public void writePaddingField(String logicalName, int timesPadding, T value, Dat
dataWriter.write("", value, writerArgs);
}
dataWriter.popContext(logicalName, WithReaderWriterArgs.WithRenderAsList(true));
}, dataWriter, extractByteOder(writerArgs).orElse(null));
}, dataWriter, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldWriterReserved<T> implements FieldCommons {

public void writeReservedField(String logicalName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class FieldWriterSimple<T> implements FieldCommons {

public void writeSimpleField(String logicalName, T value, DataWriter<T> dataWriter, WithWriterArgs... writerArgs) throws SerializationException {
LOGGER.debug("write field {}", logicalName);
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOder(writerArgs).orElse(null));
switchSerializeByteOrderIfNecessary(() -> dataWriter.write(logicalName, value, writerArgs), dataWriter, extractByteOrder(writerArgs).orElse(null));
}

}
Loading

0 comments on commit e7dcb11

Please sign in to comment.