技术开发 频道

IBM Lotus Quickr REST服务简介


获得文件夹和文档的列表

    既然已经建立了树的优异节点,就该显示库中的文档和文件夹了。为此,需要检索库中的内容并建立子节点(文件夹和文档)。因为已经存储了每个库节点的 feed URL,所以很容易获取内容;只需对这个 URL 发出一个 GET 请求,以返回一个 Atom Feed 文档(见清单 3):

http://quickr.acme.com/dm/atom/library/5d06ab0044ed8129bd5ebd4caeec5df1/feed

清单 3. Atom Feed 文档

<?xml version="1.0" encoding="UTF-8"?> <feed xml:base="http://quickr.acme.com/dm/atom/library/ 5d06ab0044ed8129bd5ebd4caeec5df1/" xmlns="http://www.w3.org/2005/Atom"> <generator uri="http://quickr.acme.com/dm/atom" version="1.0">Teamspace Documents</generator> <id>urn:lsid:ibm.com:td:5d06ab0044ed8129bd5ebd4caeec5df1</id> <link href="feed" rel="self"></link> <link href="http://quickr.acme.com/wps/mypoc?uri= dm:5d06ab0044ed8129bd5ebd4caeec5df1&verb=view" rel="alternate"></link> <link href="feed?pagesize=2&page=3" rel="next"></link> <link href="feed?pagesize=2&page=1" rel="previous"></link> <collection href="feed" xmlns="http://purl.org/atom/app#"> <atom:title type="text" xmlns:atom="http://www.w3.org/2005/ Atom">Architecture Documents</atom:title> <accept>application/*,image/*,*/*</accept> </collection> <author> <uri>uid=jsmith,o=acme</uri> <name>John Smith</name> <email>jsmith@acme.com</email> </author> <title type="text">Architecture Documents</title> <updated>2007-04-10T13:07:00.672Z</updated> <entry xml:lang="en"> <id>urn:lsid:ibm.com:td:7f37550044f10d5b9144bbd6afe18010</id> <link href="document/7f37550044f10d5b9144bbd6afe18010/entry" rel="self"></link> <link href="http://quickr.acme.com/wps/mypoc?uri= dm:7f37550044f10d5b9144bbd6afe18010&verb=view" rel="alternate"></link> <link href="document/7f37550044f10d5b9144bbd6afe18010/entry" rel="edit"></link> <link href="document/7f37550044f10d5b9144bbd6afe18010/media" rel="edit-media"></link> <link href="document/7f37550044f10d5b9144bbd6afe18010/media" rel="enclosure" type="application/msword" title="Architecture Guidelines.doc" hreflang="en" length="19968"></link> <category term="document" scheme="tag:ibm.com,2006:td/type" label="document"></category> <author> <uri>uid=jsmith,o=acme</uri> <name>John Smith</name> <email>jsmith@acme.com</email> </author> <title type="text">Architecture Guidelines.doc</title> <published>2007-04-11T16:51:04.594Z</published> <updated>2007-04-11T16:51:04.594Z</updated> <td:created>2007-05-13T19:03:25.500Z</td:created> <td:modified>2007-05-13T19:03:25.500Z</td:modified> <td:modifier> <td:uri> uid=jdoe,o=acme </td:uri> <td:name>John Doe</td:name> <td:email>jdoe@acme.com </td:email> </td:modifier> <summary type="html"><span><img align="middle" src="thumbnail/7f37550044f10d5b9144bbd6afe18010/ media></span><span>&nbsp;&nbsp;</span><span> General guidelines for architecture </span></summary> <content type="application/msword" xml:lang="en" src="document/7f37550044f10d5b9144bbd6afe18010/media"></content> </entry> <entry> <id>urn:lsid:ibm.com:td:5dc3f38044eee4ca90d8bad6afe18010</id> <link href="folder/5dc3f38044eee4ca90d8bad6afe18010/entry" rel="self"></link> <link href="http://quickr.acme.com/wps/mypoc?uri= dm:5dc3f38044eee4ca90d8bad6afe18010&verb=view" rel="alternate"></link> <link href="folder/5dc3f38044eee4ca90d8bad6afe18010/entry" rel="edit"></link> <category term="folder" scheme="tag:ibm.com,2006:td/type" label="folder"></category> <author> <uri>uid=jsmith,o=acme</uri> <name>John Smith</name> <email>jsmith@acme.com</email> </author> <title type="text">Johns Folder</title> <published>2007-04-10T23:58:29.219Z</published> <updated>2007-04-10T23:58:29.219Z</updated> <td:created>2007-05-13T19:03:25.500Z</td:created> <td:modified>2007-05-13T19:03:25.500Z</td:modified> <td:modifier> <td:uri> uid=jdoe,o=acme </td:uri> <td:name>John Doe</td:name> <td:email>jdoe@quickr.acme.com </td:email> </td:modifier> <summary type="text">John's architecture documents</summary> <content type="application/atom+xml" src="folder/5dc3f38044eee4ca90d8bad6afe18010/feed"></content> </entry> </feed>

    对于库根下面的每个文件夹和文档,这个 feed 包含一个 Atom Entry。<category> 元素指出这个条目对应于一个文件夹,还是对应于文档。在树中将文件夹显示为可展开的节点,因为它们可以包含子文件夹和文档。文档显示为叶节点。在 feed 文档中可以看到,每个条目都有一个链接到本身的URL,这是 Atom 中另一个有用的模式,也是链接元素的用途。链接提供了内容项目上相关的内容、视图或动作的 URL。这使应用程序不必处理编写这些 URL 的一些工作(尽管,正如前面提到的,这些 URL 是可预测的)。

    对于文件夹条目,将 self 链接存储在 TreeParent 实例中,后面将用它来编写文件夹的 feed URL。就像使用库 feed URL 存储和检索库内容一样,可以使用文件夹的 feed URL 存储或检索文件夹的内容。

    对于文档条目,需要获取文档的内容。因此,把文档条目的 edit-media 链接存储在它的 TreeObject 实例中。关于这些链接关系的说明,请参阅 Atom Publishing Protocol 规范。清单 4 给出将 Atom Entry 处理为树节点的部分代码。

清单 4. 将 Atom Entry 处理为树节点的部分代码

ClientResponse response = httpClient.get(url); if (response.getStatus() == 200) { Feed feed = (Feed) response.getDocument().getRoot(); Iterator entries = feed.getEntries().iterator(); while (entries.hasNext()) { boolean isFolder = false; Entry entry = (Entry) entries.next(); try { Iterator categories = entry.getCategories( "tag:ibm.com,2006:td/type").iterator(); while (categories.hasNext()) { Category cat = (Category) categories.next(); if (cat.getTerm().equals("folder")) { isFolder = true; break; } } } catch (IRISyntaxException e) { e.printStackTrace(); } if (isFolder) { TreeParent folder = new TreeParent(entry, false); addChild(folder); } else { TreeObject document = new TreeObject(entry); addChild(document); } } }

    在处理了库的 Atom Feed 文档之后,插件显示库的内容(见图 2)。

插件显示库的内容 
图 2. 插件显示库的内容

0
相关文章