package com.reucon.openfire.plugin.archive.xep0059; import org.dom4j.DocumentFactory; import org.dom4j.Element; /** * A <a href="http://www.xmpp.org/extensions/xep-0059.html">XEP-0059</a> result set. */ public class XmppResultSet { public static String NAMESPACE = "http://jabber.org/protocol/rsm"; private Long after; private Long before; private Integer index; private Integer max; private Long first; private Integer firstIndex; private Long last; private Integer count; private boolean complete; public XmppResultSet(Element setElement) { if (setElement.element("after") != null) { try { after = Long.parseLong(setElement.elementText("after")); if (after < 0) { after = null; } } catch (Exception e) { // swallow } } if (setElement.element("before") != null) { try { before = Long.parseLong(setElement.elementText("before")); if (before < 0) { before = null; } } catch (NumberFormatException e) { if (setElement.elementText("before").isEmpty()) { this.before = Long.MAX_VALUE; } } catch (Exception e) { // swallow } } if (setElement.element("max") != null) { try { max = Integer.parseInt(setElement.elementText("max")); if (max < 0) { max = null; } } catch (Exception e) { // swallow } } if (setElement.element("index") != null) { try { index = Integer.parseInt(setElement.elementText("index")); if (index < 0) { index = null; } } catch (Exception e) { // swallow } } } public Long getAfter() { return after; } public Long getBefore() { return before; } /** * Returns the index of the first element to return. * * @return the index of the first element to return. */ public Integer getIndex() { return index; } /** * Returns the maximum number of items to return. * * @return the maximum number of items to return. */ public Integer getMax() { return max; } /** * Returns the total size of the result set. * * @return the total size of the result set. */ public Integer getCount() { return count; } /** * Returns whether the result set is complete (last page of results). * * @return whether the result set is complete. */ public boolean isComplete() { return complete; } /** * Sets the id of the first element returned. * * @param first the id of the first element returned. */ public void setFirst(Long first) { this.first = first; } /** * Sets the index of the first element returned. * * @param firstIndex the index of the first element returned. */ public void setFirstIndex(Integer firstIndex) { this.firstIndex = firstIndex; } /** * Sets the id of the last element returned. * * @param last the id of the last element returned. */ public void setLast(Long last) { this.last = last; } /** * Sets the number of elements returned. * * @param count the number of elements returned. */ public void setCount(Integer count) { this.count = count; } /** * Sets whether the result set is complete (used by last page of results) * * @param complete */ public void setComplete(boolean complete) { this.complete = complete; } public Element createResultElement() { final Element set; set = DocumentFactory.getInstance().createElement("set", NAMESPACE); if (first != null) { final Element firstElement; firstElement = set.addElement("first"); firstElement.setText(first.toString()); if (firstIndex != null) { firstElement.addAttribute("index", firstIndex.toString()); } } if (last != null) { set.addElement("last").setText(last.toString()); } if (count != null) { set.addElement("count").setText(count.toString()); } return set; } }