You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2022/08/24 16:12:12 UTC
[plc4x] 03/12: chore(protocols/plc4x-api): Added a new "protocol" for keeping track of the API types (PlcValueType, PlcResponseCode, PlcSubscriptionType)
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch feature/ads-symbol-discovery
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit d610b0a6ff098ee02b8220db6a6d1dcdf0ae36f1
Author: Christofer Dutz <ch...@rivian.com>
AuthorDate: Wed Aug 24 08:52:59 2022 +0200
chore(protocols/plc4x-api): Added a new "protocol" for keeping track of the API types (PlcValueType, PlcResponseCode, PlcSubscriptionType)
---
protocols/plc4x-api/pom.xml | 43 +++++++++++
.../plc4x/protocol/plc4xapi/v0/Plc4xApi.java | 57 ++++++++++++++
...e.plc4x.plugins.codegenerator.protocol.Protocol | 19 +++++
.../protocols/plc4xapi/v0/plc4x-api.mspec | 87 ++++++++++++++++++++++
.../protocol/plc4xapi/v0/Plc4xProtocolTest.java | 38 ++++++++++
.../plc4x-api/src/test/resources/logback-test.xml | 36 +++++++++
protocols/pom.xml | 1 +
7 files changed, 281 insertions(+)
diff --git a/protocols/plc4x-api/pom.xml b/protocols/plc4x-api/pom.xml
new file mode 100644
index 000000000..9918c2804
--- /dev/null
+++ b/protocols/plc4x-api/pom.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.plc4x</groupId>
+ <artifactId>plc4x-protocols</artifactId>
+ <version>0.10.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>plc4x-protocols-plc4x-api</artifactId>
+
+ <name>Protocols: PLC4X (API)</name>
+ <description>General purpose API types</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.plc4x</groupId>
+ <artifactId>plc4x-code-generation-protocol-base-mspec</artifactId>
+ <version>0.10.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/protocols/plc4x-api/src/main/java/org/apache/plc4x/protocol/plc4xapi/v0/Plc4xApi.java b/protocols/plc4x-api/src/main/java/org/apache/plc4x/protocol/plc4xapi/v0/Plc4xApi.java
new file mode 100644
index 000000000..6e33d85cd
--- /dev/null
+++ b/protocols/plc4x-api/src/main/java/org/apache/plc4x/protocol/plc4xapi/v0/Plc4xApi.java
@@ -0,0 +1,57 @@
+/*
+ * 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.protocol.plc4xapi.v0;
+
+import org.apache.plc4x.plugins.codegenerator.language.mspec.parser.MessageFormatParser;
+import org.apache.plc4x.plugins.codegenerator.language.mspec.protocol.ProtocolHelpers;
+import org.apache.plc4x.plugins.codegenerator.language.mspec.protocol.ValidatableTypeContext;
+import org.apache.plc4x.plugins.codegenerator.protocol.Protocol;
+import org.apache.plc4x.plugins.codegenerator.protocol.TypeContext;
+import org.apache.plc4x.plugins.codegenerator.types.exceptions.GenerationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Optional;
+
+public class Plc4xApi implements Protocol, ProtocolHelpers {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(Plc4xApi.class);
+
+ @Override
+ public String getName() {
+ return "plc4x-api";
+ }
+
+ @Override
+ public Optional<String> getVersion() {
+ return Optional.of("0");
+ }
+
+ @Override
+ public TypeContext getTypeContext() throws GenerationException {
+ ValidatableTypeContext typeContext;
+
+ LOGGER.info("Parsing: plc4x-api.mspec");
+ typeContext = new MessageFormatParser().parse(getMspecStream());
+
+ typeContext.validate();
+ return typeContext;
+ }
+
+}
diff --git a/protocols/plc4x-api/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol b/protocols/plc4x-api/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol
new file mode 100644
index 000000000..fb606ee83
--- /dev/null
+++ b/protocols/plc4x-api/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+org.apache.plc4x.protocol.plc4xapi.v0.Plc4xApi
diff --git a/protocols/plc4x-api/src/main/resources/protocols/plc4xapi/v0/plc4x-api.mspec b/protocols/plc4x-api/src/main/resources/protocols/plc4xapi/v0/plc4x-api.mspec
new file mode 100644
index 000000000..6d5a53f66
--- /dev/null
+++ b/protocols/plc4x-api/src/main/resources/protocols/plc4xapi/v0/plc4x-api.mspec
@@ -0,0 +1,87 @@
+/*
+ * 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.
+ */
+
+[enum uint 8 PlcResponseCode
+ ['0x01' OK ]
+ ['0x02' NOT_FOUND ]
+ ['0x03' ACCESS_DENIED ]
+ ['0x04' INVALID_ADDRESS ]
+ ['0x06' INVALID_DATATYPE]
+ ['0x07' INVALID_DATA ]
+ ['0x08' INTERNAL_ERROR ]
+ ['0x09' REMOTE_BUSY ]
+ ['0x0A' REMOTE_ERROR ]
+ ['0x0B' UNSUPPORTED ]
+ ['0x0C' RESPONSE_PENDING]
+]
+
+[enum uint 8 PlcValueType
+ ['0x00' NULL ]
+
+ // Bit Strings
+ ['0x01' BOOL ]
+ ['0x02' BYTE ]
+ ['0x03' WORD ]
+ ['0x04' DWORD ]
+ ['0x05' LWORD ]
+
+ // Unsigned Integers
+ ['0x11' USINT ]
+ ['0x12' UINT ]
+ ['0x13' UDINT ]
+ ['0x14' ULINT ]
+
+ // Signed Integers
+ ['0x21' SINT ]
+ ['0x22' INT ]
+ ['0x23' DINT ]
+ ['0x24' LINT ]
+
+ // Floating Point Values
+ ['0x31' REAL ]
+ ['0x32' LREAL ]
+
+ // Chars and Strings
+ ['0x41' CHAR ]
+ ['0x42' WCHAR ]
+ ['0x43' STRING ]
+ ['0x44' WSTRING ]
+
+ // Times and Dates
+ ['0x51' TIME ]
+ ['0x52' LTIME ]
+ ['0x53' DATE ]
+ ['0x54' LDATE ]
+ ['0x55' TIME_OF_DAY ]
+ ['0x56' LTIME_OF_DAY ]
+ ['0x57' DATE_AND_TIME ]
+ ['0x58' LDATE_AND_TIME]
+
+ // Complex types
+ ['0x61' Struct ]
+ ['0x62' List ]
+
+ ['0x71' RAW_BYTE_ARRAY]
+]
+
+[enum uint 8 PlcSubscriptionType
+ ['0x01' CYCLIC ]
+ ['0x02' CHANGE_OF_STATE]
+ ['0x03' EVENT ]
+]
\ No newline at end of file
diff --git a/protocols/plc4x-api/src/test/java/org/apache/plc4x/protocol/plc4xapi/v0/Plc4xProtocolTest.java b/protocols/plc4x-api/src/test/java/org/apache/plc4x/protocol/plc4xapi/v0/Plc4xProtocolTest.java
new file mode 100644
index 000000000..19e305321
--- /dev/null
+++ b/protocols/plc4x-api/src/test/java/org/apache/plc4x/protocol/plc4xapi/v0/Plc4xProtocolTest.java
@@ -0,0 +1,38 @@
+/*
+ * 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.protocol.plc4xapi.v0;
+
+import org.apache.plc4x.plugins.codegenerator.protocol.TypeContext;
+import org.apache.plc4x.protocol.plc4xapi.v0.Plc4xApi;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+
+class Plc4xProtocolTest {
+
+ @Test
+ void getTypeContext() throws Exception {
+ TypeContext typeContext = new Plc4xApi().getTypeContext();
+ assertNotNull(typeContext);
+ assertNotNull(typeContext.getUnresolvedTypeReferences());
+ assertSame(0, typeContext.getUnresolvedTypeReferences().size());
+ }
+
+}
diff --git a/protocols/plc4x-api/src/test/resources/logback-test.xml b/protocols/plc4x-api/src/test/resources/logback-test.xml
new file mode 100644
index 000000000..cc4250b21
--- /dev/null
+++ b/protocols/plc4x-api/src/test/resources/logback-test.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://ch.qos.logback/xml/ns/logback
+ https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <root level="info">
+ <appender-ref ref="STDOUT" />
+ </root>
+
+</configuration>
\ No newline at end of file
diff --git a/protocols/pom.xml b/protocols/pom.xml
index 34d650b49..d2e882a0d 100644
--- a/protocols/pom.xml
+++ b/protocols/pom.xml
@@ -48,6 +48,7 @@
<module>mqtt</module>
<module>opcua</module>
<module>plc4x</module>
+ <module>plc4x-api</module>
<module>profinet</module>
<module>s7</module>
<module>simulated</module>