This project has retired. For details please refer to its
Attic page.
AtomFeed xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.server.impl.atompub;
20
21 import java.math.BigInteger;
22 import java.util.GregorianCalendar;
23
24 import javax.xml.stream.XMLStreamException;
25 import javax.xml.stream.XMLStreamWriter;
26
27 import org.apache.chemistry.opencmis.commons.impl.Constants;
28 import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
29
30
31
32
33
34
35
36 public class AtomFeed extends AtomDocumentBase {
37
38 public static final BigInteger DEFAULT_PAGE_SIZE = BigInteger.valueOf(100);
39
40
41
42
43 public AtomFeed() {
44 }
45
46
47
48
49 public AtomFeed(XMLStreamWriter writer) {
50 setWriter(writer);
51 }
52
53
54
55
56 public void startFeed(boolean isRoot) throws XMLStreamException {
57 getWriter().writeStartElement(Constants.NAMESPACE_ATOM, "feed");
58
59 if (isRoot) {
60 writeNamespace(Constants.NAMESPACE_ATOM);
61 writeNamespace(Constants.NAMESPACE_CMIS);
62 writeNamespace(Constants.NAMESPACE_RESTATOM);
63 writeNamespace(Constants.NAMESPACE_APP);
64 }
65 }
66
67
68
69
70 public void startChildren() throws XMLStreamException {
71 XMLStreamWriter writer = getWriter();
72 writer.writeStartElement(Constants.NAMESPACE_RESTATOM, "children");
73 }
74
75
76
77
78 public void endChildren() throws XMLStreamException {
79 getWriter().writeEndElement();
80 }
81
82
83
84
85 public void endFeed() throws XMLStreamException {
86 getWriter().writeEndElement();
87 }
88
89
90
91
92 public void writeFeedElements(String id, String author, String title, GregorianCalendar updated,
93 String pathSegment, BigInteger numItems) throws XMLStreamException {
94 writeAuthor(author);
95 writeId(generateAtomId(id));
96 writeTitle(title);
97 writeUpdated(updated);
98 writePathSegment(pathSegment);
99 writeNumItems(numItems);
100 }
101
102
103
104
105 public void writeNumItems(BigInteger numItems) throws XMLStreamException {
106 if (numItems == null) {
107 return;
108 }
109
110 writeSimpleTag(Constants.NAMESPACE_RESTATOM, "numItems", numItems.toString());
111 }
112
113
114
115
116 public void writePagingLinks(UrlBuilder pagingUrl, BigInteger maxItems, BigInteger skipCount, BigInteger numItems,
117 Boolean hasMoreItems, BigInteger pageSize) throws XMLStreamException {
118
119 if ((skipCount == null) || (skipCount.compareTo(BigInteger.ZERO) == -1)) {
120 skipCount = BigInteger.ZERO;
121 }
122
123 if ((maxItems == null) || (maxItems.compareTo(BigInteger.ZERO) == -1)) {
124 if ((pageSize == null) || (pageSize.compareTo(BigInteger.ZERO) == -1)) {
125 maxItems = DEFAULT_PAGE_SIZE;
126 } else {
127 maxItems = pageSize;
128 }
129 }
130
131
132 if (skipCount.compareTo(BigInteger.ZERO) == 1) {
133
134 UrlBuilder firstLink = new UrlBuilder(pagingUrl);
135 firstLink.addParameter(Constants.PARAM_SKIP_COUNT, "0");
136 firstLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
137 writeFirstLink(firstLink.toString());
138
139
140 UrlBuilder previousLink = new UrlBuilder(pagingUrl);
141 previousLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount.subtract(maxItems).max(BigInteger.ZERO));
142 previousLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
143 writePreviousLink(previousLink.toString());
144 }
145
146
147 if ((hasMoreItems != null) && hasMoreItems.booleanValue()) {
148
149 UrlBuilder nextLink = new UrlBuilder(pagingUrl);
150 nextLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount.add(maxItems));
151 nextLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
152 writeNextLink(nextLink.toString());
153 }
154
155
156 if ((numItems != null) && (numItems.compareTo(BigInteger.ZERO) == 1)) {
157 BigInteger lastSkip = numItems.subtract(maxItems).max(BigInteger.ZERO);
158 if (lastSkip.compareTo(BigInteger.ZERO) == 1) {
159
160 UrlBuilder lastLink = new UrlBuilder(pagingUrl);
161 lastLink.addParameter(Constants.PARAM_SKIP_COUNT, lastSkip);
162 lastLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
163 writeLastLink(lastLink.toString());
164 }
165 }
166 }
167 }