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    private 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, "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, "presence")
 30                            .build());
 31    public static final NodeConfiguration WHITELIST_MAX_ITEMS =
 32            new NodeConfiguration(
 33                    new ImmutableMap.Builder<String, Object>()
 34                            .put(PERSIST_ITEMS, Boolean.TRUE)
 35                            .put(ACCESS_MODEL, "whitelist")
 36                            .put(SEND_LAST_PUBLISHED_ITEM, "never")
 37                            .put(MAX_ITEMS, "max")
 38                            .put(NOTIFY_DELETE, Boolean.TRUE)
 39                            .put(NOTIFY_RETRACT, Boolean.TRUE)
 40                            .build());
 41    private final Map<String, Object> delegate;
 42
 43    private NodeConfiguration(Map<String, Object> map) {
 44        this.delegate = map;
 45    }
 46
 47    @Override
 48    public int size() {
 49        return this.delegate.size();
 50    }
 51
 52    @Override
 53    public boolean isEmpty() {
 54        return this.delegate.isEmpty();
 55    }
 56
 57    @Override
 58    public boolean containsKey(@Nullable Object o) {
 59        return this.delegate.containsKey(o);
 60    }
 61
 62    @Override
 63    public boolean containsValue(@Nullable Object o) {
 64        return this.delegate.containsValue(o);
 65    }
 66
 67    @Nullable
 68    @Override
 69    public Object get(@Nullable Object o) {
 70        return this.delegate.get(o);
 71    }
 72
 73    @Nullable
 74    @Override
 75    public Object put(String s, Object o) {
 76        return this.delegate.put(s, o);
 77    }
 78
 79    @Nullable
 80    @Override
 81    public Object remove(@Nullable Object o) {
 82        return this.delegate.remove(o);
 83    }
 84
 85    @Override
 86    public void putAll(@NonNull Map<? extends String, ?> map) {
 87        this.delegate.putAll(map);
 88    }
 89
 90    @Override
 91    public void clear() {
 92        this.delegate.clear();
 93    }
 94
 95    @NonNull
 96    @Override
 97    public Set<String> keySet() {
 98        return this.delegate.keySet();
 99    }
100
101    @NonNull
102    @Override
103    public Collection<Object> values() {
104        return this.delegate.values();
105    }
106
107    @NonNull
108    @Override
109    public Set<Entry<String, Object>> entrySet() {
110        return this.delegate.entrySet();
111    }
112}