text: /**
  * @file {componentName}_common.cpp
  * @author {packageAuthor}
  *
  * Copyright (C) {packageCopyright}
  *
  * @brief {packageDescription}
  *        This file is to be edited by the Developer
  **/
  
  // ROS message includes
  #include "ros/ros.h"
  
  // ROS message & services includes
  
  {ifactionServer}
  #include <actionlib/server/simple_action_server.h>
  {forallactionServer}
  #include <{apply-get_cpp_path}Action.h>
  {endforallactionServer}
  {endifactionServer}
  {ifactionClient}
  #include <actionlib/client/simple_action_client.h>
  {forallactionClient}
  #include <{apply-get_cpp_path}Action.h>
  {endforallactionClient}
  {endifactionClient}
  {ifdynParameter}
  #include <dynamic_reconfigure/server.h>
  #include <{packageName}/{componentName}Config.h>
  
  {endifdynParameter}
  // ROS message & services includes
  {forallpublisher}
  #include <{apply-get_cpp_path}.h>
  {endforallpublisher}
  {foralldirectPublisher}
  #include <{apply-get_cpp_path}.h>
  {endforalldirectPublisher}
  {forallsubscriber}
  #include <{apply-get_cpp_path}.h>
  {endforallsubscriber}
  {foralldirectSubscriber}
  #include <{apply-get_cpp_path}.h>
  {endforalldirectSubscriber}
  {forallserviceServer}
  #include <{apply-get_cpp_path}.h>
  {endforallserviceServer}
  {forallserviceClient}
  #include <{apply-get_cpp_path}.h>
  {endforallserviceClient}
  
  {iflistener}
  #include <tf/transform_listener.h>
  {endiflistener}
  {ifbroadcaster}
  #include <tf/transform_broadcaster.h>
  {endifbroadcaster}
  
  /* protected region user include files begin */
  /* protected region user include files end */
  
  /**
   * @class {apply-capitalized_comp_name}Config
   * @brief set of static and dynamic parameters
   * @warning this class is autogenerated. It should not be touched!
   */
  class {apply-capitalized_comp_name}Config
  {
  public:
      {ifparameter}
      // parameters handled through the parameter server
      {endifparameter}
      {forallparameter}
      {type} {name};
      {endforallparameter}
      {ifdynParameter}
      // dynamic parameters handled through dynamic reconfigure
      {endifdynParameter}
      {foralldynParameter}
      {type} {name};
      {endforalldynParameter}
      //! overloading the print operator
      friend std::ostream& operator<< (std::ostream& os,
                                       const {apply-capitalized_comp_name}Config& config)
      {
          {forallparameter}
          os << "{name}: " << config.{name} << std::endl;
          {endforallparameter}
          {foralldynParameter}
          os << "{name}: " << config.{name} << std::endl;
          {endforalldynParameter}
          return os;
      }
  };
  
  /**
   * @class {apply-capitalized_comp_name}Data
   * @brief set of input / output handled through the update methods
   * @warning this class is autogenerated. It should not be touched!
   */
  class {apply-capitalized_comp_name}Data
  {
  public:
      {ifsubscriber}
      // input data
      {endifsubscriber}
      {forallsubscriber}
      {type} in_{name};
      bool in_{name}_updated;
      {endforallsubscriber}
      {ifpublisher}
      // output data
      {endifpublisher}
      {forallpublisher}
      {type} out_{name};
      bool out_{name}_active;
      {endforallpublisher}
  };
  
  {% if interface.listener or interface.broadcaster or interface.directPublisher or interface.directSubscriber or interface.actionClient or interface.serviceClient %}
  /**
   * @class {apply-capitalized_comp_name}Passthrough
   * @brief set of passthrough elements slightly violating interface / implementation separation
   * @warning this class is autogenerated. It should not be touched!
   */
  class {apply-capitalized_comp_name}Passthrough
  {
  public:
      {foralllistener}
      tf::TransformListener {name};
      {endforalllistener}
      {forallbroadcaster}
      tf::TransformBroadcaster {name};
      {endforallbroadcaster}
      {foralldirectPublisher}
      ros::Publisher {name};
      {endforalldirectPublisher}
      {foralldirectSubscriber}
      ros::Subscriber {name};
      {endforalldirectSubscriber}
  
      {forallserviceClient}
      ros::ServiceClient client_{name};
      {endforallserviceClient}
      {forallactionClient}
      actionlib::SimpleActionClient<{type}Action> * ac_{name};
      {endforallactionClient}
  
      /**
       * @brief constructor
       */
      {apply-capitalized_comp_name}Passthrough()
      {
          {forallactionClient}
          ac_{name} = NULL;
          {endforallactionClient}
      }
      /**
       * @brief destructor
       */
      ~{apply-capitalized_comp_name}Passthrough()
      {
          {forallactionClient}
          delete ac_{name};
          {endforallactionClient}
      }
  };
  {% endif %}
  /**
   * @class {apply-capitalized_comp_name}Impl
   * @brief Implementation of the node intelligence
   * @warning this class is be filled by the Developer, at locations indicated
   */
  class {apply-capitalized_comp_name}Impl
  {
      /* protected region user member variables begin */
      /* protected region user member variables end */
  
  public:
  {% if interface.listener or interface.broadcaster or interface.directPublisher or interface.directSubscriber or interface.actionClient or interface.serviceClient %}
      {apply-capitalized_comp_name}Passthrough passthrough;
  
  {% endif %}
      /**
       * @brief constructor
       */
      {apply-capitalized_comp_name}Impl()
      {
          /* protected region user constructor begin */
          /* protected region user constructor end */
      }
      /**
       * @brief destructor
       */
      ~{apply-capitalized_comp_name}Impl()
      {
          /* protected region user destructor begin */
          /* protected region user destructor end */
      }
      /**
       * @brief method called at node configuration
       * @param config set of configuration parameters available
       */
      void configure({apply-capitalized_comp_name}Config config)
      {
          /* protected region user configure begin */
          /* protected region user configure end */
      }
      /**
       * @brief Update method periodically called by the ros component
       * @param data contains received messages (through subscription), and will contain messages to publish
       * @param config latest state of the config variables
       */
      void update({apply-capitalized_comp_name}Data &data, {apply-capitalized_comp_name}Config config)
      {
          /* protected region user update begin */
          /* protected region user update end */
      }
  
      {forallactionServer}
      /**
       * @brief callback of an action request
       * @param goal objective provided by the caller
       * @param as_ handler of the action
       */
      void callback_{name}(const {type}GoalConstPtr &goal, actionlib::SimpleActionServer<{type}Action> *as_)
      {
          /* protected region user implementation of action callback for {name} begin */
          /* protected region user implementation of action callback for {name} end */
      }
      {endforallactionServer}
      {forallserviceServer}
      /**
       * @brief callback of a service request
       * @param req input parameters provided by the caller
       * @param res output parameters resulting from the service execution
       * @param config latest state of the config variables
       */
      bool callback_{name}({type}::Request  &req, {type}::Response &res , {apply-capitalized_comp_name}Config * config)
      {
          /* protected region user implementation of service callback for {name} begin */
          /* protected region user implementation of service callback for {name} end */
          // todo remove that return
          return true;
      }
      {endforallserviceServer}
      {foralldirectSubscriber}
      /**
       * @brief direct callback of a topic subscription
       * @param msg message received on the topic
       * @warning this subscription is not driven through the update mechanism
       */
      void directTopicCallback_{name}(const {type}::ConstPtr& msg)
      {
          /* protected region user implementation of direct subscriber callback for {name} begin */
          /* protected region user implementation of direct subscriber callback for {name} end */
      }
      {endforalldirectSubscriber}
      /* protected region user additional functions begin */
      /* protected region user additional functions end */
  };
  