ProxyContext extends AbstractContext { @Override public <T> Collection<T> findAll(Class<T> type) { List<T> result = new ArrayList<>(); contexts.forEach(context -> result.addAll(context.findAll(type))); return result; } ProxyContext(); @Override T find(Class<T> type); @Override Collection<T> findAll(Class<T> type); @Override void addContextListener(Class<T> type, ContextListener<T> listener); @Override void removeContextListener(Class<T> type, ContextListener<T> listener); void addContext(Context context); void addContexts(Collection<Context> contexts); void removeContext(Context context); void setContexts(Context... contexts); void setContexts(List<? extends Context> contexts); boolean isEmpty();  }
@Test public void testFindAll() { System.out.println("findAll"); SimpleContextContent content1 = new SimpleContextContent(); SimpleContext context1 = new SimpleContext(content1); context.addContext(context1); MyCustomFoo foo1 = new MyCustomFoo(); content1.add(foo1); assertEqualsMyCustomFooList(context, Arrays.asList(foo1)); SimpleContextContent content2 = new SimpleContextContent(); SimpleContext context2 = new SimpleContext(content2); context.addContext(context2); MyCustomFoo foo2 = new MyCustomFoo(); content2.add(foo2); assertEqualsMyCustomFooList(context, Arrays.asList(foo1, foo2)); context.removeContext(context1); assertEqualsMyCustomFooList(context, Arrays.asList(foo2)); context.removeContext(context2); assertEqualsMyCustomFooList(context, Collections.<MyCustomFoo>emptyList()); }