summaryrefslogtreecommitdiff
path: root/project2/cgi/cgiAppEngine.h
diff options
context:
space:
mode:
Diffstat (limited to 'project2/cgi/cgiAppEngine.h')
-rw-r--r--project2/cgi/cgiAppEngine.h84
1 files changed, 37 insertions, 47 deletions
diff --git a/project2/cgi/cgiAppEngine.h b/project2/cgi/cgiAppEngine.h
index 78f796f..e2ad1a2 100644
--- a/project2/cgi/cgiAppEngine.h
+++ b/project2/cgi/cgiAppEngine.h
@@ -4,11 +4,14 @@
#include "../appEngine.h"
#include "../task.h"
#include "../paramChecker.h"
-#include "../xmlPresenter.h"
#include "../commonObjects.h"
#include "../uuid.h"
-#include "../requestHost.h"
+#include "../taskHost.h"
+#include "../viewHost.h"
+#include "../transform.h"
+#include "../xmlPresenter.h"
#include <boost/intrusive_ptr.hpp>
+#include <boost/tuple/tuple.hpp>
class CgiEnvironment;
class Session;
@@ -19,16 +22,15 @@ namespace xmlpp {
class Document;
}
-class CgiApplicationEngine : public ApplicationEngine {
+class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink {
public:
typedef boost::shared_ptr<xmlpp::Document> XmlDocPtr;
typedef boost::shared_ptr<cgicc::HTTPHeader> HttpHeaderPtr;
- CgiApplicationEngine(const CgiEnvironment *);
+ CgiApplicationEngine(const CgiEnvironment *, std::ostream &);
virtual ~CgiApplicationEngine();
void process() const;
- void write(std::ostream &) const;
const Environment * env() const;
SessionPtr session() const;
virtual Glib::ustring resolveCurrentConfig() const;
@@ -45,115 +47,103 @@ class CgiApplicationEngine : public ApplicationEngine {
bool checkDomain(const DomainPlatforms::value_type & i) const;
void loadEngineSection(const xmlpp::Element *) const;
+ 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;
/// Base class for a stage iteration that should eventually produce a response for the client
- class Stage : public virtual CommonObjects {
+ class Stage : public virtual IntrusivePtrBase {
public:
Stage(const CgiEnvironment * e);
virtual ~Stage() = 0;
- virtual StagePtr run() = 0;
- virtual XmlDocPtr getDataDocument() const;
- virtual HttpHeaderPtr getHeader() const;
+ virtual NextStage run() = 0;
protected:
const CgiEnvironment * e;
};
+ /// Base class for a stage that can be a response to the client
+ class ResponseStage : public Stage {
+ public:
+ ResponseStage(const CgiEnvironment * e);
+ virtual HttpHeaderPtr getHeader() const = 0;
+ };
+
/// Stage implementation used to bootstrap the iteration process based on the CGI environment
class InitialStage : public Stage {
public:
InitialStage(const CgiEnvironment * e);
- virtual StagePtr run();
+ virtual NextStage run();
};
/// Stage to process POST requests
- class RequestStage : public Stage, public XmlPresenter, RequestHost {
+ class RequestStage : public ResponseStage, TaskHost {
public:
RequestStage(const CgiEnvironment *, const std::string & id);
- virtual StagePtr run();
- virtual XmlDocPtr getDataDocument() const;
+ virtual NextStage run();
virtual HttpHeaderPtr getHeader() const;
- virtual const Glib::ustring & getResponseRootNodeName() const;
- virtual const Glib::ustring & getResponseStyle() const;
-
protected:
std::string present;
- typedef Storage<ParamChecker>::Objects ParamCheckers;
- ParamCheckers parameterChecks;
-
- private:
- static const Glib::ustring resp;
- static const Glib::ustring style;
};
/// Stage to process GET requests and follow up RequestStages
- class PresentStage : public virtual Stage, public XmlProcessPresenter {
+ class PresentStage : public virtual ResponseStage, ViewHost {
public:
PresentStage(const CgiEnvironment * e, const std::string & id);
PresentStage(const CgiEnvironment * e, const std::string & group, const std::string & id);
- virtual StagePtr run();
- virtual XmlDocPtr getDataDocument() const;
+ virtual NextStage run();
virtual HttpHeaderPtr getHeader() const;
};
/// The built-in fail-safe not found stage
- class DefaultNotFoundStage : public virtual Stage, public XmlPresenter {
+ class DefaultNotFoundStage : public virtual ResponseStage {
public:
DefaultNotFoundStage(const CgiEnvironment *, const XmlScriptParser::NotFound &);
- virtual XmlDocPtr getDataDocument() const;
+ virtual NextStage run();
virtual HttpHeaderPtr getHeader() const;
- virtual StagePtr run();
- virtual const Glib::ustring & getResponseRootNodeName() const;
- virtual const Glib::ustring & getResponseStyle() const;
private:
- static const Glib::ustring resp;
const XmlScriptParser::NotFound nf;
+ XmlPresenterPtr pres;
};
/// Custom not found handling stage
class CustomNotFoundStage : public DefaultNotFoundStage, public PresentStage {
public:
- CustomNotFoundStage(const CgiEnvironment *, const XmlScriptParser::NotFound &);
- virtual StagePtr run();
- virtual XmlDocPtr getDataDocument() const;
+ CustomNotFoundStage(const CgiEnvironment *, const ::XmlScriptParser::NotFound &);
+ virtual NextStage run();
virtual HttpHeaderPtr getHeader() const;
- virtual const Glib::ustring & getResponseRootNodeName() const;
- virtual const Glib::ustring & getResponseStyle() const;
};
/// The built-in fail-safe unhandled error stage
- class DefaultErrorStage : public virtual Stage, public XmlPresenter {
+ class DefaultErrorStage : public virtual ResponseStage {
public:
DefaultErrorStage(const CgiEnvironment *, const std::exception &);
~DefaultErrorStage();
- virtual XmlDocPtr getDataDocument() const;
+ virtual NextStage run();
virtual HttpHeaderPtr getHeader() const;
- virtual StagePtr run();
- virtual const Glib::ustring & getResponseRootNodeName() const;
- virtual const Glib::ustring & getResponseStyle() const;
private:
- static const Glib::ustring resp;
char * buf;
std::string what;
+ XmlPresenterPtr pres;
};
/// Custom unhandled error handling stage
class CustomErrorStage : public DefaultErrorStage, public PresentStage {
public:
CustomErrorStage(const CgiEnvironment *, const std::exception &);
- virtual StagePtr run();
- virtual XmlDocPtr getDataDocument() const;
+ virtual NextStage run();
virtual HttpHeaderPtr getHeader() const;
- virtual const Glib::ustring & getResponseRootNodeName() const;
- virtual const Glib::ustring & getResponseStyle() const;
};
- mutable StagePtr currentStage;
+ private:
+ mutable NextStage currentStage;
mutable UUID sessionID;
+ mutable std::ostream & IO;
};
#endif