You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2024/09/04 12:35:46 UTC
(plc4x) branch develop updated (502c24b5d1 -> beb483e8f1)
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
from 502c24b5d1 chore(plc4go): install local tool to simply usage
new 107db3bf09 feat(plc4go/bacnetip): add IAmRequest support
new a5e3dff4cd fix(plc4go): corrected typo in licencer
new 69ccb804b9 feat(plc4go/plc4xLicencer): use dedicated licence file
new beb483e8f1 feat(plc4go/plc4xGenerator): add support for custom licences
The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../.plc4xLicencer.header | 0
plc4go/README.md | 8 +-
plc4go/internal/bacnetip/bacgopes/comp.go | 48 +++++++
.../bacnetip/bacgopes/netservice_NetworkAdapter.go | 2 -
.../netservice_NetworkServiceAccessPoint.go | 53 ++++----
.../bacgopes/netservice_NetworkServiceElement.go | 141 +++++++++++++++------
.../bacgopes/tests/test_network/test_net_3_test.go | 6 +-
plc4go/internal/cbus/Tag.go | 2 +-
plc4go/internal/cbus/TagHandler.go | 2 +-
plc4go/internal/cbus/statusrequesttype_string.go | 1 +
plc4go/internal/cbus/tagtype_string.go | 1 +
plc4go/internal/modbus/TagHandler.go | 2 +-
plc4go/internal/modbus/tagtype_string.go | 1 +
plc4go/internal/s7/TagHandler.go | 2 +-
plc4go/internal/s7/tagtype_string.go | 1 +
plc4go/pkg/api/model/plc_subscription.go | 2 +-
plc4go/pkg/api/model/plcsubscriptiontype_string.go | 1 +
plc4go/pom.xml | 4 +-
plc4go/spi/testutils/DriverTestRunner.go | 2 +-
plc4go/spi/testutils/steptype_string.go | 1 +
plc4go/tools/common/common.go | 58 +++++++++
plc4go/tools/plc4xGenerator/main.go | 38 ++----
.../tools/{plc4xLicenser => plc4xLicencer}/main.go | 44 ++-----
23 files changed, 281 insertions(+), 139 deletions(-)
copy .idea/fileTemplates/includes/File Header Go.go => plc4go/.plc4xLicencer.header (100%)
create mode 100644 plc4go/tools/common/common.go
rename plc4go/tools/{plc4xLicenser => plc4xLicencer}/main.go (70%)
(plc4x) 03/04: feat(plc4go/plc4xLicencer): use dedicated licence file
Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 69ccb804b92802a5ad841ca3acc2012eeb69e60e
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Sep 4 14:11:46 2024 +0200
feat(plc4go/plc4xLicencer): use dedicated licence file
---
plc4go/.plc4xLicencer.header | 18 ++++++++++++++++++
plc4go/tools/plc4xLicencer/main.go | 2 +-
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/plc4go/.plc4xLicencer.header b/plc4go/.plc4xLicencer.header
new file mode 100644
index 0000000000..ba830d1f79
--- /dev/null
+++ b/plc4go/.plc4xLicencer.header
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
diff --git a/plc4go/tools/plc4xLicencer/main.go b/plc4go/tools/plc4xLicencer/main.go
index 89d6963034..396efee443 100644
--- a/plc4go/tools/plc4xLicencer/main.go
+++ b/plc4go/tools/plc4xLicencer/main.go
@@ -35,7 +35,7 @@ var (
typeNames = flag.String("type", "", "comma-separated list of type names; must be set")
output = flag.String("output", "", "output file name; default srcdir/<type>_string.go")
buildTags = flag.String("tags", "", "comma-separated list of build tags to apply")
- licenseFile = flag.String("licenseFile", ".mockery.asl.header", "file containing the license (will be searched upwards)")
+ licenseFile = flag.String("licenseFile", ".plc4xLicencer.header", "file containing the license (will be searched upwards)")
verbose = flag.Bool("verbose", false, "verbosity")
)
(plc4x) 02/04: fix(plc4go): corrected typo in licencer
Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit a5e3dff4cdf58180f2f750d401b8232cdf789912
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Sep 4 14:10:39 2024 +0200
fix(plc4go): corrected typo in licencer
---
plc4go/README.md | 8 ++++----
plc4go/internal/cbus/Tag.go | 2 +-
plc4go/internal/cbus/TagHandler.go | 2 +-
plc4go/internal/cbus/statusrequesttype_string.go | 1 +
plc4go/internal/modbus/TagHandler.go | 2 +-
plc4go/internal/s7/TagHandler.go | 2 +-
plc4go/pkg/api/model/plc_subscription.go | 2 +-
plc4go/pom.xml | 4 ++--
plc4go/spi/testutils/DriverTestRunner.go | 2 +-
.../tools/{plc4xLicenser => plc4xLicencer}/main.go | 21 +++++++++++++--------
10 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/plc4go/README.md b/plc4go/README.md
index a5bb86fd4b..f5155eabae 100644
--- a/plc4go/README.md
+++ b/plc4go/README.md
@@ -43,12 +43,12 @@ To install `plc4xpcapanalyzer` run:
To install `plc4xbrowser` run:
`go install github.com/apache/plc4x-extras/plc4go/tools/plc4xbrowser@latest`
-### plc4xLicenser
+### plc4xLicencer
-`plc4xLicenser` is a generator to add the Apache licence to files
+`plc4xLicencer` is a generator to add the Apache licence to files
-To install `plc4xLicenser` run:
-`go install github.com/apache/plc4x-extras/plc4go/tools/plc4xLicenser@latest`
+To install `plc4xLicencer` run:
+`go install github.com/apache/plc4x-extras/plc4go/tools/plc4xLicencer@latest`
### plc4xGenerator
diff --git a/plc4go/internal/cbus/Tag.go b/plc4go/internal/cbus/Tag.go
index 399d48a180..8f0f67d113 100644
--- a/plc4go/internal/cbus/Tag.go
+++ b/plc4go/internal/cbus/Tag.go
@@ -33,7 +33,7 @@ import (
)
//go:generate stringer -type StatusRequestType
-//go:generate plc4xLicenser -type=StatusRequestType
+//go:generate plc4xLicencer -type=StatusRequestType
type StatusRequestType uint8
const (
diff --git a/plc4go/internal/cbus/TagHandler.go b/plc4go/internal/cbus/TagHandler.go
index 22f6e04d65..17742c58e1 100644
--- a/plc4go/internal/cbus/TagHandler.go
+++ b/plc4go/internal/cbus/TagHandler.go
@@ -36,7 +36,7 @@ import (
type TagType uint8
//go:generate stringer -type TagType
-//go:generate plc4xLicenser -type=TagType
+//go:generate plc4xLicencer -type=TagType
const (
STATUS TagType = iota
CAL_RESET /* TODO: implement me*/
diff --git a/plc4go/internal/cbus/statusrequesttype_string.go b/plc4go/internal/cbus/statusrequesttype_string.go
index 2e418ccfb6..796ab8f03f 100644
--- a/plc4go/internal/cbus/statusrequesttype_string.go
+++ b/plc4go/internal/cbus/statusrequesttype_string.go
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
// Code generated by "stringer -type StatusRequestType"; DO NOT EDIT.
package cbus
diff --git a/plc4go/internal/modbus/TagHandler.go b/plc4go/internal/modbus/TagHandler.go
index cd7f5a4b64..f16ceef78d 100644
--- a/plc4go/internal/modbus/TagHandler.go
+++ b/plc4go/internal/modbus/TagHandler.go
@@ -35,7 +35,7 @@ import (
type TagType uint8
//go:generate stringer -type TagType
-//go:generate plc4xLicenser -type=TagType
+//go:generate plc4xLicencer -type=TagType
const (
Coil TagType = 0x00
DiscreteInput TagType = 0x01
diff --git a/plc4go/internal/s7/TagHandler.go b/plc4go/internal/s7/TagHandler.go
index bc4e42dd0e..cc0d29c402 100644
--- a/plc4go/internal/s7/TagHandler.go
+++ b/plc4go/internal/s7/TagHandler.go
@@ -39,7 +39,7 @@ import (
type TagType uint8
//go:generate stringer -type TagType
-//go:generate plc4xLicenser -type=TagType
+//go:generate plc4xLicencer -type=TagType
const (
S7Tag TagType = 0x00
S7StringTag TagType = 0x01
diff --git a/plc4go/pkg/api/model/plc_subscription.go b/plc4go/pkg/api/model/plc_subscription.go
index 9cf14e05f5..88674264a1 100644
--- a/plc4go/pkg/api/model/plc_subscription.go
+++ b/plc4go/pkg/api/model/plc_subscription.go
@@ -28,7 +28,7 @@ import (
)
//go:generate stringer -type PlcSubscriptionType
-//go:generate plc4xLicenser -type=PlcSubscriptionType
+//go:generate plc4xLicencer -type=PlcSubscriptionType
type PlcSubscriptionType uint8
const (
diff --git a/plc4go/pom.xml b/plc4go/pom.xml
index 5690119f37..80c7fdd46a 100644
--- a/plc4go/pom.xml
+++ b/plc4go/pom.xml
@@ -297,14 +297,14 @@
</configuration>
</execution>
<execution>
- <id>get-plc4xLicenser</id>
+ <id>get-plc4xLicencer</id>
<phase>initialize</phase>
<goals>
<goal>install</goal>
</goals>
<configuration>
<packages>
- <package>./tools/plc4xLicenser</package>
+ <package>./tools/plc4xLicencer</package>
</packages>
</configuration>
</execution>
diff --git a/plc4go/spi/testutils/DriverTestRunner.go b/plc4go/spi/testutils/DriverTestRunner.go
index e32a9eea20..d29fa5fec2 100644
--- a/plc4go/spi/testutils/DriverTestRunner.go
+++ b/plc4go/spi/testutils/DriverTestRunner.go
@@ -498,7 +498,7 @@ type DriverTestStep struct {
type StepType uint8
//go:generate stringer -type StepType
-//go:generate plc4xLicenser -type=StepType
+//go:generate plc4xLicencer -type=StepType
const (
StepTypeOutgoingPlcMessage StepType = 0x01
StepTypeOutgoingPlcBytes StepType = 0x02
diff --git a/plc4go/tools/plc4xLicenser/main.go b/plc4go/tools/plc4xLicencer/main.go
similarity index 90%
rename from plc4go/tools/plc4xLicenser/main.go
rename to plc4go/tools/plc4xLicencer/main.go
index 1273cc7186..89d6963034 100644
--- a/plc4go/tools/plc4xLicenser/main.go
+++ b/plc4go/tools/plc4xLicencer/main.go
@@ -41,9 +41,9 @@ var (
// Usage is a replacement usage function for the flags package.
func Usage() {
- _, _ = fmt.Fprintf(os.Stderr, "Usage of plc4xLicenser:\n")
- _, _ = fmt.Fprintf(os.Stderr, "\tplc4xLicenser [flags] -type T [directory]\n")
- _, _ = fmt.Fprintf(os.Stderr, "\tplc4xLicenser [flags] -type T files... # Must be a single package\n")
+ _, _ = fmt.Fprintf(os.Stderr, "Usage of plc4xLicencer:\n")
+ _, _ = fmt.Fprintf(os.Stderr, "\tplc4xLicencer [flags] -type T [directory]\n")
+ _, _ = fmt.Fprintf(os.Stderr, "\tplc4xLicencer [flags] -type T files... # Must be a single package\n")
_, _ = fmt.Fprintf(os.Stderr, "Flags:\n")
flag.PrintDefaults()
}
@@ -91,6 +91,15 @@ func main() {
licenseFileName := *licenseFile
isAbs := path.IsAbs(licenseFileName)
+ licenceContent := GetLicenseFileContent(isAbs, licenseFileName, err2)
+
+ if err := os.WriteFile(outputName, append(licenceContent, inputFile...), 0644); err != nil {
+ log.Fatalf("writing output: %s", err)
+ }
+ fmt.Printf("Fixed plc4x license of %s\n", outputName)
+}
+
+func GetLicenseFileContent(isAbs bool, licenseFileName string, err2 error) []byte {
var licenceContent []byte
rootReached := false
currentDir, _ := os.Getwd()
@@ -115,11 +124,7 @@ func main() {
panic(err2)
}
}
-
- if err := os.WriteFile(outputName, append(licenceContent, inputFile...), 0644); err != nil {
- log.Fatalf("writing output: %s", err)
- }
- fmt.Printf("Fixed plc4x license of %s\n", outputName)
+ return licenceContent
}
// isDirectory reports whether the named file is a directory.
(plc4x) 01/04: feat(plc4go/bacnetip): add IAmRequest support
Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 107db3bf09af6ee26903a8e2ad3747dd88c2a645
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Sep 4 13:50:03 2024 +0200
feat(plc4go/bacnetip): add IAmRequest support
- work on test_net_3_test.go
---
plc4go/internal/bacnetip/bacgopes/comp.go | 48 +++++++
.../bacnetip/bacgopes/netservice_NetworkAdapter.go | 2 -
.../netservice_NetworkServiceAccessPoint.go | 53 ++++----
.../bacgopes/netservice_NetworkServiceElement.go | 141 +++++++++++++++------
.../bacgopes/tests/test_network/test_net_3_test.go | 6 +-
5 files changed, 182 insertions(+), 68 deletions(-)
diff --git a/plc4go/internal/bacnetip/bacgopes/comp.go b/plc4go/internal/bacnetip/bacgopes/comp.go
index 92c9e7a619..8116325acc 100644
--- a/plc4go/internal/bacnetip/bacgopes/comp.go
+++ b/plc4go/internal/bacnetip/bacgopes/comp.go
@@ -40,38 +40,86 @@ func NewArgs(args ...any) Args {
return args
}
+// Deprecated: use index function
func (a Args) Get0PDU() PDU {
return a[0].(PDU)
}
+// Deprecated: use index function
func (a Args) Get1PDU() PDU {
return a[1].(PDU)
}
+func (a Args) GetNPDU(index int) NPDU {
+ return argsGetOrPanic[NPDU](a, index)
+}
+
+// Deprecated: use index function
func (a Args) Get0NPDU() NPDU {
return a[0].(NPDU)
}
+// Deprecated: use index function
func (a Args) Get1NPDU() NPDU {
return a[1].(NPDU)
}
+// Deprecated: use index function
func (a Args) Get0APDU() APDU {
return a[0].(APDU)
}
+func (a Args) GetAddressOptional(index int, defaultValue *Address) *Address {
+ return argsGetOrDefault(a, index, defaultValue)
+}
+
+func (a Args) GetNetworkOptional(index int, defaultValue []*uint16) []*uint16 {
+ return argsGetOrDefault(a, index, defaultValue)
+}
+
+func (a Args) GetNetworkAdapter(index int) *NetworkAdapter {
+ return argsGetOrPanic[*NetworkAdapter](a, index)
+}
+
+func (a Args) GetNetworkAdapterOptional(index int, defaultValue *NetworkAdapter) *NetworkAdapter {
+ return argsGetOrDefault(a, index, defaultValue)
+}
+
+// Deprecated: use index function
func (a Args) Get0NetworkAdapter() *NetworkAdapter {
return a[0].(*NetworkAdapter)
}
+// Deprecated: use index function
func (a Args) Get0MultiplexClient() *_MultiplexClient {
return a[0].(*_MultiplexClient)
}
+// Deprecated: use index function
func (a Args) Get0MultiplexServer() *_MultiplexServer {
return a[0].(*_MultiplexServer)
}
+func argsGetOrPanic[T any](args Args, index int) T {
+ if index > len(args)-1 {
+ panic(fmt.Sprintf("index out of bounds: %d(len %d of %s)", index, len(args), args))
+ }
+ aAtI := args[index]
+ v, ok := aAtI.(T)
+ if !ok {
+ var _type T
+ panic(fmt.Sprintf("argument #%d with type %T is not of type %T", index, aAtI, _type))
+ }
+ return v
+}
+
+func argsGetOrDefault[T any](args Args, index int, defaultValue T) T {
+ if index > len(args)-1 {
+ return defaultValue
+ }
+ return args[index].(T)
+}
+
func (a Args) String() string {
r := ""
for i, ea := range a {
diff --git a/plc4go/internal/bacnetip/bacgopes/netservice_NetworkAdapter.go b/plc4go/internal/bacnetip/bacgopes/netservice_NetworkAdapter.go
index e3f056da37..e1dad47cab 100644
--- a/plc4go/internal/bacnetip/bacgopes/netservice_NetworkAdapter.go
+++ b/plc4go/internal/bacnetip/bacgopes/netservice_NetworkAdapter.go
@@ -86,8 +86,6 @@ func (n *NetworkAdapter) Confirmation(args Args, kwargs KWArgs) error {
case model.NPDU:
nlm = pdu.GetNlm()
apdu = pdu.GetApdu()
- default:
- return errors.Errorf("Unmapped type %T", pdu)
}
npdu, err := NewNPDU(nlm, apdu)
if err != nil {
diff --git a/plc4go/internal/bacnetip/bacgopes/netservice_NetworkServiceAccessPoint.go b/plc4go/internal/bacnetip/bacgopes/netservice_NetworkServiceAccessPoint.go
index b4aaf19fbc..4f89fad4c3 100644
--- a/plc4go/internal/bacnetip/bacgopes/netservice_NetworkServiceAccessPoint.go
+++ b/plc4go/internal/bacnetip/bacgopes/netservice_NetworkServiceAccessPoint.go
@@ -97,10 +97,6 @@ func WithNetworkServiceAccessPointRouterSID(sid int) func(*NetworkServiceAccessP
}
}
-func (n *NetworkServiceAccessPoint) String() string {
- return fmt.Sprintf("NetworkServiceAccessPoint(TBD...)") // TODO: fill some info here
-}
-
/*
Bind creates a network adapter object and bind.
@@ -460,7 +456,13 @@ func (n *NetworkServiceAccessPoint) ProcessNPDU(adapter *NetworkAdapter, npdu NP
n.log.Debug().Msg("application layer message")
// decode as a generic APDU
- apdu := NewPDU(npdu.GetApdu()).(*_PDU)
+ apdu, err := NewAPDU(npdu.GetApdu())
+ if err != nil {
+ return errors.Wrap(err, "error creating APDU")
+ }
+ if err := apdu.Decode(DeepCopy[NPDU](npdu)); err != nil {
+ return errors.Wrap(err, "error decoding APDU")
+ }
n.log.Debug().Stringer("apdu", apdu).Msg("apdu")
// see if it needs to look routed
@@ -471,47 +473,48 @@ func (n *NetworkServiceAccessPoint) ProcessNPDU(adapter *NetworkAdapter, npdu NP
if err != nil {
return errors.Wrap(err, "error creating remote address")
}
- apdu.pduSource = remoteStationAddress
+ apdu.SetPDUSource(remoteStationAddress)
} else {
- apdu.pduSource = sourceAddress
+ apdu.SetPDUSource(sourceAddress)
}
if Settings.RouteAware {
- apdu.pduSource.AddrRoute = npdu.GetPDUSource()
+ apdu.GetPDUSource().AddrRoute = npdu.GetPDUSource()
}
// map the destination
if !npdu.GetControl().GetDestinationSpecified() {
- apdu.pduDestination = n.localAdapter.adapterAddr
+ apdu.SetPDUDestination(n.localAdapter.adapterAddr)
} else if destinationAddress.AddrType == GLOBAL_BROADCAST_ADDRESS {
- apdu.pduDestination = NewGlobalBroadcast(nil)
+ apdu.SetPDUDestination(NewGlobalBroadcast(nil))
} else if destinationAddress.AddrType == GLOBAL_BROADCAST_ADDRESS {
- apdu.pduDestination = NewLocalBroadcast(nil)
+ apdu.SetPDUDestination(NewLocalBroadcast(nil))
} else {
- apdu.pduDestination = n.localAdapter.adapterAddr
+ apdu.SetPDUDestination(n.localAdapter.adapterAddr)
}
} else {
// combine the source address
if npdu.GetControl().GetSourceSpecified() {
- apdu.pduSource = sourceAddress
+ apdu.SetPDUSource(sourceAddress)
if Settings.RouteAware {
n.log.Debug().Msg("adding route")
- apdu.pduSource = npdu.GetPDUSource()
+ apdu.SetPDUSource(npdu.GetPDUSource())
}
} else {
- apdu.pduSource = npdu.GetPDUSource()
+ apdu.SetPDUSource(npdu.GetPDUSource())
}
// pass along global broadcast
if npdu.GetControl().GetDestinationSpecified() && destinationAddress.AddrType == GLOBAL_BROADCAST_ADDRESS {
- apdu.pduDestination = NewGlobalBroadcast(nil)
+ apdu.SetPDUDestination(NewGlobalBroadcast(nil))
} else {
- apdu.pduDestination = npdu.GetPDUDestination()
+ apdu.SetPDUDestination(npdu.GetPDUDestination())
}
}
- n.log.Debug().Stringer("pduSource", apdu.pduSource).Msg("apdu.pduSource")
- n.log.Debug().Stringer("pduDestination", apdu.pduDestination).Msg("apdu.pduDestination")
+ n.log.Debug().Stringer("pduSource", apdu.GetPDUSource()).Msg("apdu.pduSource")
+ n.log.Debug().Stringer("pduDestination", apdu.GetPDUDestination()).Msg("apdu.pduDestination")
+ // pass upstream to the application layer
if err := n.Response(NewArgs(apdu), NoKWArgs); err != nil {
return errors.Wrap(err, "error passing response")
}
@@ -725,8 +728,8 @@ func (n *NetworkServiceAccessPoint) ProcessNPDU(adapter *NetworkAdapter, npdu NP
func (n *NetworkServiceAccessPoint) SapIndication(args Args, kwargs KWArgs) error {
n.log.Debug().Stringer("Args", args).Stringer("KWArgs", kwargs).Msg("SapIndication")
- adapter := args.Get0NetworkAdapter()
- npdu := args.Get1NPDU()
+ adapter := args.GetNetworkAdapter(0)
+ npdu := args.GetNPDU(1)
// encode it as a generic NPDU
xpdu, err := NewNPDU(nil, nil) // TODO: add with user data thingy...
@@ -744,8 +747,8 @@ func (n *NetworkServiceAccessPoint) SapIndication(args Args, kwargs KWArgs) erro
func (n *NetworkServiceAccessPoint) SapConfirmation(args Args, kwargs KWArgs) error {
n.log.Debug().Stringer("Args", args).Stringer("KWArgs", kwargs).Msg("SapConfirmation")
- adapter := args.Get0NetworkAdapter()
- npdu := args.Get1NPDU()
+ adapter := args.GetNetworkAdapter(0)
+ npdu := args.GetNPDU(1)
// encode it as a generic NPDU
xpdu, err := NewNPDU(nil, nil) // TODO: add with user data thingy...
@@ -759,3 +762,7 @@ func (n *NetworkServiceAccessPoint) SapConfirmation(args Args, kwargs KWArgs) er
return adapter.ProcessNPDU(xpdu)
}
+
+func (n *NetworkServiceAccessPoint) String() string {
+ return fmt.Sprintf("NetworkServiceAccessPoint(TBD...)") // TODO: fill some info here
+}
diff --git a/plc4go/internal/bacnetip/bacgopes/netservice_NetworkServiceElement.go b/plc4go/internal/bacnetip/bacgopes/netservice_NetworkServiceElement.go
index 859b78e9ba..5fe4baaeee 100644
--- a/plc4go/internal/bacnetip/bacgopes/netservice_NetworkServiceElement.go
+++ b/plc4go/internal/bacnetip/bacgopes/netservice_NetworkServiceElement.go
@@ -128,7 +128,7 @@ func (n *NetworkServiceElement) Startup(_ Args, _ KWArgs) error {
// sap.router_info_cache.update_router_info(adapter.adapterNet, adapter.adapterAddr, netlist)
// send an announcement
- if err := n.iamRouterToNetwork(adapter, nil, netlist); err != nil {
+ if err := n.iamRouterToNetwork(NewArgs(adapter, nil, netlist), NoKWArgs); err != nil {
n.log.Debug().Err(err).Msg("I-Am-Router-To-Network failed")
}
}
@@ -138,8 +138,8 @@ func (n *NetworkServiceElement) Startup(_ Args, _ KWArgs) error {
func (n *NetworkServiceElement) Indication(args Args, kwargs KWArgs) error {
n.log.Debug().Stringer("Args", args).Stringer("KWArgs", kwargs).Msg("Indication")
- adapter := args.Get0NetworkAdapter()
- npdu := args.Get1NPDU()
+ adapter := args.GetNetworkAdapter(0)
+ npdu := args.GetNPDU(1)
switch message := npdu.GetRootMessage().(type) {
case model.NPDU:
@@ -147,27 +147,27 @@ func (n *NetworkServiceElement) Indication(args Args, kwargs KWArgs) error {
case model.NLMWhoIsRouterToNetwork:
return n.WhoIsRouteToNetwork(adapter, npdu, nlm)
case model.NLMIAmRouterToNetwork:
- n.IAmRouterToNetwork(adapter, nlm)
+ return n.IAmRouterToNetwork(adapter, npdu, nlm)
case model.NLMICouldBeRouterToNetwork:
- n.ICouldBeRouterToNetwork(adapter, nlm)
+ return n.ICouldBeRouterToNetwork(adapter, nlm)
case model.NLMRejectMessageToNetwork:
- n.RejectRouterToNetwork(adapter, nlm)
+ return n.RejectRouterToNetwork(adapter, nlm)
case model.NLMRouterBusyToNetwork:
- n.RouterBusyToNetwork(adapter, nlm)
+ return n.RouterBusyToNetwork(adapter, nlm)
case model.NLMRouterAvailableToNetwork:
- n.RouterAvailableToNetwork(adapter, nlm)
+ return n.RouterAvailableToNetwork(adapter, nlm)
case model.NLMInitializeRoutingTable:
- n.InitalizeRoutingTable(adapter, nlm)
+ return n.InitalizeRoutingTable(adapter, nlm)
case model.NLMInitializeRoutingTableAck:
- n.InitalizeRoutingTableAck(adapter, nlm)
+ return n.InitalizeRoutingTableAck(adapter, nlm)
case model.NLMEstablishConnectionToNetwork:
- n.EstablishConnectionToNetwork(adapter, nlm)
+ return n.EstablishConnectionToNetwork(adapter, nlm)
case model.NLMDisconnectConnectionToNetwork:
- n.DisconnectConnectionToNetwork(adapter, nlm)
+ return n.DisconnectConnectionToNetwork(adapter, nlm)
case model.NLMWhatIsNetworkNumber:
- n.WhatIsNetworkNumber(adapter, nlm)
+ return n.WhatIsNetworkNumber(adapter, nlm)
case model.NLMNetworkNumberIs:
- n.NetworkNumberIs(adapter, nlm)
+ return n.NetworkNumberIs(adapter, nlm)
default:
n.log.Debug().Stringer("nlm", nlm).Msg("Unhandled")
}
@@ -189,27 +189,27 @@ func (n *NetworkServiceElement) Confirmation(args Args, kwargs KWArgs) error {
case model.NLMWhoIsRouterToNetwork:
return n.WhoIsRouteToNetwork(adapter, npdu, nlm)
case model.NLMIAmRouterToNetwork:
- n.IAmRouterToNetwork(adapter, nlm)
+ return n.IAmRouterToNetwork(adapter, npdu, nlm)
case model.NLMICouldBeRouterToNetwork:
- n.ICouldBeRouterToNetwork(adapter, nlm)
+ return n.ICouldBeRouterToNetwork(adapter, nlm)
case model.NLMRejectMessageToNetwork:
- n.RejectRouterToNetwork(adapter, nlm)
+ return n.RejectRouterToNetwork(adapter, nlm)
case model.NLMRouterBusyToNetwork:
- n.RouterBusyToNetwork(adapter, nlm)
+ return n.RouterBusyToNetwork(adapter, nlm)
case model.NLMRouterAvailableToNetwork:
- n.RouterAvailableToNetwork(adapter, nlm)
+ return n.RouterAvailableToNetwork(adapter, nlm)
case model.NLMInitializeRoutingTable:
- n.InitalizeRoutingTable(adapter, nlm)
+ return n.InitalizeRoutingTable(adapter, nlm)
case model.NLMInitializeRoutingTableAck:
- n.InitalizeRoutingTableAck(adapter, nlm)
+ return n.InitalizeRoutingTableAck(adapter, nlm)
case model.NLMEstablishConnectionToNetwork:
- n.EstablishConnectionToNetwork(adapter, nlm)
+ return n.EstablishConnectionToNetwork(adapter, nlm)
case model.NLMDisconnectConnectionToNetwork:
- n.DisconnectConnectionToNetwork(adapter, nlm)
+ return n.DisconnectConnectionToNetwork(adapter, nlm)
case model.NLMWhatIsNetworkNumber:
- n.WhatIsNetworkNumber(adapter, nlm)
+ return n.WhatIsNetworkNumber(adapter, nlm)
case model.NLMNetworkNumberIs:
- n.NetworkNumberIs(adapter, nlm)
+ return n.NetworkNumberIs(adapter, nlm)
default:
n.log.Debug().Stringer("nlm", nlm).Msg("Unhandled")
}
@@ -219,7 +219,10 @@ func (n *NetworkServiceElement) Confirmation(args Args, kwargs KWArgs) error {
return nil
}
-func (n *NetworkServiceElement) iamRouterToNetwork(adapter *NetworkAdapter, destination *Address, network []*uint16) error {
+func (n *NetworkServiceElement) iamRouterToNetwork(args Args, _ KWArgs) error {
+ adapter := args.GetNetworkAdapterOptional(0, nil)
+ destination := args.GetAddressOptional(1, nil)
+ network := args.GetNetworkOptional(2, nil)
n.log.Debug().Stringer("adapter", adapter).Stringer("destination", destination).Interface("network", network).Msg("IamRouterToNetwork")
// reference the service access point
@@ -305,7 +308,7 @@ func (n *NetworkServiceElement) iamRouterToNetwork(adapter *NetworkAdapter, dest
}
}
- if network == nil {
+ if len(network) == 0 {
return nil
}
for _, u := range network {
@@ -332,7 +335,7 @@ func (n *NetworkServiceElement) iamRouterToNetwork(adapter *NetworkAdapter, dest
}
func (n *NetworkServiceElement) WhoIsRouteToNetwork(adapter *NetworkAdapter, npdu NPDU, nlm model.NLMWhoIsRouterToNetwork) error {
- n.log.Debug().Stringer("adapter", adapter).Stringer("nlm", nlm).Msg("WhoIsRouteToNetwork")
+ n.log.Debug().Stringer("adapter", adapter).Stringer("npdu", npdu).Stringer("nlm", nlm).Msg("WhoIsRouteToNetwork")
// reference the service access point
sap := n._getElementService().(*NetworkServiceAccessPoint) // TODO: check hard cast here...
@@ -471,46 +474,104 @@ func (n *NetworkServiceElement) WhoIsRouteToNetwork(adapter *NetworkAdapter, npd
}
}
-func (n *NetworkServiceElement) IAmRouterToNetwork(adapter *NetworkAdapter, nlm model.NLMIAmRouterToNetwork) {
- panic("not implemented") // TODO: implement me
+func (n *NetworkServiceElement) IAmRouterToNetwork(adapter *NetworkAdapter, npdu NPDU, nlm model.NLMIAmRouterToNetwork) error {
+ n.log.Debug().Stringer("adapter", adapter).Stringer("npdu", npdu).Stringer("nlm", nlm).Msg("IAmRouterToNetwork")
+
+ // reference the service access point
+ sap := n._getElementService().(*NetworkServiceAccessPoint) // TODO: check hard cast here...
+ n.log.Debug().Stringer("sap", sap).Msg("sap")
+
+ // pass along the service access point
+ if err := sap.UpdateRouterReference(adapter.adapterNet, npdu.GetPDUSource(), nlm.GetDestinationNetworkAddresses()); err != nil {
+ return errors.Wrap(err, "error updating router to network")
+ }
+
+ // if we're not a router, skip it
+ if len(sap.adapters) == 1 {
+ n.log.Trace().Msg("not a router")
+ } else {
+ n.log.Trace().Msg("forwarding other adapters")
+
+ // Build a broadcast announcement
+ iamrtn, err := NewIAmRouterToNetwork(WithIAmRouterToNetworkNetworkList(nlm.GetDestinationNetworkAddresses()...))
+ if err != nil {
+ return errors.Wrap(err, "error building IAmRouterToNetwork")
+ }
+ iamrtn.SetPDUDestination(NewLocalBroadcast(nil))
+
+ // send it to all the connected adapters
+ for _, xadapter := range sap.adapters {
+ if xadapter != adapter {
+ n.log.Debug().Stringer("xadapter", xadapter).Msg("Sending to adapter")
+ if err := n.Request(NewArgs(xadapter, iamrtn), NoKWArgs); err != nil {
+ return errors.Wrap(err, "error sending I am router to network")
+ }
+ }
+ }
+ }
+
+ // look for pending NPDUs for the networks
+ for _, dnet := range nlm.GetDestinationNetworkAddresses() {
+ pendingNpdus, ok := sap.pendingNets[nk(&dnet)]
+ if !ok {
+ n.log.Debug().Int("pendingNpdus", len(pendingNpdus)).Uint16("dnet", dnet).Msg("pending NPDUs to dnet")
+
+ // delete the references
+ delete(sap.pendingNets, nk(&dnet))
+
+ // now reprocess them
+ for _, pendingNPDU := range pendingNpdus {
+ n.log.Debug().Stringer("pendingNPDU", pendingNPDU).Msg("sending")
+
+ // the destination is the address of the router
+ pendingNPDU.SetPDUDestination(npdu.GetPDUSource())
+
+ // sent the packet downstream
+ if err := adapter.ProcessNPDU(pendingNPDU); err != nil {
+ return errors.Wrap(err, "error processing pending NPDU")
+ }
+ }
+ }
+ }
+ return nil
}
-func (n *NetworkServiceElement) ICouldBeRouterToNetwork(adapter *NetworkAdapter, nlm model.NLMICouldBeRouterToNetwork) {
+func (n *NetworkServiceElement) ICouldBeRouterToNetwork(adapter *NetworkAdapter, nlm model.NLMICouldBeRouterToNetwork) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) RejectRouterToNetwork(adapter *NetworkAdapter, nlm model.NLMRejectMessageToNetwork) {
+func (n *NetworkServiceElement) RejectRouterToNetwork(adapter *NetworkAdapter, nlm model.NLMRejectMessageToNetwork) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) RouterBusyToNetwork(adapter *NetworkAdapter, nlm model.NLMRouterBusyToNetwork) {
+func (n *NetworkServiceElement) RouterBusyToNetwork(adapter *NetworkAdapter, nlm model.NLMRouterBusyToNetwork) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) RouterAvailableToNetwork(adapter *NetworkAdapter, nlm model.NLMRouterAvailableToNetwork) {
+func (n *NetworkServiceElement) RouterAvailableToNetwork(adapter *NetworkAdapter, nlm model.NLMRouterAvailableToNetwork) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) InitalizeRoutingTable(adapter *NetworkAdapter, nlm model.NLMInitializeRoutingTable) {
+func (n *NetworkServiceElement) InitalizeRoutingTable(adapter *NetworkAdapter, nlm model.NLMInitializeRoutingTable) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) InitalizeRoutingTableAck(adapter *NetworkAdapter, nlm model.NLMInitializeRoutingTableAck) {
+func (n *NetworkServiceElement) InitalizeRoutingTableAck(adapter *NetworkAdapter, nlm model.NLMInitializeRoutingTableAck) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) EstablishConnectionToNetwork(adapter *NetworkAdapter, nlm model.NLMEstablishConnectionToNetwork) {
+func (n *NetworkServiceElement) EstablishConnectionToNetwork(adapter *NetworkAdapter, nlm model.NLMEstablishConnectionToNetwork) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) DisconnectConnectionToNetwork(adapter *NetworkAdapter, nlm model.NLMDisconnectConnectionToNetwork) {
+func (n *NetworkServiceElement) DisconnectConnectionToNetwork(adapter *NetworkAdapter, nlm model.NLMDisconnectConnectionToNetwork) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) WhatIsNetworkNumber(adapter *NetworkAdapter, nlm model.NLMWhatIsNetworkNumber) {
+func (n *NetworkServiceElement) WhatIsNetworkNumber(adapter *NetworkAdapter, nlm model.NLMWhatIsNetworkNumber) error {
panic("not implemented") // TODO: implement me
}
-func (n *NetworkServiceElement) NetworkNumberIs(adapter *NetworkAdapter, nlm model.NLMNetworkNumberIs) {
+func (n *NetworkServiceElement) NetworkNumberIs(adapter *NetworkAdapter, nlm model.NLMNetworkNumberIs) error {
panic("not implemented") // TODO: implement me
}
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_3_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_3_test.go
index a62efd5a1b..00c48c4ce9 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_3_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_3_test.go
@@ -186,7 +186,7 @@ func TestNet3(t *testing.T) {
// test device sends request, no response
whois, err := NewWhoIsRequest()
require.NoError(t, err)
- whois.SetPDUDestination(NewLocalBroadcast(nil)) // TODO: upstream does this inline
+ whois.SetPDUDestination(NewRemoteBroadcast(2, nil)) // TODO: upstream does this inline
tnet.td.GetStartState().Doc("2-1-0").
Send(whois, nil).Doc("2-1-1").
Success("")
@@ -218,7 +218,7 @@ func TestNet3(t *testing.T) {
Success("")
// network 2 sees local broadcast request and unicast response
- tnet.sniffer2.GetStartState().
+ tnet.sniffer2.GetStartState().Doc("2-3-0").
Receive(NewArgs((PDU)(nil)),
NewKWArgs(KWPDUData, xtob(
"01.08.00.01.01.01"+ // local broadcast
@@ -227,7 +227,7 @@ func TestNet3(t *testing.T) {
).Doc("2-3-1").
Receive(NewArgs((PDU)(nil)),
NewKWArgs(KWPDUData, xtob(
- "01.08.00.02.01.04"+ // unicast response
+ "01.20.00.01.01.01.ff"+ // unicast response
"10.00.c4.02.00.00.04.22.04.00.91.00.22.03.e7",
)),
).Doc("2-3-1").
(plc4x) 04/04: feat(plc4go/plc4xGenerator): add support for custom licences
Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit beb483e8f19bca74b169ea45aacf607e9f806e93
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Sep 4 14:34:42 2024 +0200
feat(plc4go/plc4xGenerator): add support for custom licences
---
plc4go/internal/cbus/tagtype_string.go | 1 +
plc4go/internal/modbus/tagtype_string.go | 1 +
plc4go/internal/s7/tagtype_string.go | 1 +
plc4go/pkg/api/model/plcsubscriptiontype_string.go | 1 +
plc4go/spi/testutils/steptype_string.go | 1 +
plc4go/tools/common/common.go | 58 ++++++++++++++++++++++
plc4go/tools/plc4xGenerator/main.go | 38 +++++---------
plc4go/tools/plc4xLicencer/main.go | 41 +++------------
8 files changed, 82 insertions(+), 60 deletions(-)
diff --git a/plc4go/internal/cbus/tagtype_string.go b/plc4go/internal/cbus/tagtype_string.go
index 93ddcde0c6..1ad0bb84a2 100644
--- a/plc4go/internal/cbus/tagtype_string.go
+++ b/plc4go/internal/cbus/tagtype_string.go
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
// Code generated by "stringer -type TagType"; DO NOT EDIT.
package cbus
diff --git a/plc4go/internal/modbus/tagtype_string.go b/plc4go/internal/modbus/tagtype_string.go
index 6342e6b536..ad55afbf1b 100644
--- a/plc4go/internal/modbus/tagtype_string.go
+++ b/plc4go/internal/modbus/tagtype_string.go
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
// Code generated by "stringer -type TagType"; DO NOT EDIT.
package modbus
diff --git a/plc4go/internal/s7/tagtype_string.go b/plc4go/internal/s7/tagtype_string.go
index 4e72f88533..6e05b1a95e 100644
--- a/plc4go/internal/s7/tagtype_string.go
+++ b/plc4go/internal/s7/tagtype_string.go
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
// Code generated by "stringer -type TagType"; DO NOT EDIT.
package s7
diff --git a/plc4go/pkg/api/model/plcsubscriptiontype_string.go b/plc4go/pkg/api/model/plcsubscriptiontype_string.go
index d50e2fc461..e9372f01e0 100644
--- a/plc4go/pkg/api/model/plcsubscriptiontype_string.go
+++ b/plc4go/pkg/api/model/plcsubscriptiontype_string.go
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
// Code generated by "stringer -type PlcSubscriptionType"; DO NOT EDIT.
package model
diff --git a/plc4go/spi/testutils/steptype_string.go b/plc4go/spi/testutils/steptype_string.go
index fa8911ccaa..64e3e16a3f 100644
--- a/plc4go/spi/testutils/steptype_string.go
+++ b/plc4go/spi/testutils/steptype_string.go
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
// Code generated by "stringer -type StepType"; DO NOT EDIT.
package testutils
diff --git a/plc4go/tools/common/common.go b/plc4go/tools/common/common.go
new file mode 100644
index 0000000000..34577398de
--- /dev/null
+++ b/plc4go/tools/common/common.go
@@ -0,0 +1,58 @@
+/*
+ * 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 common
+
+import (
+ "fmt"
+ "github.com/pkg/errors"
+ "log"
+ "os"
+ "path"
+ "path/filepath"
+)
+
+func GetLicenseFileContent(licenseFileName string, verbose bool) []byte {
+ isAbs := path.IsAbs(licenseFileName)
+ var licenceContent []byte
+ rootReached := false
+ currentDir, _ := os.Getwd()
+ var licenseFileNameWithPath string
+ for !isAbs && !rootReached {
+ if verbose {
+ fmt.Printf("Looking for %s in %s\n", licenseFileName, currentDir)
+ }
+ licenseFileNameWithPath = filepath.Join(currentDir, licenseFileName)
+ if _, err := os.Stat(licenseFileNameWithPath); errors.Is(err, os.ErrNotExist) {
+ // path/to/whatever does not exist
+ currentDir = filepath.Join(currentDir, "..")
+ continue
+ }
+ if verbose {
+ fmt.Printf("Found %s in %s\n", licenseFileName, currentDir)
+ }
+ rootReached = true
+ var err error
+ licenceContent, err = os.ReadFile(licenseFileNameWithPath)
+ if err != nil {
+ log.Fatalf("error reading license file: %v", err)
+ }
+ }
+ return licenceContent
+}
diff --git a/plc4go/tools/plc4xGenerator/main.go b/plc4go/tools/plc4xGenerator/main.go
index 79083a1599..2cc4d6fe33 100644
--- a/plc4go/tools/plc4xGenerator/main.go
+++ b/plc4go/tools/plc4xGenerator/main.go
@@ -33,13 +33,17 @@ import (
"strings"
"golang.org/x/tools/go/packages"
+
+ "github.com/apache/plc4x/plc4go/tools/common"
)
var (
- typeNames = flag.String("type", "", "comma-separated list of type names; must be set")
- output = flag.String("output", "", "output file name; default srcdir/<type>_plc4xgen.go")
- prefix = flag.String("prefix", "", "prefix for all generated files")
- buildTags = flag.String("tags", "", "comma-separated list of build tags to apply")
+ typeNames = flag.String("type", "", "comma-separated list of type names; must be set")
+ output = flag.String("output", "", "output file name; default srcdir/<type>_plc4xgen.go")
+ prefix = flag.String("prefix", "", "prefix for all generated files")
+ buildTags = flag.String("tags", "", "comma-separated list of build tags to apply")
+ licenseFile = flag.String("licenseFile", ".plc4xLicencer.header", "file containing the license (will be searched upwards)")
+ verbose = flag.Bool("verbose", false, "verbosity")
)
// Usage is a replacement usage function for the flags package.
@@ -86,7 +90,10 @@ func main() {
generator.parsePackage(args, tags)
// Print the header and package clause.
- generator.Printf(asfHeader)
+ licenseFileName := *licenseFile
+ licenceContent := common.GetLicenseFileContent(licenseFileName, *verbose)
+ generator.Printf(string(licenceContent))
+ generator.Printf("\n")
generator.Printf("// Code generated by \"plc4xGenerator %s\"; DO NOT EDIT.\n", strings.Join(os.Args[1:], " "))
generator.Printf("\n")
generator.Printf("package %s", generator.pkg.name)
@@ -599,27 +606,6 @@ func (f *File) genDecl(node ast.Node) bool {
return false
}
-var asfHeader = `/*
- * 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.
- */
-
-`
-
var stringerTemplate = `
func (d *%s) String() string {
writeBuffer := utils.NewWriteBufferBoxBasedWithOptions(true, true)
diff --git a/plc4go/tools/plc4xLicencer/main.go b/plc4go/tools/plc4xLicencer/main.go
index 396efee443..3abdfd5415 100644
--- a/plc4go/tools/plc4xLicencer/main.go
+++ b/plc4go/tools/plc4xLicencer/main.go
@@ -24,11 +24,10 @@ import (
"fmt"
"log"
"os"
- "path"
"path/filepath"
"strings"
- "github.com/pkg/errors"
+ "github.com/apache/plc4x/plc4go/tools/common"
)
var (
@@ -87,11 +86,13 @@ func main() {
baseName := fmt.Sprintf("%s_string.go", types[0])
outputName = filepath.Join(dir, strings.ToLower(baseName))
}
- inputFile, err2 := os.ReadFile(outputName)
+ inputFile, err := os.ReadFile(outputName)
+ if err != nil {
+ log.Fatalf("error reading output file: %v", err)
+ }
- licenseFileName := *licenseFile
- isAbs := path.IsAbs(licenseFileName)
- licenceContent := GetLicenseFileContent(isAbs, licenseFileName, err2)
+ licenceContent := common.GetLicenseFileContent(*licenseFile, *verbose)
+ licenceContent = append(licenceContent, '\n')
if err := os.WriteFile(outputName, append(licenceContent, inputFile...), 0644); err != nil {
log.Fatalf("writing output: %s", err)
@@ -99,34 +100,6 @@ func main() {
fmt.Printf("Fixed plc4x license of %s\n", outputName)
}
-func GetLicenseFileContent(isAbs bool, licenseFileName string, err2 error) []byte {
- var licenceContent []byte
- rootReached := false
- currentDir, _ := os.Getwd()
- var licenseFileNameWithPath string
- for !isAbs && !rootReached {
- if *verbose {
- fmt.Printf("Looking for %s in %s\n", licenseFileName, currentDir)
- }
- licenseFileNameWithPath = filepath.Join(currentDir, licenseFileName)
- if _, err := os.Stat(licenseFileNameWithPath); errors.Is(err, os.ErrNotExist) {
- // path/to/whatever does not exist
- currentDir = filepath.Join(currentDir, "..")
- continue
- }
- if *verbose {
- fmt.Printf("Found %s in %s\n", licenseFileName, currentDir)
- }
- rootReached = true
- var err error
- licenceContent, err = os.ReadFile(licenseFileNameWithPath)
- if err != nil {
- panic(err2)
- }
- }
- return licenceContent
-}
-
// isDirectory reports whether the named file is a directory.
func isDirectory(name string) bool {
info, err := os.Stat(name)