]> git.argeo.org Git - gpl/argeo-jcr.git/blob - swt/org.argeo.cms.jcr.ui/src/org/argeo/cms/jcr/swt/PagedJcrQueryTabularPart.java
Prepare next development cycle
[gpl/argeo-jcr.git] / swt / org.argeo.cms.jcr.ui / src / org / argeo / cms / jcr / swt / PagedJcrQueryTabularPart.java
1 package org.argeo.cms.jcr.swt;
2
3 import javax.jcr.Node;
4 import javax.jcr.NodeIterator;
5 import javax.jcr.RepositoryException;
6 import javax.jcr.query.Query;
7
8 import org.argeo.cms.ux.widgets.AbstractTabularPart;
9 import org.argeo.jcr.JcrException;
10
11 public class PagedJcrQueryTabularPart extends AbstractTabularPart<Query, Node> {
12 private int pageSize = 100;
13 private int cursor = 0;
14 private int nextUpperBound = pageSize;
15 private NodeIterator nit = null;
16
17 @Override
18 public int getItemCount() {
19 return (nextUpperBound - pageSize) + (int) nit.getSize();
20 }
21
22 @Override
23 public Node getData(int row) {
24 // System.out.println("Row " + row);
25 if (row == cursor) {
26 cursor++;
27 Node res = nit.nextNode();
28 if (cursor == nextUpperBound) {
29 getInput().setOffset(cursor);
30 nextUpperBound = cursor + pageSize;
31 try {
32 nit = getInput().execute().getNodes();
33 } catch (RepositoryException e) {
34 throw new JcrException("Cannot refresh query", e);
35 }
36 notifyItemCountChange();
37 }
38 return res;
39 } else {
40 return null;
41 }
42 }
43
44 @Override
45 public void refresh() {
46 getInput().setOffset(0);
47 getInput().setLimit(pageSize);
48 cursor = 0;
49 nextUpperBound = pageSize;
50 try {
51 nit = getInput().execute().getNodes();
52 } catch (RepositoryException e) {
53 throw new JcrException("Cannot refresh query", e);
54 }
55 super.refresh();
56 }
57
58 }