From a7a8f4f9c9bbbd3bd16605235440dec29f581ad7 Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Mon, 28 May 2012 16:49:36 +0000 Subject: Improvements to the hosted composite management app. Simplify and optimize the Web UI a bit. Add test cases and fix some of the logic in the management components. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1343316 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/modules/atom/atom.hpp | 56 +++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 12 deletions(-) (limited to 'sca-cpp/trunk/modules/atom/atom.hpp') diff --git a/sca-cpp/trunk/modules/atom/atom.hpp b/sca-cpp/trunk/modules/atom/atom.hpp index 1d4a12a867..5de3894214 100644 --- a/sca-cpp/trunk/modules/atom/atom.hpp +++ b/sca-cpp/trunk/modules/atom/atom.hpp @@ -46,14 +46,24 @@ const value entry("entry"); */ const list entryElementValues(const list& e) { const list lt = filter(selector(mklist(element, "title")), e); - const value t = isNil(lt)? value(emptyString) : elementValue(car(lt)); + const list t = list() + element + value("title") + (isNil(lt)? value(emptyString) : elementValue(car(lt))); + const list li = filter(selector(mklist(element, "id")), e); - const value i = isNil(li)? value(emptyString) : elementValue(car(li)); + const list i = list() + element + value("id") + (isNil(li)? value(emptyString) : elementValue(car(li))); + + const list la = filter(selector(mklist(element, "author")), e); + const list lan = isNil(la)? list() : filter(selector(mklist(element, "name")), car(la)); + const list lae = isNil(la)? list() : filter(selector(mklist(element, "email")), car(la)); + const list laa = isNil(lan)? lae : lan; + const list a = isNil(laa)? list() : mklist(list() + element + value("author") + elementValue(car(laa))); + + const list lu = filter(selector(mklist(element, "updated")), e); + const list u = isNil(lu)? list() : mklist(list() + element + value("updated") + elementValue(car(lu))); + const list lc = filter(selector(mklist(element, "content")), e); - return append(list() + element + entry - + value(list() + element + value("title") + t) - + value(list() + element + value("id") + i), - isNil(lc)? list() : mklist(value(list() + element + value("content") + elementValue(car(lc))))); + const list c = isNil(lc)? list() : mklist(list() + element + value("content") + elementValue(car(lc))); + + return append(append(append(list() + element + entry + value(t) + value(i), a), u), c); } /** @@ -109,23 +119,45 @@ const failable > readATOMFeed(const list& ilist) { entriesElementValues(e))); } +/** + * Returns children of an ATOM content element. + */ +struct filterContentElementChildren { + const value type; + filterContentElementChildren() : type("type") { + } + const bool operator()(const value& v) const { + return !(isAttribute(v) && attributeName((list)v) == type); + } +}; + +const list contentElementChildren(const value& content) { + return filter(filterContentElementChildren(), elementChildren(content)); +} + /** * Convert a list of element values representing an ATOM entry to a list of elements. */ const list entryElement(const list& l) { - const value title = elementValue(elementChild("title", l)); - const value id = elementValue(elementChild("id", l)); + const value title = elementChild("title", l); + const value id = elementChild("id", l); + const value author = elementChild("author", l); + const bool email = isNil(author)? false : contains(elementValue(author), "@"); + const value updated = elementChild("updated", l); const value content = elementChild("content", l); const bool text = isNil(content)? false : elementHasValue(content); return list() + element + entry + (list() + attribute + "xmlns" + "http://www.w3.org/2005/Atom") - + (list() + element + "title" + (list() + attribute + "type" + "text") + title) - + (list() + element + "id" + id) + + (list() + element + "title" + (list() + attribute + "type" + "text") + elementValue(title)) + + (list() + element + "id" + elementValue(id)) + + (isNil(author)? list() : (list() + element + "author" + + (email? (list() + element + "email" + elementValue(author)) : (list() + element + "name" + elementValue(author))))) + + (isNil(updated)? list() : (list() + element + "updated" + elementValue(updated))) + (isNil(content)? list() : append(list() + element + "content" + (list() + attribute + "type" + (text? "text" : "application/xml")), - text? mklist(elementValue(content)) : elementChildren(content))) - + (list() + element + "link" + (list() + attribute + "href" + id)); + text? mklist(elementValue(content)) : contentElementChildren(content))) + + (list() + element + "link" + (list() + attribute + "href" + elementValue(id))); } /** -- cgit v1.2.3