Commit baa7265264616ec0d8de727f6be924f7fca57ca7

Authored by Perry Werneck
1 parent 01b59a4d
Exists in master and in 1 other branch develop

Implementing action factory by name.

client/ipcclient.cbp
... ... @@ -70,6 +70,7 @@
70 70 <Unit filename="src/include/lib3270/ipc.h" />
71 71 <Unit filename="src/include/lib3270/ipc/action.h" />
72 72 <Unit filename="src/include/lib3270/ipc/request.h" />
  73 + <Unit filename="src/session/action.cc" />
73 74 <Unit filename="src/session/get.cc" />
74 75 <Unit filename="src/session/local/actions.cc" />
75 76 <Unit filename="src/session/local/attribute.cc" />
... ...
client/src/core/actions.cc
... ... @@ -52,13 +52,15 @@
52 52 TN3270::Action::~Action() {
53 53 }
54 54  
  55 + const char * TN3270::Action::getName() const noexcept {
  56 + return ((const LIB3270_PROPERTY *) this->descriptor)->name;
  57 + }
  58 +
55 59 const char * TN3270::Action::getDescription() const noexcept {
56   - debug(__FUNCTION__,"(",(void *) descriptor,")");
57 60 return lib3270_property_get_description((const LIB3270_PROPERTY *) this->descriptor);
58 61 }
59 62  
60 63 const char * TN3270::Action::getSummary() const noexcept {
61   - debug(__FUNCTION__,"(",(void *) descriptor,")");
62 64 return lib3270_property_get_summary((const LIB3270_PROPERTY *) this->descriptor);
63 65 }
64 66  
... ...
client/src/core/session.cc
... ... @@ -460,6 +460,20 @@
460 460 throw std::system_error(ENOTSUP, std::system_category());
461 461 }
462 462  
  463 + Action * Session::getAction(const char *name) {
  464 +
  465 + for(auto action : getActions()) {
  466 +
  467 + if(strcasecmp(action->name,name) == 0) {
  468 + return getAction(action);
  469 + }
  470 +
  471 + }
  472 +
  473 + throw std::system_error(EINVAL, std::system_category());
  474 +
  475 + }
  476 +
463 477  
464 478 }
465 479  
... ...
client/src/include/lib3270/ipc.h
... ... @@ -583,9 +583,12 @@
583 583 /// @brief Insert event listener.
584 584 // void insert(Event::Type type, std::function <void(const Event &event)> listener);
585 585  
586   - /// @brief Create an action object
  586 + /// @brief Create an action object.
587 587 virtual Action * getAction(const LIB3270_ACTION *descriptor);
588 588  
  589 + /// @brief Create an action object.
  590 + Action * getAction(const char *name);
  591 +
589 592 /// @brief Checks if the terminal contains the string.
590 593 size_t find(const char * str, size_t pos = 0) const;
591 594  
... ... @@ -814,6 +817,15 @@
814 817 return session->getAction(descriptor);
815 818 }
816 819  
  820 + /// @brief Create new action object.
  821 + ///
  822 + /// Alocate a new action object associated with the session, delete it
  823 + /// when no longer necessary.
  824 + ///
  825 + inline TN3270::Action * getAction(const char *name) {
  826 + return session->getAction(name);
  827 + }
  828 +
817 829 /// @brief Send PF.
818 830 inline Host & pfkey(unsigned short value) {
819 831 session->pfkey(value);
... ...
client/src/include/lib3270/ipc/action.h
... ... @@ -62,6 +62,7 @@
62 62 return activatable();
63 63 }
64 64  
  65 + const char * getName() const noexcept;
65 66 const char * getDescription() const noexcept;
66 67 const char * getSummary() const noexcept;
67 68  
... ...
client/src/session/action.cc 0 → 100644
... ... @@ -0,0 +1,49 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 +/**
  31 + * @file
  32 + *
  33 + * @brief
  34 + *
  35 + * @author perry.werneck@gmail.com
  36 + *
  37 + */
  38 +
  39 +#include <ipc-client-internals.h>
  40 +
  41 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  42 +
  43 + namespace TN3270 {
  44 +
  45 +
  46 +
  47 + }
  48 +
  49 +
... ...
client/src/testprogram/testprogram.cc
... ... @@ -41,6 +41,7 @@
41 41 #include <cstdlib>
42 42 #include <lib3270.h>
43 43 #include <lib3270/ipc.h>
  44 + #include <lib3270/ipc/action.h>
44 45  
45 46 using namespace std;
46 47  
... ... @@ -196,6 +197,7 @@
196 197 //testHost(session);
197 198 //testAttributes(session);
198 199  
  200 + /*
199 201 {
200 202 TN3270::Host host{":a",nullptr,10};
201 203  
... ... @@ -205,6 +207,17 @@
205 207  
206 208 cout << "post: " << host["url"] << endl;
207 209 }
  210 + */
  211 +
  212 + {
  213 + TN3270::Host host{":a",nullptr,10};
  214 +
  215 + TN3270::Action * action = host.getAction("reconnect");
  216 +
  217 + action->activatable();
  218 +
  219 + delete action;
  220 + }
208 221  
209 222  
210 223 /*
... ...