1package im.conversations.android.xmpp;
2
3import androidx.annotation.NonNull;
4import androidx.annotation.Nullable;
5import com.google.common.collect.ImmutableMap;
6import java.util.Collection;
7import java.util.Map;
8import java.util.Set;
9
10public class NodeConfiguration implements Map<String, Object> {
11
12 private static final String PERSIST_ITEMS = "pubsub#persist_items";
13 public static final String ACCESS_MODEL = "pubsub#access_model";
14 private static final String SEND_LAST_PUBLISHED_ITEM = "pubsub#send_last_published_item";
15 private static final String MAX_ITEMS = "pubsub#max_items";
16 private static final String NOTIFY_DELETE = "pubsub#notify_delete";
17 private static final String NOTIFY_RETRACT = "pubsub#notify_retract";
18
19 public static final NodeConfiguration OPEN =
20 new NodeConfiguration(
21 new ImmutableMap.Builder<String, Object>()
22 .put(PERSIST_ITEMS, Boolean.TRUE)
23 .put(ACCESS_MODEL, AccessModel.OPEN)
24 .build());
25 public static final NodeConfiguration PRESENCE =
26 new NodeConfiguration(
27 new ImmutableMap.Builder<String, Object>()
28 .put(PERSIST_ITEMS, Boolean.TRUE)
29 .put(ACCESS_MODEL, AccessModel.PRESENCE)
30 .build());
31 public static final NodeConfiguration WHITELIST =
32 new NodeConfiguration(
33 new ImmutableMap.Builder<String, Object>()
34 .put(PERSIST_ITEMS, Boolean.TRUE)
35 .put(ACCESS_MODEL, AccessModel.WHITELIST)
36 .build());
37 public static final NodeConfiguration WHITELIST_MAX_ITEMS =
38 new NodeConfiguration(
39 new ImmutableMap.Builder<String, Object>()
40 .put(PERSIST_ITEMS, Boolean.TRUE)
41 .put(ACCESS_MODEL, AccessModel.WHITELIST)
42 .put(SEND_LAST_PUBLISHED_ITEM, "never")
43 .put(MAX_ITEMS, "max")
44 .put(NOTIFY_DELETE, Boolean.TRUE)
45 .put(NOTIFY_RETRACT, Boolean.TRUE)
46 .build());
47 private final Map<String, Object> delegate;
48
49 private NodeConfiguration(Map<String, Object> map) {
50 this.delegate = map;
51 }
52
53 @Override
54 public int size() {
55 return this.delegate.size();
56 }
57
58 @Override
59 public boolean isEmpty() {
60 return this.delegate.isEmpty();
61 }
62
63 @Override
64 public boolean containsKey(@Nullable Object o) {
65 return this.delegate.containsKey(o);
66 }
67
68 @Override
69 public boolean containsValue(@Nullable Object o) {
70 return this.delegate.containsValue(o);
71 }
72
73 @Nullable
74 @Override
75 public Object get(@Nullable Object o) {
76 return this.delegate.get(o);
77 }
78
79 @Nullable
80 @Override
81 public Object put(String s, Object o) {
82 return this.delegate.put(s, o);
83 }
84
85 @Nullable
86 @Override
87 public Object remove(@Nullable Object o) {
88 return this.delegate.remove(o);
89 }
90
91 @Override
92 public void putAll(@NonNull Map<? extends String, ?> map) {
93 this.delegate.putAll(map);
94 }
95
96 @Override
97 public void clear() {
98 this.delegate.clear();
99 }
100
101 @NonNull
102 @Override
103 public Set<String> keySet() {
104 return this.delegate.keySet();
105 }
106
107 @NonNull
108 @Override
109 public Collection<Object> values() {
110 return this.delegate.values();
111 }
112
113 @NonNull
114 @Override
115 public Set<Entry<String, Object>> entrySet() {
116 return this.delegate.entrySet();
117 }
118
119 public enum AccessModel {
120 OPEN,
121 WHITELIST,
122 PRESENCE
123 }
124}