From ed5c47f4458ff145e61db695bf0fb6b3d1bd748c Mon Sep 17 00:00:00 2001 From: randomdan Date: Thu, 12 May 2011 19:02:11 +0000 Subject: Support setting presenter node namespaces directly Copy the XML node namespace and prefix to the presenter in rawView --- project2/console/consoleAppEngine.cpp | 9 +++++++++ project2/console/consoleAppEngine.h | 2 ++ project2/presenter.h | 2 ++ project2/rawView.cpp | 1 + project2/xmlPresenter.cpp | 17 ++++++++++++++--- project2/xmlPresenter.h | 2 ++ 6 files changed, 30 insertions(+), 3 deletions(-) diff --git a/project2/console/consoleAppEngine.cpp b/project2/console/consoleAppEngine.cpp index 5c81b95..1c4f869 100644 --- a/project2/console/consoleAppEngine.cpp +++ b/project2/console/consoleAppEngine.cpp @@ -111,6 +111,15 @@ ConsoleApplicationEngine::addAppData(const Presenter *) const { } +void +ConsoleApplicationEngine::declareNamespace(const Glib::ustring &, const Glib::ustring &) const +{ +} +void +ConsoleApplicationEngine::setNamespace(const Glib::ustring &, const Glib::ustring &) const +{ +} + void ConsoleApplicationEngine::pushSub(const Glib::ustring & name, const Glib::ustring & ns) const { diff --git a/project2/console/consoleAppEngine.h b/project2/console/consoleAppEngine.h index 3663217..b08dec3 100644 --- a/project2/console/consoleAppEngine.h +++ b/project2/console/consoleAppEngine.h @@ -39,6 +39,8 @@ class ConsoleApplicationEngine : public ApplicationEngine, public Presenter, Req // Presenter interface public: + void declareNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const; + void setNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const; void pushSub(const Glib::ustring & ns, const Glib::ustring & name) const; void addAttr(const Glib::ustring & name, const Glib::ustring & ns, const VariableType & value) const; void addField(const Glib::ustring & name, const Glib::ustring & ns, const VariableType & value) const; diff --git a/project2/presenter.h b/project2/presenter.h index cdae0fd..bbfaf82 100644 --- a/project2/presenter.h +++ b/project2/presenter.h @@ -13,8 +13,10 @@ class Presenter : public virtual CommonObjects, public virtual IntrusivePtrBase Presenter(); virtual ~Presenter() = 0; + virtual void declareNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const = 0; virtual void pushSub(const Glib::ustring & name) const; virtual void pushSub(const Glib::ustring & name, const Glib::ustring & ns) const = 0; + virtual void setNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const = 0; virtual void addAttr(const Glib::ustring & name, const VariableType & value) const; virtual void addAttr(const Glib::ustring & name, const Glib::ustring & ns, const VariableType & value) const; virtual void addField(const Glib::ustring & name, const VariableType & value) const; diff --git a/project2/rawView.cpp b/project2/rawView.cpp index ce4605a..90569c9 100644 --- a/project2/rawView.cpp +++ b/project2/rawView.cpp @@ -36,6 +36,7 @@ void RawView::copyNode(const Presenter * p, const xmlpp::Element * n) const { p->pushSub(n->get_name()); + p->setNamespace(n->get_namespace_prefix(), n->get_namespace_uri()); xmlpp::Element::AttributeList al = n->get_attributes(); BOOST_FOREACH(const xmlpp::Attribute * a, al) { p->addAttr(a->get_name(), a->get_value()); diff --git a/project2/xmlPresenter.cpp b/project2/xmlPresenter.cpp index d657964..adf7860 100644 --- a/project2/xmlPresenter.cpp +++ b/project2/xmlPresenter.cpp @@ -17,9 +17,8 @@ XmlPresenter::createDoc() const { if (nodeStack.empty()) { nodeStack.push_back(responseDoc->create_root_node(getResponseRootNodeName())); - xmlNewNs(nodeStack.back()->cobj(), - BAD_CAST ApplicationEngine::getCurrent()->env()->getXmlNamespace().c_str(), - BAD_CAST ApplicationEngine::getCurrent()->env()->getXmlPrefix().c_str()); + declareNamespace(ApplicationEngine::getCurrent()->env()->getXmlPrefix(), + ApplicationEngine::getCurrent()->env()->getXmlNamespace()); // XSLT Style char * buf; if (!getResponseStyle().empty() && asprintf(&buf, "type=\"text/xsl\" href=\"%s\"", @@ -66,6 +65,18 @@ XmlPresenter::getDataDocument() const return responseDoc; } +void +XmlPresenter::declareNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const +{ + xmlNewNs(nodeStack.back()->cobj(), BAD_CAST ns.c_str(), BAD_CAST prefix.c_str()); +} + +void +XmlPresenter::setNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const +{ + nodeStack.back()->set_namespace_declaration(ns, prefix); +} + void XmlPresenter::pushSub(const Glib::ustring & name, const Glib::ustring & ns) const { diff --git a/project2/xmlPresenter.h b/project2/xmlPresenter.h index ee610ee..cd63f1e 100644 --- a/project2/xmlPresenter.h +++ b/project2/xmlPresenter.h @@ -14,6 +14,8 @@ class XmlPresenter : public Presenter { XmlPresenter(); ~XmlPresenter(); + void declareNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const; + void setNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const; void pushSub(const Glib::ustring & name, const Glib::ustring & ns) const; void addAttr(const Glib::ustring & name, const Glib::ustring & ns, const VariableType & value) const; void addText(const VariableType & value) const; -- cgit v1.2.3