/** * Add the handler to the internal Set. * * @param handler The handler to add. * @return the result of {@link Set#add(Object)} */ @Override public synchronized boolean addHandler(MessageHandler handler) { Assert.notNull(handler, "handler must not be null"); Assert.isTrue(this.handlers.size() < this.maxSubscribers, "Maximum subscribers exceeded"); boolean added = this.handlers.add(handler); if (this.handlers.size() == 1) { this.theOneHandler = handler; } else { this.theOneHandler = null; } return added; }
/** * Remove the handler from the internal handler Set. * * @return the result of {@link Set#remove(Object)} */ @Override public synchronized boolean removeHandler(MessageHandler handler) { Assert.notNull(handler, "handler must not be null"); boolean removed = this.handlers.remove(handler); if (this.handlers.size() == 1) { this.theOneHandler = this.handlers.iterator().next(); } else { this.theOneHandler = null; } return removed; }
/** * Every time an Ordered element is added via this method this * Set will be re-sorted, otherwise the element is simply added * to the end. Added element must not be null. */ @Override public boolean add(E o) { Assert.notNull(o, "Can not add NULL object"); this.writeLock.lock(); try { boolean present = false; if (o instanceof Ordered) { present = this.addOrderedElement((Ordered) o); } else { present = this.elements.add(o); } return present; } finally { this.writeLock.unlock(); } }
tempList.add(o9); tempList.add(o10); final OrderedAwareCopyOnWriteArraySet orderAwareSet = new OrderedAwareCopyOnWriteArraySet(); Thread t1 = new Thread(() -> { orderAwareSet.addAll(tempList); orderAwareSet.remove(o5); orderAwareSet.remove(o7); }); final List tempList2 = new ArrayList(); tempList2.add(new Foo(63)); Thread t2 = new Thread(() -> { orderAwareSet.addAll(tempList2); orderAwareSet.remove(foo5); }); Thread t3 = new Thread(() -> { orderAwareSet.add("hello"); orderAwareSet.add("hello again"); }); throw new RuntimeException(e); Object[] elements = orderAwareSet.toArray(); assertEquals(18, elements.length);
/** * Tests that semantics of the LinkedHashSet were not broken */ @SuppressWarnings("rawtypes") @Test public void testAddUnordered() { OrderedAwareCopyOnWriteArraySet setToTest = new OrderedAwareCopyOnWriteArraySet(); setToTest.add("foo"); setToTest.add("bar"); setToTest.add("baz"); assertEquals(3, setToTest.size()); Object[] elements = setToTest.toArray(); assertEquals("foo", elements[0]); assertEquals("bar", elements[1]); assertEquals("baz", elements[2]); } /**
@SuppressWarnings("rawtypes") private void doConcurrent() { final OrderedAwareCopyOnWriteArraySet setToTest = new OrderedAwareCopyOnWriteArraySet(); final Object o1 = new Foo(3); final Object o2 = new Foo(1); final Object o10 = new Foo(2); Thread t1 = new Thread(() -> { setToTest.add(o1); setToTest.add(o3); setToTest.add(o5); setToTest.add(o7); setToTest.add(o9); }); Thread t2 = new Thread(() -> { setToTest.add(o2); setToTest.add(o4); setToTest.add(o6); setToTest.add(o8); setToTest.add(o10); }); Thread t3 = new Thread(() -> { setToTest.add(1); setToTest.add(new Foo(2)); setToTest.add(3); setToTest.add(new Foo(9)); setToTest.add(8); }); t1.start();
@Override public int getHandlerCount() { return this.handlers.size(); }
/** * Adds all elements in this Collection. */ @Override public boolean addAll(Collection<? extends E> c) { Assert.notNull(c, "Can not merge with NULL set"); this.writeLock.lock(); try { for (E object : c) { this.add(object); } return true; } finally { this.writeLock.unlock(); } }
tempList.add(o10); assertEquals(10, tempList.size()); OrderedAwareCopyOnWriteArraySet orderAwareSet = new OrderedAwareCopyOnWriteArraySet(); orderAwareSet.addAll(tempList); Object[] elements = orderAwareSet.toArray(); assertEquals(o7, elements[0]); assertEquals(o8, elements[1]);
/** * Returns an unmodifiable {@link Set} of this dispatcher's handlers. This * is provided for access by subclasses. * * @return The message handlers. */ protected Set<MessageHandler> getHandlers() { return this.handlers.asUnmodifiableSet(); }
@Override public String toString() { return this.getClass().getSimpleName() + " with handlers: " + this.handlers.toString(); }
@Test public void testAddOrdered() { OrderedAwareCopyOnWriteArraySet setToTest = new OrderedAwareCopyOnWriteArraySet(); Object o1 = new Foo(3); Object o2 = new Foo(1); Object o9 = new Foo(4); Object o10 = new Foo(2); setToTest.add(o1); setToTest.add(o2); setToTest.add(o3); setToTest.add(o4); setToTest.add(o5); setToTest.add(o6); setToTest.add(o7); setToTest.add(o8); setToTest.add(o9); setToTest.add(o10); assertEquals(10, setToTest.size()); Object[] elements = setToTest.toArray(); assertEquals(o7, elements[0]); assertEquals(o8, elements[1]);
@Override public int getHandlerCount() { return this.handlers.size(); }
/** * Adds all elements in this Collection. */ @Override public boolean addAll(Collection<? extends E> c) { Assert.notNull(c, "Can not merge with NULL set"); this.writeLock.lock(); try { for (E object : c) { this.add(object); } return true; } finally { this.writeLock.unlock(); } }
/** * Returns an unmodifiable {@link Set} of this dispatcher's handlers. This * is provided for access by subclasses. * * @return The message handlers. */ protected Set<MessageHandler> getHandlers() { return this.handlers.asUnmodifiableSet(); }
@Override public String toString() { return this.getClass().getSimpleName() + " with handlers: " + this.handlers.toString(); }
/** * Remove the handler from the internal handler Set. * * @return the result of {@link Set#remove(Object)} */ @Override public synchronized boolean removeHandler(MessageHandler handler) { Assert.notNull(handler, "handler must not be null"); boolean removed = this.handlers.remove(handler); if (this.handlers.size() == 1) { this.theOneHandler = this.handlers.iterator().next(); } else { this.theOneHandler = null; } return removed; }
/** * Add the handler to the internal Set. * * @param handler The handler to add. * @return the result of {@link Set#add(Object)} */ @Override public synchronized boolean addHandler(MessageHandler handler) { Assert.notNull(handler, "handler must not be null"); Assert.isTrue(this.handlers.size() < this.maxSubscribers, "Maximum subscribers exceeded"); boolean added = this.handlers.add(handler); if (this.handlers.size() == 1) { this.theOneHandler = handler; } else { this.theOneHandler = null; } return added; }
/** * Every time an Ordered element is added via this method this * Set will be re-sorted, otherwise the element is simply added * to the end. Added element must not be null. */ @Override public boolean add(E o) { Assert.notNull(o, "Can not add NULL object"); this.writeLock.lock(); try { boolean present = false; if (o instanceof Ordered) { present = this.addOrderedElement((Ordered) o); } else { present = this.elements.add(o); } return present; } finally { this.writeLock.unlock(); } }