diff --git a/livesupport/products/gLiveSupport/etc/Makefile.in b/livesupport/products/gLiveSupport/etc/Makefile.in
index 3342792d4..89a5dde49 100644
--- a/livesupport/products/gLiveSupport/etc/Makefile.in
+++ b/livesupport/products/gLiveSupport/etc/Makefile.in
@@ -21,7 +21,7 @@
#
#
# Author : $Author: maroy $
-# Version : $Revision: 1.4 $
+# Version : $Revision: 1.5 $
# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/etc/Makefile.in,v $
#
# @configure_input@
@@ -72,6 +72,12 @@ CORE_LIB_DIR = ${CORE_DIR}/lib
CORE_LIB = livesupport_core
CORE_LIB_FILE = ${CORE_LIB_DIR}/lib${CORE_LIB}.a
+AUTHENTICATION_DIR = ${MODULES_DIR}/authentication
+AUTHENTICATION_INCLUDE_DIR = ${AUTHENTICATION_DIR}/include
+AUTHENTICATION_LIB_DIR = ${AUTHENTICATION_DIR}/lib
+AUTHENTICATION_LIB = livesupport_authentication
+AUTHENTICATION_LIB_FILE = ${AUTHENTICATION_LIB_DIR}/lib${AUTHENTICATION_LIB}.a
+
STORAGE_DIR = ${MODULES_DIR}/storage
STORAGE_INCLUDE_DIR = ${STORAGE_DIR}/include
STORAGE_LIB_DIR = ${STORAGE_DIR}/lib
@@ -90,6 +96,7 @@ TEST_XSLT = ../etc/testResultToHtml.xsl
G_LIVESUPPORT_EXE = ${TMP_DIR}/gLiveSupport
G_LIVESUPPORT_CFG = ${ETC_DIR}/gLiveSupport.xml
+G_LIVESUPPORT_CFG = ${ETC_DIR}/gLiveSupport.xml
TEST_RUNNER = ${TMP_DIR}/testRunner
DOXYGEN_CONFIG = ${ETC_DIR}/doxygen.config
@@ -109,6 +116,7 @@ CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \
-I${BOOST_INCLUDE_DIR} \
-I${LIBXMLPP_INCLUDE_DIR} \
-I${CORE_INCLUDE_DIR} \
+ -I${AUTHENTICATION_INCLUDE_DIR} \
-I${STORAGE_INCLUDE_DIR} \
-I${TMP_DIR}
LDFLAGS = @LDFLAGS@ -pthread \
@@ -116,13 +124,15 @@ LDFLAGS = @LDFLAGS@ -pthread \
${GTKMM_LIBS} \
-L${USR_LIB_DIR} \
-L${CORE_LIB_DIR} \
+ -L${AUTHENTICATION_LIB_DIR} \
-L${STORAGE_LIB_DIR}
#-------------------------------------------------------------------------------
# Dependencies
#-------------------------------------------------------------------------------
-G_LIVESUPPORT_OBJS = ${TMP_DIR}/UiTestMainWindow.o \
+G_LIVESUPPORT_OBJS = ${TMP_DIR}/GLiveSupport.o \
+ ${TMP_DIR}/UiTestMainWindow.o \
${TMP_DIR}/GtkLocalizedObject.o \
${TMP_DIR}/LoginWindow.o
@@ -135,6 +145,7 @@ G_LIVESUPPORT_EXE_OBJS = ${TMP_DIR}/main.o
FSDF = ${G_LIVESUPPORT_OBJS} \
${TMP_DIR}/main.o
G_LIVESUPPORT_EXE_LIBS = -l${CORE_LIB} \
+ -l${AUTHENTICATION_LIB} \
-lboost_date_time-gcc \
-lxmlrpc++ -lssl -lxml++-1.0
@@ -168,6 +179,7 @@ docclean:
depclean: clean
${MAKE} -C ${STORAGE_DIR} clean
+ ${MAKE} -C ${AUTHENTICATION_DIR} clean
${MAKE} -C ${CORE_DIR} clean
distclean: clean docclean
@@ -179,13 +191,15 @@ run_tests: ${TEST_RUNNER}
${TEST_RUNNER} -o ${TEST_RESULTS} -s ${TEST_XSLT}
run: all
- ${G_LIVESUPPORT_EXE}
+ ${G_LIVESUPPORT_EXE} -c ${G_LIVESUPPORT_CFG}
#-------------------------------------------------------------------------------
# Specific targets
#-------------------------------------------------------------------------------
-${G_LIVESUPPORT_EXE}: ${CORE_LIB_FILE} ${STORAGE_LIB_FILE} \
+${G_LIVESUPPORT_EXE}: ${CORE_LIB_FILE} \
+ ${AUTHENTICATION_LIB_FILE} \
+ ${STORAGE_LIB_FILE} \
${G_LIVESUPPORT_OBJS} ${G_LIVESUPPORT_EXE_OBJS}
${CXX} ${LDFLAGS} -o $@ $^ ${G_LIVESUPPORT_EXE_LIBS}
@@ -195,13 +209,18 @@ ${TMP_DIR}:
${DOXYGEN_DIR}:
${MKDIR} ${DOXYGEN_DIR}
-${TEST_RUNNER}: ${CORE_LIB_FILE} ${STORAGE_LIB_FILE} \
+${TEST_RUNNER}: ${CORE_LIB_FILE} \
+ ${AUTHENTICATION_LIB_FILE} \
+ ${STORAGE_LIB_FILE} \
${TEST_RUNNER_OBJS}
${CXX} ${LDFLAGS} -o $@ ${TEST_RUNNER_OBJS} ${TEST_RUNNER_LIBS}
${CORE_LIB_FILE}:
${MAKE} -C ${CORE_DIR}
+${AUTHENTICATION_LIB_FILE}:
+ ${MAKE} -C ${AUTHENTICATION_DIR}
+
${STORAGE_LIB_FILE}:
${MAKE} -C ${STORAGE_DIR}
diff --git a/livesupport/products/gLiveSupport/etc/gLiveSupport.xml b/livesupport/products/gLiveSupport/etc/gLiveSupport.xml
new file mode 100644
index 000000000..49be691fc
--- /dev/null
+++ b/livesupport/products/gLiveSupport/etc/gLiveSupport.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+
+
+
+
+
diff --git a/livesupport/products/gLiveSupport/src/GLiveSupport.cxx b/livesupport/products/gLiveSupport/src/GLiveSupport.cxx
new file mode 100644
index 000000000..55588e290
--- /dev/null
+++ b/livesupport/products/gLiveSupport/src/GLiveSupport.cxx
@@ -0,0 +1,152 @@
+/*------------------------------------------------------------------------------
+
+ Copyright (c) 2004 Media Development Loan Fund
+
+ This file is part of the LiveSupport project.
+ http://livesupport.campware.org/
+ To report bugs, send an e-mail to bugs@campware.org
+
+ LiveSupport 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 2 of the License, or
+ (at your option) any later version.
+
+ LiveSupport 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 LiveSupport; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+ Author : $Author: maroy $
+ Version : $Revision: 1.1 $
+ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/GLiveSupport.cxx,v $
+
+------------------------------------------------------------------------------*/
+
+/* ============================================================ include files */
+
+#ifdef HAVE_CONFIG_H
+#include "configure.h"
+#endif
+
+#include
+#include
+
+#include "LiveSupport/Authentication/AuthenticationClientFactory.h"
+
+#include "UiTestMainWindow.h"
+#include "LoginWindow.h"
+#include "GLiveSupport.h"
+
+
+using namespace LiveSupport::Core;
+using namespace LiveSupport::Authentication;
+using namespace LiveSupport::GLiveSupport;
+
+
+/* =================================================== local data structures */
+
+
+/* ================================================ local constants & macros */
+
+/*------------------------------------------------------------------------------
+ * The name of the config element for this class
+ *----------------------------------------------------------------------------*/
+const std::string LiveSupport :: GLiveSupport ::
+ GLiveSupport :: configElementNameStr = "gLiveSupport";
+
+
+/* =============================================== local function prototypes */
+
+
+/* ============================================================= module code */
+
+/*------------------------------------------------------------------------------
+ * Configure the gLiveSupport object
+ *----------------------------------------------------------------------------*/
+void
+LiveSupport :: GLiveSupport ::
+GLiveSupport :: configure(const xmlpp::Element & element)
+ throw (std::invalid_argument,
+ std::logic_error)
+{
+ if (element.get_name() != configElementNameStr) {
+ std::string eMsg = "Bad configuration element ";
+ eMsg += element.get_name();
+ throw std::invalid_argument(eMsg);
+ }
+
+ xmlpp::Node::NodeList nodes;
+
+ // configure the AuthenticationClientFactory
+ nodes = element.get_children(
+ AuthenticationClientFactory::getConfigElementName());
+ if (nodes.size() < 1) {
+ throw std::invalid_argument("no authenticationClientFactory element");
+ }
+ Ptr::Ref acf
+ = AuthenticationClientFactory::getInstance();
+ acf->configure( *((const xmlpp::Element*) *(nodes.begin())) );
+
+ authentication = acf->getAuthenticationClient();
+
+ // load the resource bundle
+ // TODO: get resource bundle path from config file
+ UErrorCode status = U_ZERO_ERROR;
+ resourceBundle.reset(new ResourceBundle("./tmp/" PACKAGE_NAME,
+ "en",
+ status));
+ if (!U_SUCCESS(status)) {
+ throw std::invalid_argument("opening resource bundle a failure");
+ }
+}
+
+
+/*------------------------------------------------------------------------------
+ * Show the main window.
+ *----------------------------------------------------------------------------*/
+void
+LiveSupport :: GLiveSupport ::
+GLiveSupport :: show(void) throw ()
+{
+ Ptr::Ref mainWindow;
+
+ mainWindow.reset(new UiTestMainWindow(shared_from_this(), resourceBundle));
+
+ // Shows the window and returns when it is closed.
+ Gtk::Main::run(*mainWindow);
+}
+
+
+/*------------------------------------------------------------------------------
+ * Authenticate the user
+ *----------------------------------------------------------------------------*/
+bool
+LiveSupport :: GLiveSupport ::
+GLiveSupport :: login(const std::string & login,
+ const std::string & password) throw ()
+{
+ sessionId = authentication->login(login, password);
+
+ return sessionId.get() != 0;
+}
+
+
+/*------------------------------------------------------------------------------
+ * Log the user out.
+ *----------------------------------------------------------------------------*/
+void
+LiveSupport :: GLiveSupport ::
+GLiveSupport :: logout(void) throw ()
+{
+ if (sessionId.get() != 0) {
+ authentication->logout(sessionId);
+ sessionId.reset();
+ }
+}
+
+
diff --git a/livesupport/products/gLiveSupport/src/GLiveSupport.h b/livesupport/products/gLiveSupport/src/GLiveSupport.h
new file mode 100644
index 000000000..2aede2a35
--- /dev/null
+++ b/livesupport/products/gLiveSupport/src/GLiveSupport.h
@@ -0,0 +1,197 @@
+/*------------------------------------------------------------------------------
+
+ Copyright (c) 2004 Media Development Loan Fund
+
+ This file is part of the LiveSupport project.
+ http://livesupport.campware.org/
+ To report bugs, send an e-mail to bugs@campware.org
+
+ LiveSupport 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 2 of the License, or
+ (at your option) any later version.
+
+ LiveSupport 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 LiveSupport; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+ Author : $Author: maroy $
+ Version : $Revision: 1.1 $
+ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/GLiveSupport.h,v $
+
+------------------------------------------------------------------------------*/
+#ifndef GLiveSupport_h
+#define GLiveSupport_h
+
+#ifndef __cplusplus
+#error This is a C++ include file
+#endif
+
+
+/* ============================================================ include files */
+
+#ifdef HAVE_CONFIG_H
+#include "configure.h"
+#endif
+
+#include
+#include
+#include
+
+#include "LiveSupport/Core/Ptr.h"
+#include "LiveSupport/Core/Configurable.h"
+#include "LiveSupport/Core/AuthenticationClientInterface.h"
+
+namespace LiveSupport {
+namespace GLiveSupport {
+
+using namespace LiveSupport::Core;
+
+/* ================================================================ constants */
+
+
+/* =================================================================== macros */
+
+
+/* =============================================================== data types */
+
+/**
+ * The main application object for the gLiveSupport GUI.
+ *
+ * @author $Author: maroy $
+ * @version $Revision: 1.1 $
+ */
+class GLiveSupport : public Configurable,
+ public boost::enable_shared_from_this
+{
+ private:
+ /**
+ * The name of the configuration XML elmenent used by Playlist.
+ */
+ static const std::string configElementNameStr;
+
+ /**
+ * The resource bundle used by the applicaton.
+ */
+ Ptr::Ref resourceBundle;
+
+ /**
+ * The authentication client used by the application.
+ */
+ Ptr::Ref authentication;
+
+ /**
+ * The session id for the user.
+ */
+ Ptr::Ref sessionId;
+
+
+ public:
+ /**
+ * Constructor.
+ */
+ GLiveSupport(void) throw ()
+ {
+ }
+
+ /**
+ * Virtual destructor.
+ */
+ virtual
+ ~GLiveSupport(void) throw ()
+ {
+ }
+
+ /**
+ * Return the name of the XML element this object expects
+ * to be sent to a call to configure().
+ *
+ * @return the name of the expected XML configuration element.
+ */
+ static const std::string
+ getConfigElementName(void) throw ()
+ {
+ return configElementNameStr;
+ }
+
+ /**
+ * Configure the scheduler daemon based on the XML element
+ * supplied.
+ *
+ * @param element the XML element to configure the scheduler
+ * daemon from.
+ * @exception std::invalid_argument if the supplied XML element
+ * contains bad configuraiton information
+ * @exception std::logic_error if the object has already
+ * been configured.
+ */
+ void
+ configure(const xmlpp::Element & element)
+ throw (std::invalid_argument,
+ std::logic_error);
+
+ /**
+ * Show the main window, and run the application.
+ * This call will only return after the main window has been closed.
+ */
+ void
+ show(void) throw ();
+
+ /**
+ * Perform authentication for the user of the application.
+ * As a result, the user will be authenticated for later
+ * actions, that need authentication.
+ * The user has to be logged out later.
+ *
+ * @param login the login ID of the user
+ * @param password the password of the user
+ * @return true if the authentication was successful,
+ * false otherwise
+ * @see #logout
+ */
+ bool
+ login(const std::string & login,
+ const std::string & password) throw ();
+
+ /**
+ * Return the session id for the user.
+ *
+ * @return the session id for the user, if he has been already
+ * successfully authenticated with a call to login(),
+ * and not yet logged out.
+ * otherwise, a reference to 0.
+ * @see #login
+ */
+ Ptr::Ref
+ getSessionId(void) const throw ()
+ {
+ return sessionId;
+ }
+
+ /**
+ * Log out the user, if he has been authenticated previously
+ * with a successful call to login().
+ *
+ * @see #logout
+ */
+ void
+ logout(void) throw ();
+};
+
+/* ================================================= external data structures */
+
+
+/* ====================================================== function prototypes */
+
+
+} // namespace GLiveSupport
+} // namespace LiveSupport
+
+#endif // GLiveSupport_h
+
diff --git a/livesupport/products/gLiveSupport/src/GtkLocalizedObject.cxx b/livesupport/products/gLiveSupport/src/GtkLocalizedObject.cxx
index eb1931185..58d0deb4f 100644
--- a/livesupport/products/gLiveSupport/src/GtkLocalizedObject.cxx
+++ b/livesupport/products/gLiveSupport/src/GtkLocalizedObject.cxx
@@ -22,7 +22,7 @@
Author : $Author: maroy $
- Version : $Revision: 1.1 $
+ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/Attic/GtkLocalizedObject.cxx,v $
------------------------------------------------------------------------------*/
@@ -70,3 +70,23 @@ GtkLocalizedObject :: unicodeStringToUstring(
return ustr;
}
+
+/*------------------------------------------------------------------------------
+ * Create an ICU UnicodeString from a Glib ustring
+ *----------------------------------------------------------------------------*/
+Ptr::Ref
+GtkLocalizedObject :: ustringToUnicodeString(
+ Ptr::Ref gString)
+ throw ()
+{
+ Ptr::Ref uString(new UnicodeString());
+
+ Glib::ustring::const_iterator it = gString->begin();
+ Glib::ustring::const_iterator end = gString->end();
+ while (it < end) {
+ uString->append((UChar32) *it++);
+ }
+
+ return uString;
+}
+
diff --git a/livesupport/products/gLiveSupport/src/GtkLocalizedObject.h b/livesupport/products/gLiveSupport/src/GtkLocalizedObject.h
index 599e06d45..17039fab6 100644
--- a/livesupport/products/gLiveSupport/src/GtkLocalizedObject.h
+++ b/livesupport/products/gLiveSupport/src/GtkLocalizedObject.h
@@ -22,7 +22,7 @@
Author : $Author: maroy $
- Version : $Revision: 1.1 $
+ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/Attic/GtkLocalizedObject.h,v $
------------------------------------------------------------------------------*/
@@ -62,7 +62,7 @@ using namespace LiveSupport::Core;
* Base class for localized objects, using GTK+ strings.
*
* @author $Author: maroy $
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
class GtkLocalizedObject : public LocalizedObject
{
@@ -89,13 +89,23 @@ class GtkLocalizedObject : public LocalizedObject
/**
* Convert an ICU unicode string to a Glib ustring.
*
- * @param unicodeString the ICU unicode string to conver.
+ * @param unicodeString the ICU unicode string to convert.
* @return the same string as supplied, in Glib ustring form.
*/
static Ptr::Ref
unicodeStringToUstring(Ptr::Ref unicodeString)
throw ();
+ /**
+ * Convert a Glib ustring to an ICU unicode string.
+ *
+ * @param gString the Glib ustring to convert
+ * @return the same string as supplied, in ICU unicode form.
+ */
+ static Ptr::Ref
+ ustringToUnicodeString(Ptr::Ref gString)
+ throw ();
+
/**
* Get a string from the resource bundle, as a Glib ustring.
*
@@ -110,6 +120,33 @@ class GtkLocalizedObject : public LocalizedObject
{
return unicodeStringToUstring(getResourceString(key));
}
+
+ /**
+ * A convenience function to format a message, based on a pattern
+ * loaded from a resource.
+ * For more information, see the ICU MessageFormat class
+ * documentation.
+ *
+ * @param patternKey the key of the pattern to format
+ * @param arguments the arguments to use in the formatting
+ * @param nArguments the number of arguments supplied
+ * @return the formatted string, in Glib ustring form
+ * @exception std::invalid_argument if the pattern is bad, or
+ * the arguments do not match, or there is no resource
+ * specified by patternKey
+ * @see http://oss.software.ibm.com/icu/apiref/classMessageFormat.html
+ */
+ virtual Ptr::Ref
+ formatMessageUstring(const char * patternKey,
+ Formattable * arguments,
+ unsigned int nArguments)
+ throw (std::invalid_argument)
+ {
+ return unicodeStringToUstring(formatMessage(patternKey,
+ arguments,
+ nArguments));
+ }
+
};
/* ================================================= external data structures */
diff --git a/livesupport/products/gLiveSupport/src/LoginWindow.cxx b/livesupport/products/gLiveSupport/src/LoginWindow.cxx
index fe3e44d65..64ad94841 100644
--- a/livesupport/products/gLiveSupport/src/LoginWindow.cxx
+++ b/livesupport/products/gLiveSupport/src/LoginWindow.cxx
@@ -22,7 +22,7 @@
Author : $Author: maroy $
- Version : $Revision: 1.2 $
+ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/LoginWindow.cxx,v $
------------------------------------------------------------------------------*/
@@ -176,8 +176,8 @@ LoginWindow :: ~LoginWindow (void) throw ()
void
LoginWindow :: onOkButtonClicked (void) throw ()
{
- loginText.reset(new std::string(loginEntry->get_text()));
- passwordText.reset(new std::string(passwordEntry->get_text()));
+ loginText.reset(new Glib::ustring(loginEntry->get_text()));
+ passwordText.reset(new Glib::ustring(passwordEntry->get_text()));
hide();
}
diff --git a/livesupport/products/gLiveSupport/src/LoginWindow.h b/livesupport/products/gLiveSupport/src/LoginWindow.h
index a7ab290c5..c2bcdbc2e 100644
--- a/livesupport/products/gLiveSupport/src/LoginWindow.h
+++ b/livesupport/products/gLiveSupport/src/LoginWindow.h
@@ -22,7 +22,7 @@
Author : $Author: maroy $
- Version : $Revision: 1.2 $
+ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/LoginWindow.h,v $
------------------------------------------------------------------------------*/
@@ -70,7 +70,7 @@ using namespace LiveSupport::Core;
* A window, handling user login.
*
* @author $Author: maroy $
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
class LoginWindow : public Gtk::Window, public GtkLocalizedObject
{
@@ -109,12 +109,12 @@ class LoginWindow : public Gtk::Window, public GtkLocalizedObject
/**
* The login text, that was entered by the user.
*/
- Ptr::Ref loginText;
+ Ptr::Ref loginText;
/**
* The password text, that was entered by the user.
*/
- Ptr::Ref passwordText;
+ Ptr::Ref passwordText;
/**
* Signal handler for the ok button clicked.
@@ -143,7 +143,7 @@ class LoginWindow : public Gtk::Window, public GtkLocalizedObject
*
* @return the login entered by the user.
*/
- Ptr::Ref
+ Ptr::Ref
getLogin(void) const throw ()
{
return loginText;
@@ -154,7 +154,7 @@ class LoginWindow : public Gtk::Window, public GtkLocalizedObject
*
* @return the password entered by the user.
*/
- Ptr::Ref
+ Ptr::Ref
getPassword(void) const throw ()
{
return passwordText;
diff --git a/livesupport/products/gLiveSupport/src/UiTestMainWindow.cxx b/livesupport/products/gLiveSupport/src/UiTestMainWindow.cxx
index 2677a4d91..68936680f 100644
--- a/livesupport/products/gLiveSupport/src/UiTestMainWindow.cxx
+++ b/livesupport/products/gLiveSupport/src/UiTestMainWindow.cxx
@@ -22,7 +22,7 @@
Author : $Author: maroy $
- Version : $Revision: 1.2 $
+ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/Attic/UiTestMainWindow.cxx,v $
------------------------------------------------------------------------------*/
@@ -34,7 +34,9 @@
#endif
#include
+#include
#include
+#include
#include "LoginWindow.h"
#include "UiTestMainWindow.h"
@@ -56,31 +58,46 @@ using namespace LiveSupport::GLiveSupport;
/*------------------------------------------------------------------------------
* Constructor.
*----------------------------------------------------------------------------*/
-UiTestMainWindow :: UiTestMainWindow (Ptr::Ref bundle)
+UiTestMainWindow :: UiTestMainWindow (Ptr::Ref gLiveSupport,
+ Ptr::Ref bundle)
throw ()
: GtkLocalizedObject(bundle)
{
- // set up the quit button
- quitButton.reset(new Gtk::Button("quit"));
- quitButton->signal_clicked().connect(sigc::mem_fun(*this,
- &UiTestMainWindow::onQuitButtonClicked));
+ this->gLiveSupport = gLiveSupport;
+
+ // set up the status label
+ statusLabel.reset(new Gtk::Label(*getResourceUstring("welcomeMsg")));
// set up the login button
loginButton.reset(new Gtk::Button("loginWindow"));
loginButton->signal_clicked().connect(sigc::mem_fun(*this,
&UiTestMainWindow::onLoginButtonClicked));
+ // set up the logout button
+ logoutButton.reset(new Gtk::Button("logout"));
+ logoutButton->signal_clicked().connect(sigc::mem_fun(*this,
+ &UiTestMainWindow::onLogoutButtonClicked));
+
+ // set up the quit button
+ quitButton.reset(new Gtk::Button("quit"));
+ quitButton->signal_clicked().connect(sigc::mem_fun(*this,
+ &UiTestMainWindow::onQuitButtonClicked));
+
// set up the layout, which is a button box
layout.reset(new Gtk::VButtonBox());
// set up the main window, and show everything
set_border_width(10);
+ layout->add(*statusLabel);
layout->add(*loginButton);
+ layout->add(*logoutButton);
layout->add(*quitButton);
add(*layout);
// show everything
+ statusLabel->show();
loginButton->show();
+ logoutButton->show();
quitButton->show();
layout->show();
show();
@@ -95,6 +112,17 @@ UiTestMainWindow :: ~UiTestMainWindow (void) throw ()
}
+/*------------------------------------------------------------------------------
+ * Event handler for the logout getting clicked.
+ *----------------------------------------------------------------------------*/
+void
+UiTestMainWindow :: onLogoutButtonClicked (void) throw ()
+{
+ gLiveSupport->logout();
+ statusLabel->set_label(*getResourceUstring("welcomeMsg"));
+}
+
+
/*------------------------------------------------------------------------------
* Event handler for the quit getting clicked.
*----------------------------------------------------------------------------*/
@@ -123,7 +151,18 @@ UiTestMainWindow :: onLoginButtonClicked (void) throw ()
Gtk::Main::run(*loginWindow);
- std::cout << "login: " << *loginWindow->getLogin() << std::endl;
- std::cout << "password: " << *loginWindow->getPassword() << std::endl;
+ Ptr::Ref login = loginWindow->getLogin();
+ Ptr::Ref password = loginWindow->getPassword();
+
+ bool loggedIn = gLiveSupport->login(login->raw(), password->raw());
+
+ if (loggedIn) {
+ Ptr::Ref uLogin = ustringToUnicodeString(login);
+ Formattable arguments[] = { *uLogin };
+ Ptr::Ref msg = formatMessageUstring("loggedInMsg",
+ arguments, 1);
+
+ statusLabel->set_label(*msg);
+ }
}
diff --git a/livesupport/products/gLiveSupport/src/UiTestMainWindow.h b/livesupport/products/gLiveSupport/src/UiTestMainWindow.h
index e5e269a49..7d6854f79 100644
--- a/livesupport/products/gLiveSupport/src/UiTestMainWindow.h
+++ b/livesupport/products/gLiveSupport/src/UiTestMainWindow.h
@@ -22,7 +22,7 @@
Author : $Author: maroy $
- Version : $Revision: 1.2 $
+ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/Attic/UiTestMainWindow.h,v $
------------------------------------------------------------------------------*/
@@ -47,6 +47,7 @@
#include "LiveSupport/Core/Ptr.h"
#include "GtkLocalizedObject.h"
+#include "GLiveSupport.h"
namespace LiveSupport {
namespace GLiveSupport {
@@ -65,7 +66,7 @@ using namespace LiveSupport::Core;
* A window, enabling interactive testing of UI components.
*
* @author $Author: maroy $
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
class UiTestMainWindow : public Gtk::Window, public GtkLocalizedObject
{
@@ -75,6 +76,11 @@ class UiTestMainWindow : public Gtk::Window, public GtkLocalizedObject
*/
Ptr::Ref layout;
+ /**
+ * A label to display the status of the user.
+ */
+ Ptr::Ref statusLabel;
+
/**
* The to quit the applicaiton.
*/
@@ -85,6 +91,16 @@ class UiTestMainWindow : public Gtk::Window, public GtkLocalizedObject
*/
Ptr::Ref loginButton;
+ /**
+ * The button to log out.
+ */
+ Ptr::Ref logoutButton;
+
+ /**
+ * The gLiveSupport object, handling the logic of the application.
+ */
+ Ptr::Ref gLiveSupport;
+
/**
* Signal handler for the quit button clicked.
*/
@@ -97,14 +113,23 @@ class UiTestMainWindow : public Gtk::Window, public GtkLocalizedObject
virtual void
onLoginButtonClicked(void) throw ();
+ /**
+ * Signal handler for the logout button clicked.
+ */
+ virtual void
+ onLogoutButtonClicked(void) throw ();
+
public:
/**
* Constructor.
*
+ * @param gLiveSupport the gLiveSupport object, handling the
+ * logic of the application
* @param bundle the resource bundle holding localized resources
*/
- UiTestMainWindow(Ptr::Ref bundle)
+ UiTestMainWindow(Ptr::Ref gLiveSupport,
+ Ptr::Ref bundle)
throw ();
/**
diff --git a/livesupport/products/gLiveSupport/src/main.cxx b/livesupport/products/gLiveSupport/src/main.cxx
index a67b1d836..695d62847 100644
--- a/livesupport/products/gLiveSupport/src/main.cxx
+++ b/livesupport/products/gLiveSupport/src/main.cxx
@@ -22,7 +22,7 @@
Author : $Author: maroy $
- Version : $Revision: 1.3 $
+ Version : $Revision: 1.4 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/gLiveSupport/src/main.cxx,v $
------------------------------------------------------------------------------*/
@@ -37,15 +37,22 @@
#include "configure.h"
#endif
+#if HAVE_GETOPT_H
+#include
+#else
+#error "Need getopt.h"
+#endif
+
#include
#include
+#include
#include
#include "LiveSupport/Core/Ptr.h"
#include "LiveSupport/Core/LocalizedObject.h"
-#include "UiTestMainWindow.h"
+#include "GLiveSupport.h"
using namespace LiveSupport::Core;
using namespace LiveSupport::GLiveSupport;
@@ -55,9 +62,49 @@ using namespace LiveSupport::GLiveSupport;
/* ================================================ local constants & macros */
+/**
+ * Our copyright notice, should be at most 80 columns
+ */
+static const char copyrightNotice[] =
+ "Copyright (c) 2004 Media Development Loan Fund under the GNU GPL";
+
+/**
+ * String describing the short options.
+ */
+static const char options[] = "c:hv";
+
+/**
+ * Structure describing the long options
+ */
+static const struct option longOptions[] = {
+ { "config", required_argument, 0, 'c' },
+ { "help", no_argument, 0, 'h' },
+ { "version", no_argument, 0, 'v' },
+ { 0, 0, 0, 0 }
+};
+
/* =============================================== local function prototypes */
+/**
+ * Print program version.
+ *
+ * @param os the std::ostream to print to.
+ */
+static void
+printVersion ( std::ostream & os );
+
+/**
+ * Print program usage information.
+ *
+ * @param invocation the command line command used to invoke this program.
+ * @param os the std::ostream to print to.
+ */
+static void
+printUsage ( const char invocation[],
+ std::ostream & os );
+
+
/* ============================================================= module code */
/**
@@ -70,30 +117,92 @@ using namespace LiveSupport::GLiveSupport;
int main ( int argc,
char * argv[] )
{
+ // initialize the Gtk library, with the Gtk options first
Gtk::Main kit(argc, argv);
- UErrorCode status = U_ZERO_ERROR;
- Ptr::Ref bundle(new ResourceBundle("./tmp/" PACKAGE_NAME,
- "en",
- status));
- if (!U_SUCCESS(status)) {
- std::cerr << "opening resource bundle a failure" << std::endl;
+ // take a look at our options
+ int i;
+ std::string configFileName;
+
+ while ((i = getopt_long(argc, argv, options, longOptions, 0)) != -1) {
+ switch (i) {
+ case 'c':
+ configFileName = optarg;
+ break;
+
+ case 'h':
+ printUsage(argv[0], std::cout);
+ exit(EXIT_SUCCESS);
+
+ case 'v':
+ printVersion(std::cout);
+ exit(EXIT_SUCCESS);
+
+ default:
+ printUsage(argv[0], std::cout);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (optind != argc) {
+ printUsage(argv[0], std::cout);
exit(EXIT_FAILURE);
}
- Ptr::Ref mainWindow(new UiTestMainWindow(bundle));
+ std::cerr << "using config file '" << configFileName << '\'' << std::endl;
+
+ Ptr::Ref gLiveSupport(new GLiveSupport());
- Ptr::Ref loginBundle;
try {
- loginBundle = mainWindow->getBundle("loginWindow");
+ std::auto_ptr
+ parser(new xmlpp::DomParser(configFileName, true));
+ const xmlpp::Document * document = parser->get_document();
+ gLiveSupport->configure(*(document->get_root_node()));
} catch (std::invalid_argument &e) {
- std::cerr << e.what() << std::endl;
+ std::cerr << "semantic error in configuration file" << std::endl
+ << e.what() << std::endl;
+ exit(EXIT_FAILURE);
+ } catch (xmlpp::exception &e) {
+ std::cerr << "error parsing configuration file" << std::endl
+ << e.what() << std::endl;
exit(EXIT_FAILURE);
}
- // Shows the window and returns when it is closed.
- Gtk::Main::run(*mainWindow);
+ gLiveSupport->show();
exit(EXIT_SUCCESS);
}
+
+/*------------------------------------------------------------------------------
+ * Print program version.
+ *----------------------------------------------------------------------------*/
+static void
+printVersion ( std::ostream & os )
+{
+ os << PACKAGE_NAME << ' ' << PACKAGE_VERSION << std::endl
+ << copyrightNotice << std::endl;
+}
+
+
+/*------------------------------------------------------------------------------
+ * Print program usage.
+ *----------------------------------------------------------------------------*/
+static void
+printUsage ( const char invocation[],
+ std::ostream & os )
+{
+ os << PACKAGE_NAME << ' ' << PACKAGE_VERSION << std::endl
+ << std::endl
+ << "Usage: " << invocation << " [OPTION]"
+ << std::endl
+ << " mandatory options:" << std::endl
+ << " -c, --config=file.name scheduler configuration file" << std::endl
+ << " optional options:" << std::endl
+ << " -h, --help display this help and exit" << std::endl
+ << " -v, --version display version information and exit"
+ << std::endl
+ << std::endl
+ << "Report bugs to " << PACKAGE_BUGREPORT << std::endl;
+}
+
diff --git a/livesupport/products/gLiveSupport/var/hu.txt b/livesupport/products/gLiveSupport/var/hu.txt
index cd162f77c..f84fb4180 100644
--- a/livesupport/products/gLiveSupport/var/hu.txt
+++ b/livesupport/products/gLiveSupport/var/hu.txt
@@ -1,5 +1,8 @@
hu:table
{
+ welcomeMsg:string { "Üdvözöljük" }
+ loggedInMsg:string { "Bejelentkezve {0} felhasználóként" }
+
loginWindow:table
{
loginLabel:string { "azonositó:" }
diff --git a/livesupport/products/gLiveSupport/var/root.txt b/livesupport/products/gLiveSupport/var/root.txt
index b0e266eff..18b9d78f7 100644
--- a/livesupport/products/gLiveSupport/var/root.txt
+++ b/livesupport/products/gLiveSupport/var/root.txt
@@ -1,5 +1,8 @@
root:table
{
+ welcomeMsg:string { "welcome" }
+ loggedInMsg:string { "Logged in as {0}" }
+
loginWindow:table
{
loginLabel:string { "login:" }