From 1e483ec92ee63a0cbe7341d1bbc96200ba0e79a6 Mon Sep 17 00:00:00 2001 From: Sathya Laufer Date: Fri, 22 Feb 2019 16:52:01 +0100 Subject: [PATCH 1/2] Added strip node --- parsers/Makefile.am | 10 +++-- parsers/strip/Factory.cpp | 42 +++++++++++++++++++ parsers/strip/Factory.h | 44 ++++++++++++++++++++ parsers/strip/MyNode.cpp | 69 +++++++++++++++++++++++++++++++ parsers/strip/MyNode.h | 51 +++++++++++++++++++++++ parsers/strip/locales/en-US/strip | 13 ++++++ parsers/strip/strip.hni | 43 +++++++++++++++++++ 7 files changed, 268 insertions(+), 4 deletions(-) create mode 100644 parsers/strip/Factory.cpp create mode 100644 parsers/strip/Factory.h create mode 100644 parsers/strip/MyNode.cpp create mode 100644 parsers/strip/MyNode.h create mode 100644 parsers/strip/locales/en-US/strip create mode 100644 parsers/strip/strip.hni diff --git a/parsers/Makefile.am b/parsers/Makefile.am index 71f874a4..0e5b12d3 100644 --- a/parsers/Makefile.am +++ b/parsers/Makefile.am @@ -6,17 +6,19 @@ LIBS += -Wl,-Bdynamic -lhomegear-node libdir = $(localstatedir)/lib/homegear/node-blue/nodes/parsers -lib_LTLIBRARIES = json.la xml.la +lib_LTLIBRARIES = json.la strip.la xml.la json_la_SOURCES = json/Factory.cpp json/MyNode.cpp json_la_LDFLAGS =-module -avoid-version -shared +strip_la_SOURCES = strip/Factory.cpp strip/MyNode.cpp +strip_la_LDFLAGS =-module -avoid-version -shared xml_la_SOURCES = xml/Factory.cpp xml/MyNode.cpp xml_la_LDFLAGS =-module -avoid-version -shared parsers_ladir = $(libdir) -parsers_la_DATA = json/json.hni xml/xml.hni +parsers_la_DATA = json/json.hni strip/strip.hni xml/xml.hni locale_en_usdir = $(libdir)/locales/en-US -locale_en_us_DATA = json/locales/en-US/json xml/locales/en-US/xml +locale_en_us_DATA = json/locales/en-US/json strip/locales/en-US/strip xml/locales/en-US/xml install-exec-hook: - rm -f $(DESTDIR)$(libdir)/json.la $(DESTDIR)$(libdir)/xml.la + rm -f $(DESTDIR)$(libdir)/json.la $(DESTDIR)$(libdir)/strip.la $(DESTDIR)$(libdir)/xml.la diff --git a/parsers/strip/Factory.cpp b/parsers/strip/Factory.cpp new file mode 100644 index 00000000..842c28e3 --- /dev/null +++ b/parsers/strip/Factory.cpp @@ -0,0 +1,42 @@ +/* Copyright 2013-2019 Homegear GmbH + * + * Homegear is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Homegear is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Homegear. If not, see . + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ + +#include "Factory.h" +#include "MyNode.h" +#include "../config.h" + +Flows::INode* MyFactory::createNode(std::string path, std::string nodeNamespace, std::string type, const std::atomic_bool* frontendConnected) +{ + return new MyNode::MyNode(path, nodeNamespace, type, frontendConnected); +} + +Flows::NodeFactory* getFactory() +{ + return (Flows::NodeFactory*) (new MyFactory); +} diff --git a/parsers/strip/Factory.h b/parsers/strip/Factory.h new file mode 100644 index 00000000..6fa76bfb --- /dev/null +++ b/parsers/strip/Factory.h @@ -0,0 +1,44 @@ +/* Copyright 2013-2019 Homegear GmbH + * + * Homegear is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Homegear is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Homegear. If not, see . + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ + +#ifndef FACTORY_H +#define FACTORY_H + +#include +#include "MyNode.h" + +class MyFactory : Flows::NodeFactory +{ +public: + virtual Flows::INode* createNode(std::string path, std::string nodeNamespace, std::string type, const std::atomic_bool* frontendConnected); +}; + +extern "C" Flows::NodeFactory* getFactory(); + +#endif diff --git a/parsers/strip/MyNode.cpp b/parsers/strip/MyNode.cpp new file mode 100644 index 00000000..301a9cea --- /dev/null +++ b/parsers/strip/MyNode.cpp @@ -0,0 +1,69 @@ +/* Copyright 2013-2019 Homegear GmbH + * + * Homegear is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Homegear is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Homegear. If not, see . + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ + +#include +#include "MyNode.h" + +namespace MyNode +{ + +MyNode::MyNode(std::string path, std::string nodeNamespace, std::string type, const std::atomic_bool* frontendConnected) : Flows::INode(path, nodeNamespace, type, frontendConnected) +{ +} + +MyNode::~MyNode() +{ +} + +bool MyNode::init(Flows::PNodeInfo info) +{ + return true; +} + +void MyNode::input(const Flows::PNodeInfo info, uint32_t index, const Flows::PVariable message) +{ + try + { + Flows::PVariable outputMessage = std::make_shared(Flows::VariableType::tStruct); + Flows::PVariable payload = std::make_shared(); + *payload = *(message->structValue->at("payload")); + outputMessage->structValue->emplace("payload", std::move(payload)); + output(0, outputMessage); + } + catch(const std::exception& ex) + { + _out->printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what()); + } + catch(...) + { + _out->printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__); + } +} + +} diff --git a/parsers/strip/MyNode.h b/parsers/strip/MyNode.h new file mode 100644 index 00000000..403a059a --- /dev/null +++ b/parsers/strip/MyNode.h @@ -0,0 +1,51 @@ +/* Copyright 2013-2019 Homegear GmbH + * + * Homegear is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Homegear is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Homegear. If not, see . + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ + +#ifndef MYNODE_H_ +#define MYNODE_H_ + +#include + +namespace MyNode +{ + +class MyNode: public Flows::INode +{ +public: + MyNode(std::string path, std::string nodeNamespace, std::string type, const std::atomic_bool* frontendConnected); + virtual ~MyNode(); + + virtual bool init(Flows::PNodeInfo info); +private: + virtual void input(const Flows::PNodeInfo info, uint32_t index, const Flows::PVariable message); +}; + +} + +#endif diff --git a/parsers/strip/locales/en-US/strip b/parsers/strip/locales/en-US/strip new file mode 100644 index 00000000..564311f0 --- /dev/null +++ b/parsers/strip/locales/en-US/strip @@ -0,0 +1,13 @@ +{ + "parsers/strip.hni": { + "strip": { + "label": { + "name": "Name" + }, + "paletteHelp": "

Creates a copy of the $message object only keeping the payload.

", + "help": "This node creates a copy of the $message object only keeping the payload.", + "input1Description": "Any message object.", + "output1Description": "A copy of the input message object only containing payload." + } + } +} \ No newline at end of file diff --git a/parsers/strip/strip.hni b/parsers/strip/strip.hni new file mode 100644 index 00000000..2edce96e --- /dev/null +++ b/parsers/strip/strip.hni @@ -0,0 +1,43 @@ + + + From 19ed8015f6bb70345b002fd3add9d40866f46902 Mon Sep 17 00:00:00 2001 From: Sathya Laufer Date: Tue, 26 Feb 2019 21:43:45 +0100 Subject: [PATCH 2/2] Small changes --- parsers/strip/MyNode.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/parsers/strip/MyNode.cpp b/parsers/strip/MyNode.cpp index 301a9cea..a5a626e3 100644 --- a/parsers/strip/MyNode.cpp +++ b/parsers/strip/MyNode.cpp @@ -43,27 +43,27 @@ MyNode::~MyNode() bool MyNode::init(Flows::PNodeInfo info) { - return true; + return true; } void MyNode::input(const Flows::PNodeInfo info, uint32_t index, const Flows::PVariable message) { - try - { - Flows::PVariable outputMessage = std::make_shared(Flows::VariableType::tStruct); - Flows::PVariable payload = std::make_shared(); - *payload = *(message->structValue->at("payload")); - outputMessage->structValue->emplace("payload", std::move(payload)); - output(0, outputMessage); - } - catch(const std::exception& ex) - { - _out->printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what()); - } - catch(...) - { - _out->printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__); - } + try + { + Flows::PVariable outputMessage = std::make_shared(Flows::VariableType::tStruct); + Flows::PVariable payload = std::make_shared(); + *payload = *(message->structValue->at("payload")); + outputMessage->structValue->emplace("payload", std::move(payload)); + output(0, outputMessage); + } + catch(const std::exception& ex) + { + _out->printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__, ex.what()); + } + catch(...) + { + _out->printEx(__FILE__, __LINE__, __PRETTY_FUNCTION__); + } } }