Skip to content

Commit

Permalink
feat(plc4j/iec-60870): Continued implementing the portocol and creati…
Browse files Browse the repository at this point in the history
…ng the ParserSerializer testsuite.
  • Loading branch information
chrisdutz committed Aug 25, 2023
1 parent 63294e0 commit a564eeb
Show file tree
Hide file tree
Showing 11 changed files with 7,041 additions and 1,560 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.plc4x.java.iec608705104.readwrite;

import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
import static org.apache.plc4x.java.spi.generation.StaticHelper.*;

import java.time.*;
import java.util.*;
import org.apache.plc4x.java.api.exceptions.*;
import org.apache.plc4x.java.api.value.*;
import org.apache.plc4x.java.spi.codegen.*;
import org.apache.plc4x.java.spi.codegen.fields.*;
import org.apache.plc4x.java.spi.codegen.io.*;
import org.apache.plc4x.java.spi.generation.*;

// Code generated by code-generation. DO NOT EDIT.

public class APDUs implements Message {

// Properties.
protected final List<APDU> apdus;

public APDUs(List<APDU> apdus) {
super();
this.apdus = apdus;
}

public List<APDU> getApdus() {
return apdus;
}

public void serialize(WriteBuffer writeBuffer) throws SerializationException {
PositionAware positionAware = writeBuffer;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
writeBuffer.pushContext("APDUs");

// Array Field (apdus)
writeComplexTypeArrayField("apdus", apdus, writeBuffer);

writeBuffer.popContext("APDUs");
}

@Override
public int getLengthInBytes() {
return (int) Math.ceil((float) getLengthInBits() / 8.0);
}

@Override
public int getLengthInBits() {
int lengthInBits = 0;
APDUs _value = this;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();

// Array field
if (apdus != null) {
for (Message element : apdus) {
lengthInBits += element.getLengthInBits();
}
}

return lengthInBits;
}

public static APDUs staticParse(ReadBuffer readBuffer, Object... args) throws ParseException {
PositionAware positionAware = readBuffer;
return staticParse(readBuffer);
}

public static APDUs staticParse(ReadBuffer readBuffer) throws ParseException {
readBuffer.pullContext("APDUs");
PositionAware positionAware = readBuffer;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();

List<APDU> apdus =
readTerminatedArrayField(
"apdus",
new DataReaderComplexDefault<>(() -> APDU.staticParse(readBuffer), readBuffer),
() ->
((boolean)
(org.apache.plc4x.java.iec608705104.readwrite.utils.StaticHelper.finished(
readBuffer))));

readBuffer.closeContext("APDUs");
// Create the instance
APDUs _aPDUs;
_aPDUs = new APDUs(apdus);
return _aPDUs;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof APDUs)) {
return false;
}
APDUs that = (APDUs) o;
return (getApdus() == that.getApdus()) && true;
}

@Override
public int hashCode() {
return Objects.hash(getApdus());
}

@Override
public String toString() {
WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
try {
writeBufferBoxBased.writeSerializable(this);
} catch (SerializationException e) {
throw new RuntimeException(e);
}
return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,43 @@

public class DoubleCommand implements Message {

public DoubleCommand() {
// Properties.
protected final QualifierOfCommand qoc;
protected final byte dcs;

public DoubleCommand(QualifierOfCommand qoc, byte dcs) {
super();
this.qoc = qoc;
this.dcs = dcs;
}

public QualifierOfCommand getQoc() {
return qoc;
}

public byte getDcs() {
return dcs;
}

public void serialize(WriteBuffer writeBuffer) throws SerializationException {
PositionAware positionAware = writeBuffer;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
writeBuffer.pushContext("DoubleCommand");

// Simple Field (qoc)
writeSimpleField(
"qoc",
qoc,
new DataWriterComplexDefault<>(writeBuffer),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

// Simple Field (dcs)
writeSimpleField(
"dcs",
dcs,
writeUnsignedByte(writeBuffer, 2),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

writeBuffer.popContext("DoubleCommand");
}

Expand All @@ -60,6 +88,12 @@ public int getLengthInBits() {
DoubleCommand _value = this;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();

// Simple field (qoc)
lengthInBits += qoc.getLengthInBits();

// Simple field (dcs)
lengthInBits += 2;

return lengthInBits;
}

Expand All @@ -74,10 +108,23 @@ public static DoubleCommand staticParse(ReadBuffer readBuffer) throws ParseExcep
PositionAware positionAware = readBuffer;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();

QualifierOfCommand qoc =
readSimpleField(
"qoc",
new DataReaderComplexDefault<>(
() -> QualifierOfCommand.staticParse(readBuffer), readBuffer),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

byte dcs =
readSimpleField(
"dcs",
readUnsignedByte(readBuffer, 2),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

readBuffer.closeContext("DoubleCommand");
// Create the instance
DoubleCommand _doubleCommand;
_doubleCommand = new DoubleCommand();
_doubleCommand = new DoubleCommand(qoc, dcs);
return _doubleCommand;
}

Expand All @@ -90,12 +137,12 @@ public boolean equals(Object o) {
return false;
}
DoubleCommand that = (DoubleCommand) o;
return true;
return (getQoc() == that.getQoc()) && (getDcs() == that.getDcs()) && true;
}

@Override
public int hashCode() {
return Objects.hash();
return Objects.hash(getQoc(), getDcs());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,43 @@

public class RegulatingStepCommand implements Message {

public RegulatingStepCommand() {
// Properties.
protected final QualifierOfCommand qoc;
protected final byte rcs;

public RegulatingStepCommand(QualifierOfCommand qoc, byte rcs) {
super();
this.qoc = qoc;
this.rcs = rcs;
}

public QualifierOfCommand getQoc() {
return qoc;
}

public byte getRcs() {
return rcs;
}

public void serialize(WriteBuffer writeBuffer) throws SerializationException {
PositionAware positionAware = writeBuffer;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
writeBuffer.pushContext("RegulatingStepCommand");

// Simple Field (qoc)
writeSimpleField(
"qoc",
qoc,
new DataWriterComplexDefault<>(writeBuffer),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

// Simple Field (rcs)
writeSimpleField(
"rcs",
rcs,
writeUnsignedByte(writeBuffer, 2),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

writeBuffer.popContext("RegulatingStepCommand");
}

Expand All @@ -60,6 +88,12 @@ public int getLengthInBits() {
RegulatingStepCommand _value = this;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();

// Simple field (qoc)
lengthInBits += qoc.getLengthInBits();

// Simple field (rcs)
lengthInBits += 2;

return lengthInBits;
}

Expand All @@ -74,10 +108,23 @@ public static RegulatingStepCommand staticParse(ReadBuffer readBuffer) throws Pa
PositionAware positionAware = readBuffer;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();

QualifierOfCommand qoc =
readSimpleField(
"qoc",
new DataReaderComplexDefault<>(
() -> QualifierOfCommand.staticParse(readBuffer), readBuffer),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

byte rcs =
readSimpleField(
"rcs",
readUnsignedByte(readBuffer, 2),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

readBuffer.closeContext("RegulatingStepCommand");
// Create the instance
RegulatingStepCommand _regulatingStepCommand;
_regulatingStepCommand = new RegulatingStepCommand();
_regulatingStepCommand = new RegulatingStepCommand(qoc, rcs);
return _regulatingStepCommand;
}

Expand All @@ -90,12 +137,12 @@ public boolean equals(Object o) {
return false;
}
RegulatingStepCommand that = (RegulatingStepCommand) o;
return true;
return (getQoc() == that.getQoc()) && (getRcs() == that.getRcs()) && true;
}

@Override
public int hashCode() {
return Objects.hash();
return Objects.hash(getQoc(), getRcs());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@
public class ShortFloatingPointNumber implements Message {

// Properties.
protected final float value;
protected final int value;

public ShortFloatingPointNumber(float value) {
public ShortFloatingPointNumber(int value) {
super();
this.value = value;
}

public float getValue() {
public int getValue() {
return value;
}

Expand All @@ -58,7 +58,7 @@ public void serialize(WriteBuffer writeBuffer) throws SerializationException {
writeSimpleField(
"value",
value,
writeFloat(writeBuffer, 16),
writeUnsignedInt(writeBuffer, 16),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

writeBuffer.popContext("ShortFloatingPointNumber");
Expand Down Expand Up @@ -92,9 +92,11 @@ public static ShortFloatingPointNumber staticParse(ReadBuffer readBuffer) throws
PositionAware positionAware = readBuffer;
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();

float value =
int value =
readSimpleField(
"value", readFloat(readBuffer, 16), WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));
"value",
readUnsignedInt(readBuffer, 16),
WithOption.WithByteOrder(ByteOrder.LITTLE_ENDIAN));

readBuffer.closeContext("ShortFloatingPointNumber");
// Create the instance
Expand Down
Loading

0 comments on commit a564eeb

Please sign in to comment.