@Override public void addLast(E e) { add(e); }
@Override public boolean offerFirst(E e) { addFirst(e); return true; }
@Override public boolean offerLast(E e) { addLast(e); return true; }
@Override public int drainTo(Collection<? super E> c, int maxElements) { if (this.equals(c)) { throw new IllegalArgumentException("Cannot drain a queue to itself"); } int size = size(); int loop = (size >= maxElements ? maxElements : size); for (int index = 0; index < loop; index++) { c.add(poll()); } return loop; }
@Override public Iterator<E> iterator() { List<E> list = content(); checkResult(list); return new DefaultRedisListIterator(list.iterator()); }
@Override public void add(int index, E element) { if (index == 0) { listOps.leftPush(element); cap(); return; } int size = size(); if (index == size()) { listOps.rightPush(element); cap(); return; } if (index < 0 || index > size) { throw new IndexOutOfBoundsException(); } throw new IllegalArgumentException("Redis supports insertion only at the beginning or the end of the list"); }
@SuppressWarnings("unchecked") private RedisStore createStore(DataType dt) { switch (dt) { case LIST: return new DefaultRedisList(key, template); case SET: return new DefaultRedisSet(key, template); case ZSET: return new DefaultRedisZSet(key, template); case HASH: if (CollectionType.PROPERTIES.equals(type)) { return new RedisProperties(key, template); } return new DefaultRedisMap(key, template); } return null; }
@Override public boolean add(E value) { listOps.rightPush(value); cap(); return true; }
@Override public Iterator<E> descendingIterator() { List<E> content = content(); Collections.reverse(content); return new DefaultRedisListIterator(content.iterator()); }
@Override public int size() { Long size = listOps.size(); checkResult(size); return size.intValue(); }
@Override public E getFirst() { return element(); }
@Override public int drainTo(Collection<? super E> c, int maxElements) { if (this.equals(c)) { throw new IllegalArgumentException("Cannot drain a queue to itself"); } int size = size(); int loop = (size >= maxElements ? maxElements : size); for (int index = 0; index < loop; index++) { c.add(poll()); } return loop; }
@Override public boolean addAll(int index, Collection<? extends E> c) { // insert collection in reverse if (index == 0) { Collection<? extends E> reverseC = CollectionUtils.reverse(c); for (E e : reverseC) { listOps.leftPush(e); cap(); } return true; } int size = size(); if (index == size()) { for (E e : c) { listOps.rightPush(e); cap(); } return true; } if (index < 0 || index > size) { throw new IndexOutOfBoundsException(); } throw new IllegalArgumentException("Redis supports insertion only at the beginning or the end of the list"); }
@Test @RedisAvailable public void testListWithProvidedKey() { RedisList<String> redisList = new DefaultRedisList<String>("pepboys", this.redisTemplate); assertEquals(0, redisList.size()); List<String> pepboys = new ArrayList<String>(); pepboys.add("Manny"); pepboys.add("Moe"); pepboys.add("Jack"); Message<List<String>> message = MessageBuilder.withPayload(pepboys).build(); this.listWithKeyProvidedChannel.send(message); assertEquals(3, redisList.size()); }
@Override public Iterator<E> iterator() { List<E> list = content(); checkResult(list); return new DefaultRedisListIterator(list.iterator()); }
@Override public void addFirst(E e) { listOps.leftPush(e); cap(); }
@Override public Iterator<E> descendingIterator() { List<E> content = content(); Collections.reverse(content); return new DefaultRedisListIterator(content.iterator()); }
@Override public int size() { Long size = listOps.size(); checkResult(size); return size.intValue(); }