
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1052740 13f79535-47bb-0310-9956-ffa450edef68
169 lines
5.5 KiB
JavaScript
169 lines
5.5 KiB
JavaScript
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
|
|
/**
|
|
* ATOM data conversion functions.
|
|
*/
|
|
var atom = new Object();
|
|
|
|
/**
|
|
* Convert a list of elements to a list of values representing an ATOM entry.
|
|
*/
|
|
atom.entryElementsToValues = function(e) {
|
|
var lt = filter(selector(mklist(element, "'title")), e);
|
|
var t = isNil(lt)? '' : elementValue(car(lt));
|
|
var li = filter(selector(mklist(element, "'id")), e);
|
|
var i = isNil(li)? '' : elementValue(car(li));
|
|
var lc = filter(selector(mklist(element, "'content")), e);
|
|
return mklist(t, i, elementValue(car(lc)));
|
|
};
|
|
|
|
/**
|
|
* Convert a list of elements to a list of values representing ATOM entries.
|
|
*/
|
|
atom.entriesElementsToValues = function(e) {
|
|
if (isNil(e))
|
|
return e;
|
|
return cons(atom.entryElementsToValues(car(e)), atom.entriesElementsToValues(cdr(e)));
|
|
};
|
|
|
|
/**
|
|
* Convert a list of strings to a list of values representing an ATOM entry.
|
|
*/
|
|
atom.readATOMEntry = function(l) {
|
|
var e = readXML(l);
|
|
if (isNil(e))
|
|
return mklist();
|
|
return atom.entryElementsToValues(car(e));
|
|
};
|
|
|
|
/**
|
|
* Convert a list of values representy an ATOM entry to a value.
|
|
*/
|
|
atom.entryValue = function(e) {
|
|
var v = elementsToValues(mklist(caddr(e)));
|
|
return cons(car(e), (cadr(e), cdr(car(v))));
|
|
};
|
|
|
|
/**
|
|
* Return true if a list of strings represents an ATOM feed.
|
|
*/
|
|
atom.isATOMFeed = function(l) {
|
|
if (!isXML(l))
|
|
return false;
|
|
return car(l).match('<feed') != null && car(l).match('="http://www.w3.org/2005/Atom"') != null;
|
|
};
|
|
|
|
/**
|
|
* Convert a DOM document to a list of values representing an ATOM feed.
|
|
*/
|
|
atom.readATOMFeedDocument = function(doc) {
|
|
var f = readXMLDocument(doc);
|
|
if (isNil(f))
|
|
return mklist();
|
|
var t = filter(selector(mklist(element, "'title")), car(f));
|
|
var i = filter(selector(mklist(element, "'id")), car(f));
|
|
var e = filter(selector(mklist(element, "'entry")), car(f));
|
|
if (isNil(e))
|
|
return mklist(elementValue(car(t)), elementValue(car(i)));
|
|
return cons(elementValue(car(t)), cons(elementValue(car(i)), atom.entriesElementsToValues(e)));
|
|
};
|
|
|
|
/**
|
|
* Convert a list of strings to a list of values representing an ATOM feed.
|
|
*/
|
|
atom.readATOMFeed = function(l) {
|
|
return atom.readAtomFeedDocument(parseXML(l));
|
|
};
|
|
|
|
/**
|
|
* Convert an ATOM feed containing elements to an ATOM feed containing values.
|
|
*/
|
|
atom.feedValues = function(e) {
|
|
function feedValuesLoop(e) {
|
|
if (isNil(e))
|
|
return e;
|
|
return cons(entryValue(car(e)), feedValuesLoop(cdr(e)));
|
|
}
|
|
|
|
return cons(car(e), cons(cadr(e), feedValuesLoop(cddr(e))));
|
|
};
|
|
|
|
/**
|
|
* Convert a list of values representy an ATOM entry to a list of elements.
|
|
*/
|
|
atom.entryElement = function(l) {
|
|
return mklist(element, "'entry", mklist(attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
|
|
mklist(element, "'title", mklist(attribute, "'type", "text"), car(l)),
|
|
mklist(element, "'id", cadr(l)),
|
|
mklist(element, "'content", mklist(attribute, "'type", (isList(caddr(l))? "application/xml" : "text")), caddr(l)),
|
|
mklist(element, "'link", mklist(attribute, "'href", cadr(l))));
|
|
};
|
|
|
|
/**
|
|
* Convert a list of values representing ATOM entries to a list of elements.
|
|
*/
|
|
atom.entriesElements = function(l) {
|
|
if (isNil(l))
|
|
return l;
|
|
return cons(atom.entryElement(car(l)), atom.entriesElements(cdr(l)));
|
|
};
|
|
|
|
/**
|
|
* Convert a list of values representing an ATOM entry to an ATOM entry.
|
|
*/
|
|
atom.writeATOMEntry = function(l) {
|
|
return writeXML(mklist(atom.entryElement(l)), true);
|
|
};
|
|
|
|
/**
|
|
* Convert a list of values representing an ATOM feed to an ATOM feed.
|
|
*/
|
|
atom.writeATOMFeed = function(l) {
|
|
var f = mklist(element, "'feed", mklist(attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
|
|
mklist(element, "'title", mklist(attribute, "'type", "text"), car(l)),
|
|
mklist(element, "'id", cadr(l)));
|
|
if (isNil(cddr(l)))
|
|
return writeXML(mklist(f), true);
|
|
var fe = append(f, atom.entriesElements(cddr(l)));
|
|
return writeXML(mklist(fe), true);
|
|
};
|
|
|
|
/**
|
|
* Convert an ATOM entry containing a value to an ATOM entry containing an item element.
|
|
*/
|
|
atom.entryValuesToElements = function(v) {
|
|
if (isList(caddr(v)))
|
|
return cons(car(v), cons(cadr(v), valuesToElements(mklist(cons("'item", caddr(v))))));
|
|
return cons(car(v), cons(cadr(v), valuesToElements(mklist(mklist("'item", caddr(v))))));
|
|
};
|
|
|
|
/**
|
|
* Convert an ATOM feed containing values to an ATOM feed containing elements.
|
|
*/
|
|
atom.feedValuesToElements = function(v) {
|
|
function feedValuesToElementsLoop(v) {
|
|
if (isNil(v))
|
|
return v;
|
|
return cons(atom.entryValuesToElements(car(v)), feedValuesToElementsLoop(cdr(v)));
|
|
}
|
|
|
|
return cons(car(v), cons(cadr(v), feedValuesToElementsLoop(cddr(v))));
|
|
};
|
|
|