Set.java

 1package im.conversations.android.xmpp.model.rsm;
 2
 3import com.google.common.base.Strings;
 4import im.conversations.android.annotation.XmlElement;
 5import im.conversations.android.xmpp.Page;
 6import im.conversations.android.xmpp.Range;
 7import im.conversations.android.xmpp.model.Extension;
 8
 9@XmlElement
10public class Set extends Extension {
11
12    public Set() {
13        super(Set.class);
14    }
15
16    public static Set of(final Range range, final Integer max) {
17        final var set = new Set();
18        if (range.order == Range.Order.NORMAL) {
19            final var after = set.addExtension(new After());
20            after.setContent(range.id);
21        } else if (range.order == Range.Order.REVERSE) {
22            final var before = set.addExtension(new Before());
23            before.setContent(range.id);
24        } else {
25            throw new IllegalArgumentException("Invalid order");
26        }
27        if (max != null) {
28            set.addExtension(new Max()).setMax(max);
29        }
30        return set;
31    }
32
33    public Page asPage() {
34        final var first = this.getExtension(First.class);
35        final var last = this.getExtension(Last.class);
36
37        final var firstId = first == null ? null : first.getContent();
38        final var lastId = last == null ? null : last.getContent();
39        if (Strings.isNullOrEmpty(firstId) || Strings.isNullOrEmpty(lastId)) {
40            throw new IllegalStateException("Invalid page. Missing first or last");
41        }
42        return new Page(firstId, lastId, this.getCount());
43    }
44
45    public boolean isEmpty() {
46        final var first = this.getExtension(First.class);
47        final var last = this.getExtension(Last.class);
48        return first == null && last == null;
49    }
50
51    public Integer getCount() {
52        final var count = this.getExtension(Count.class);
53        return count == null ? null : count.getCount();
54    }
55}