summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2011-11-28 15:24:58 +0000
committerrandomdan <randomdan@localhost>2011-11-28 15:24:58 +0000
commitb5d014dbc5466b7899c24fae9bdb449d44e67d22 (patch)
tree8e40b893938b0c1fb0c3f95716fdc262d7c20d5b
parentTweak the JS map function used to find expired sessions, even if I can't expl... (diff)
downloadproject2-b5d014dbc5466b7899c24fae9bdb449d44e67d22.tar.bz2
project2-b5d014dbc5466b7899c24fae9bdb449d44e67d22.tar.xz
project2-b5d014dbc5466b7899c24fae9bdb449d44e67d22.zip
Groundwork for common presenter layer
-rw-r--r--project2/cgi/cgiAppEngine.cpp31
-rw-r--r--project2/cgi/cgiAppEngine.h14
-rw-r--r--project2/cgi/cgiStageFail.cpp2
-rw-r--r--project2/cgi/cgiStageRedirect.cpp2
-rw-r--r--project2/common/appEngine.cpp2
-rw-r--r--project2/common/appEngine.h8
-rw-r--r--project2/common/if.cpp2
-rw-r--r--project2/common/if.h2
-rw-r--r--project2/common/presenter.h1
-rw-r--r--project2/common/rowView.cpp2
-rw-r--r--project2/common/rowView.h4
-rw-r--r--project2/common/view.h4
-rw-r--r--project2/common/viewHost.h2
-rw-r--r--project2/console/consoleAppEngine.cpp4
-rw-r--r--project2/console/consoleAppEngine.h4
-rw-r--r--project2/xml/rawView.cpp12
-rw-r--r--project2/xml/rawView.h2
-rw-r--r--project2/xml/xmlDocumentPrefetch.cpp2
-rw-r--r--project2/xml/xmlDocumentPrefetch.h2
19 files changed, 61 insertions, 41 deletions
diff --git a/project2/cgi/cgiAppEngine.cpp b/project2/cgi/cgiAppEngine.cpp
index 45ccd95..f647b0e 100644
--- a/project2/cgi/cgiAppEngine.cpp
+++ b/project2/cgi/cgiAppEngine.cpp
@@ -117,20 +117,30 @@ CgiApplicationEngine::Stage::~Stage()
}
void
-CgiApplicationEngine::addEnvData(const Presenter * p) const
+CgiApplicationEngine::addEnvData(const MultiRowSetPresenter * p) const
{
- // These were for debug... but why not pass them on?
- p->addNamedValue("servername", env()->xmlPrefix, env()->getServerName());
- p->addNamedValue("scriptname", env()->xmlPrefix, env()->getScriptName());
-
+ // Environment set up by web server
+ p->addNewRowSet("environment", env()->xmlPrefix);
+ // Server stuff
+ addEnvToPresenter(p, "servername", &cgicc::CgiEnvironment::getServerName);
+ addEnvToPresenter(p, "serversoftware", &cgicc::CgiEnvironment::getServerSoftware);
+ addEnvToPresenter(p, "serverprotocol", &cgicc::CgiEnvironment::getServerProtocol);
+ addEnvToPresenter(p, "serverport", &cgicc::CgiEnvironment::getServerPort);
+ addEnvToPresenter(p, "serverhttps", &cgicc::CgiEnvironment::usingHTTPS);
+ // Request stuff
+ addEnvToPresenter(p, "referrer", &cgicc::CgiEnvironment::getReferrer);
+ addEnvToPresenter(p, "querystring", &cgicc::CgiEnvironment::getQueryString);
+ p->finishRowSet();
+
// URL elements
p->addNewRowSet("uriElems", env()->xmlPrefix);
+ p->addAttribute("full", _env->getRedirectURL());
BOOST_FOREACH(std::string s, _env->elems) {
p->addNewRow("uriElem");
p->addAttribute("text", s);
p->finishRow();
}
- p->finishRow();
+ p->finishRowSet();
// Parameters
p->addNewRowSet("params", env()->xmlPrefix);
@@ -143,24 +153,23 @@ CgiApplicationEngine::addEnvData(const Presenter * p) const
p->finishRowSet();
}
-static
void
-addToPresenter(const Presenter * p, const Glib::ustring & name, const VariableType & value)
+CgiApplicationEngine::addVarToPresenter(const MultiRowSetPresenter * p, const Glib::ustring & name, const VariableType & value) const
{
p->addNewRow("var");
- p->addAttribute("value", value);
p->addAttribute("name", name);
+ p->addAttribute("value", value);
p->finishRow();
}
void
-CgiApplicationEngine::addAppData(const Presenter * p) const
+CgiApplicationEngine::addAppData(const MultiRowSetPresenter * p) const
{
addCoreAppData(p);
// Sessions variables
p->addNewRowSet("session", env()->xmlPrefix);
p->addAttribute("id", cursession->ID.str());
- cursession->ForeachValue(boost::bind(addToPresenter, p, _1, _2));
+ cursession->ForeachValue(boost::bind(&CgiApplicationEngine::addVarToPresenter, this, p, _1, _2));
p->finishRowSet();
// Timing info
diff --git a/project2/cgi/cgiAppEngine.h b/project2/cgi/cgiAppEngine.h
index 6e202e4..88419fb 100644
--- a/project2/cgi/cgiAppEngine.h
+++ b/project2/cgi/cgiAppEngine.h
@@ -18,6 +18,7 @@ class CgiEnvironment;
class Session;
namespace cgicc {
class HTTPHeader;
+ class CgiEnvironment;
}
namespace xmlpp {
class Document;
@@ -35,8 +36,8 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
const Environment * env() const;
SessionPtr session() const;
virtual Glib::ustring resolveCurrentConfig() const;
- void addAppData(const Presenter * p) const;
- void addEnvData(const Presenter * p) const;
+ void addAppData(const MultiRowSetPresenter * p) const;
+ void addEnvData(const MultiRowSetPresenter * p) const;
const CgiEnvironment * _env;
private:
@@ -48,13 +49,20 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
bool checkDomain(const DomainPlatforms::value_type & i) const;
void loadEngineSection(const xmlpp::Element *) const;
SessionContainerPtr sessionsContainer;
+ // Helpers
+ void addVarToPresenter(const MultiRowSetPresenter * p, const Glib::ustring & name, const VariableType &) const;
+ typedef std::string (cgicc::CgiEnvironment::*StrEnvGetter)() const;
+ template <class X>
+ void addEnvToPresenter(const MultiRowSetPresenter * p, const char * name, X (cgicc::CgiEnvironment::*getter)() const) const {
+ addVarToPresenter(p, name, (_env->*getter)());
+ }
public:
class Stage;
class ResponseStage;
typedef boost::intrusive_ptr<Stage> StagePtr;
typedef boost::intrusive_ptr<ResponseStage> ResponseStagePtr;
- typedef boost::tuple<StagePtr, ResponseStagePtr, TransformSourcePtr, PresenterPtr> NextStage;
+ typedef boost::tuple<StagePtr, ResponseStagePtr, TransformSourcePtr, MultiRowSetPresenterPtr> NextStage;
/// Base class for a stage iteration that should eventually produce a response for the client
class Stage : public virtual IntrusivePtrBase {
public:
diff --git a/project2/cgi/cgiStageFail.cpp b/project2/cgi/cgiStageFail.cpp
index 6a60700..97ac22a 100644
--- a/project2/cgi/cgiStageFail.cpp
+++ b/project2/cgi/cgiStageFail.cpp
@@ -36,7 +36,7 @@ namespace CgiApplicationExtras {
code(e, "code", false, 500),
message(e, "message", false, "Application error") {
}
- void execute(const Presenter *) const {
+ void execute(const MultiRowSetPresenter *) const {
throw CgiApplicationEngine::ResponseStagePtr(
new FailStage(dynamic_cast<const CgiEnvironment *>(Environment::getCurrent()), code(), message()));
}
diff --git a/project2/cgi/cgiStageRedirect.cpp b/project2/cgi/cgiStageRedirect.cpp
index c2e498f..f72e986 100644
--- a/project2/cgi/cgiStageRedirect.cpp
+++ b/project2/cgi/cgiStageRedirect.cpp
@@ -34,7 +34,7 @@ namespace CgiApplicationExtras {
View(e),
url(e, "url", true) {
}
- void execute(const Presenter *) const {
+ void execute(const MultiRowSetPresenter *) const {
throw CgiApplicationEngine::ResponseStagePtr(
new RedirectStage(dynamic_cast<const CgiEnvironment *>(Environment::getCurrent()), url()));
}
diff --git a/project2/common/appEngine.cpp b/project2/common/appEngine.cpp
index 59fa1ee..245f4e5 100644
--- a/project2/common/appEngine.cpp
+++ b/project2/common/appEngine.cpp
@@ -31,7 +31,7 @@ ApplicationEngine::logMessage(bool writeLog, const Glib::ustring & g, const Glib
}
void
-ApplicationEngine::addCoreAppData(const Presenter * p) const
+ApplicationEngine::addCoreAppData(const MultiRowSetPresenter * p) const
{
// Message log
p->addNewRowSet("messages", env()->xmlPrefix);
diff --git a/project2/common/appEngine.h b/project2/common/appEngine.h
index 39214d3..19df823 100644
--- a/project2/common/appEngine.h
+++ b/project2/common/appEngine.h
@@ -5,7 +5,7 @@
#include "session.h"
#include "config.h"
-class Presenter;
+class MultiRowSetPresenter;
class ApplicationEngine : public Configuration {
public:
@@ -27,13 +27,13 @@ class ApplicationEngine : public Configuration {
virtual void process() const = 0;
virtual const Environment * env() const = 0;
virtual SessionPtr session() const = 0;
- virtual void addAppData(const Presenter * p) const = 0;
- virtual void addEnvData(const Presenter * p) const = 0;
+ virtual void addAppData(const MultiRowSetPresenter * p) const = 0;
+ virtual void addEnvData(const MultiRowSetPresenter * p) const = 0;
static ApplicationEngine * getCurrent() { return currentEngine; }
protected:
- void addCoreAppData(const Presenter * p) const;
+ void addCoreAppData(const MultiRowSetPresenter * p) const;
Messages appMessages;
diff --git a/project2/common/if.cpp b/project2/common/if.cpp
index eac55c5..f3c7102 100644
--- a/project2/common/if.cpp
+++ b/project2/common/if.cpp
@@ -54,7 +54,7 @@ If::If(const xmlpp::Element * e) :
}
void
-If::execute(const Presenter * presenter) const
+If::execute(const MultiRowSetPresenter * presenter) const
{
if (passes()) {
Logger()->messagef(LOG_DEBUG, "IfSet passed, showing %zu views", subViews.size());
diff --git a/project2/common/if.h b/project2/common/if.h
index 7a13fea..28299ba 100644
--- a/project2/common/if.h
+++ b/project2/common/if.h
@@ -23,7 +23,7 @@ class If : public IHaveSubTasks, public View, public IfSet {
public:
If(const xmlpp::Element *);
- virtual void execute(const Presenter*) const;
+ virtual void execute(const MultiRowSetPresenter*) const;
virtual void execute() const;
private:
diff --git a/project2/common/presenter.h b/project2/common/presenter.h
index 8ba7e6b..58af8dc 100644
--- a/project2/common/presenter.h
+++ b/project2/common/presenter.h
@@ -71,6 +71,7 @@ class ContentPresenter : public Presenter {
typedef boost::intrusive_ptr<const Presenter> PresenterCPtr;
typedef boost::intrusive_ptr<Presenter> PresenterPtr;
typedef boost::intrusive_ptr<RowSetPresenter> RowSetPresenterPtr;
+typedef boost::intrusive_ptr<MultiRowSetPresenter> MultiRowSetPresenterPtr;
typedef boost::intrusive_ptr<NameValuePairPresenter> NameValuePairPresenterPtr;
/// Base class to implement presenter modules
diff --git a/project2/common/rowView.cpp b/project2/common/rowView.cpp
index 000222d..a35619d 100644
--- a/project2/common/rowView.cpp
+++ b/project2/common/rowView.cpp
@@ -54,7 +54,7 @@ RowView::rowReady(const RowState * rs) const
}
void
-RowView::execute(const Presenter * p) const
+RowView::execute(const MultiRowSetPresenter * p) const
{
presenter = p;
presenter->addNewRowSet(rootName());
diff --git a/project2/common/rowView.h b/project2/common/rowView.h
index 2bab953..558284c 100644
--- a/project2/common/rowView.h
+++ b/project2/common/rowView.h
@@ -13,7 +13,7 @@ class RowView : public View, public RowProcessor {
virtual ~RowView();
void loadComplete(const CommonObjects *);
- void execute(const Presenter *) const;
+ void execute(const MultiRowSetPresenter *) const;
void rowReady(const RowState *) const;
const Variable rootName;
@@ -26,7 +26,7 @@ class RowView : public View, public RowProcessor {
void executeChildren() const;
typedef ANONSTORAGEOF(View) SubViews;
SubViews subViews;
- mutable const Presenter * presenter;
+ mutable const MultiRowSetPresenter * presenter;
};
#endif
diff --git a/project2/common/view.h b/project2/common/view.h
index 80d7b30..5a4b751 100644
--- a/project2/common/view.h
+++ b/project2/common/view.h
@@ -4,7 +4,7 @@
#include "sourceObject.h"
#include "xmlStorage.h"
-class Presenter;
+class MultiRowSetPresenter;
/// Base class for Project2 components that output data
class View : public virtual SourceObject {
@@ -12,7 +12,7 @@ class View : public virtual SourceObject {
View(const xmlpp::Element *);
virtual ~View();
- virtual void execute(const Presenter *) const = 0;
+ virtual void execute(const MultiRowSetPresenter *) const = 0;
};
#endif
diff --git a/project2/common/viewHost.h b/project2/common/viewHost.h
index 920bef0..788b633 100644
--- a/project2/common/viewHost.h
+++ b/project2/common/viewHost.h
@@ -18,7 +18,7 @@ class ViewHost : virtual public XmlScriptParser, virtual public CheckHost {
void executeViews(const DefaultPresenterProvider &) const;
void doTransforms() const;
- mutable PresenterPtr presenter;
+ mutable MultiRowSetPresenterPtr presenter;
private:
typedef ANONORDEREDSTORAGEOF(View) Views;
diff --git a/project2/console/consoleAppEngine.cpp b/project2/console/consoleAppEngine.cpp
index a34e078..83ab311 100644
--- a/project2/console/consoleAppEngine.cpp
+++ b/project2/console/consoleAppEngine.cpp
@@ -68,12 +68,12 @@ ConsoleApplicationEngine::session() const
}
void
-ConsoleApplicationEngine::addEnvData(const Presenter *) const
+ConsoleApplicationEngine::addEnvData(const MultiRowSetPresenter *) const
{
}
void
-ConsoleApplicationEngine::addAppData(const Presenter *) const
+ConsoleApplicationEngine::addAppData(const MultiRowSetPresenter *) const
{
}
diff --git a/project2/console/consoleAppEngine.h b/project2/console/consoleAppEngine.h
index f547a99..681f4a9 100644
--- a/project2/console/consoleAppEngine.h
+++ b/project2/console/consoleAppEngine.h
@@ -23,8 +23,8 @@ class ConsoleApplicationEngine : public ApplicationEngine, TaskHost, ViewHost {
const Environment * env() const;
SessionPtr session() const;
virtual Glib::ustring resolveCurrentConfig() const;
- virtual void addAppData(const Presenter * p) const;
- virtual void addEnvData(const Presenter * p) const;
+ virtual void addAppData(const MultiRowSetPresenter * p) const;
+ virtual void addEnvData(const MultiRowSetPresenter * p) const;
protected:
const ConsoleEnvironment * _env;
diff --git a/project2/xml/rawView.cpp b/project2/xml/rawView.cpp
index 2070a2f..151d594 100644
--- a/project2/xml/rawView.cpp
+++ b/project2/xml/rawView.cpp
@@ -19,12 +19,14 @@ RawView::RawView(const xmlpp::Element * p) :
}
void
-RawView::execute(const Presenter * p) const
+RawView::execute(const MultiRowSetPresenter * mp) const
{
- BOOST_FOREACH(xmlpp::Node * node, copyRoot->get_children()) {
- const xmlpp::Element * e = dynamic_cast<const xmlpp::Element *>(node);
- if (e) {
- copyNode(p, e);
+ if (const Presenter * p = dynamic_cast<const Presenter *>(mp)) {
+ BOOST_FOREACH(xmlpp::Node * node, copyRoot->get_children()) {
+ const xmlpp::Element * e = dynamic_cast<const xmlpp::Element *>(node);
+ if (e) {
+ copyNode(p, e);
+ }
}
}
}
diff --git a/project2/xml/rawView.h b/project2/xml/rawView.h
index 87fcd5e..54f7b2e 100644
--- a/project2/xml/rawView.h
+++ b/project2/xml/rawView.h
@@ -10,7 +10,7 @@
class RawView : public View {
public:
RawView(const xmlpp::Element * p);
- void execute(const Presenter *) const;
+ void execute(const MultiRowSetPresenter *) const;
private:
void copyNode(const Presenter *, const xmlpp::Element *) const;
diff --git a/project2/xml/xmlDocumentPrefetch.cpp b/project2/xml/xmlDocumentPrefetch.cpp
index 9ac912e..e5565e6 100644
--- a/project2/xml/xmlDocumentPrefetch.cpp
+++ b/project2/xml/xmlDocumentPrefetch.cpp
@@ -20,7 +20,7 @@ XmlDocumentPrefetch::~XmlDocumentPrefetch()
}
void
-XmlDocumentPrefetch::execute(const Presenter*) const
+XmlDocumentPrefetch::execute(const MultiRowSetPresenter*) const
{
execute();
}
diff --git a/project2/xml/xmlDocumentPrefetch.h b/project2/xml/xmlDocumentPrefetch.h
index d8df77b..f75fabe 100644
--- a/project2/xml/xmlDocumentPrefetch.h
+++ b/project2/xml/xmlDocumentPrefetch.h
@@ -13,7 +13,7 @@ class XmlDocumentPrefetch : public View, public Task, XmlDocumentCache, Variable
XmlDocumentPrefetch(const xmlpp::Element * p);
~XmlDocumentPrefetch();
- void execute(const Presenter*) const;
+ void execute(const MultiRowSetPresenter*) const;
void execute() const;
const Variable html;