/** * Fire a notification for a collection of beans that have been deleted. * * @param beans deleted beans */ public final void fireDelete(List<Bean> beans) { ConfigChanges changes = new ConfigChanges(); for (Bean bean : beans) { changes.add(ConfigChange.deleted(bean)); } fire(changes); }
public <T> Collection<ConfigChange<T>> getChanges(Class<T> cls) { return changes.getChanges(cls); }
@Override public void fire(ConfigChanges changes) { ConfigChanges objectChanges = new ConfigChanges(); for (ConfigChange<?> change : changes.getChanges()) { if (change.before().isPresent() && change.after().isPresent() ) { Object after = schemaManager.convertBean((Bean) change.after().get()); Object before = schemaManager.convertBean((Bean) change.before().get()); objectChanges.add(ConfigChange.updated(before, after)); } else if (change.before().isPresent() && !change.after().isPresent()) { Object before = schemaManager.convertBean((Bean) change.before().get()); objectChanges.add(ConfigChange.deleted(before)); } else if (!change.before().isPresent() && change.after().isPresent()) { Object after = schemaManager.convertBean((Bean) change.after().get()); objectChanges.add(ConfigChange.created(after)); } else { throw new IllegalArgumentException("ConfigChanges are invalid."); } } for (ConfigObserver observer : observers) { try { observer.notify(objectChanges); } catch (Throwable e) { // ignore exceptions to guarantee notification delivery // to other observers. } } } }
public void clear() { changes = new ConfigChanges(); }
/** * Create the default testdata structure. */ private void createDefault() { observer.clear(); admin.create(defaultBeans); assertThat(observer.getChanges().size(), is(defaultBeans.size())); observer.clear(); }
public void clear() { changes = new ConfigChanges(); }
@Test public void test_simple_delete_notification() { Parent parent = ConfigTestData.getParent("1"); admin.createObject(parent); assertThat(observer.getChanges().size(), is(1)); admin.deleteObject(parent); assertThat(observer.getChanges().size(), is(1)); for (ConfigChange<Parent> change : observer.getChanges(Parent.class)) { assertTrue(change.before().isPresent()); assertFalse(change.after().isPresent()); assertReflectionEquals(change.before().get(), parent, LENIENT_ORDER); } }
/** * Fire a notification for a collection of beans that have been created. * * @param beans created beans */ public final void fireCreate(Collection<Bean> beans) { ConfigChanges changes = new ConfigChanges(); for (Bean bean : beans) { changes.add(ConfigChange.created(bean)); } fire(changes); }
private void createThenGet(Object object) throws AssertionFailedError { Bean bean = toBean(object); observer.clear(); admin.create(bean); assertThat(observer.getChanges().size(), is(1)); assertFalse(observer.isBeforePresent(object.getClass())); getAndAssert(object); }
public <T> ConfigChange<T> getFirstChange(Class<T> cls) { return changes.getChanges(cls).iterator().next(); }
/** * Fire a notification for a collection of beans that have been deleted. * * @param beans deleted beans */ public final void fireDelete(List<Bean> beans) { ConfigChanges changes = new ConfigChanges(); for (Bean bean : beans) { changes.add(ConfigChange.deleted(bean)); } fire(changes); }
@Test public void test_simple_create_notification() { Grandfather grandfather = ConfigTestData.getGrandfather("1"); admin.createObject(grandfather); assertThat(observer.getChanges().size(), is(1)); for (ConfigChange<Grandfather> change : observer.getChanges(Grandfather.class)) { assertFalse(change.before().isPresent()); assertTrue(change.after().isPresent()); assertReflectionEquals(change.after().get(), grandfather, LENIENT_ORDER); } }
public <T> ConfigChange<T> getFirstChange(Class<T> cls) { return changes.getChanges(cls).iterator().next(); }
/** * Fire a notification for a collection of beans that have been created. * * @param beans created beans */ public final void fireCreate(Collection<Bean> beans) { ConfigChanges changes = new ConfigChanges(); for (Bean bean : beans) { changes.add(ConfigChange.created(bean)); } fire(changes); }
@Test public void test_advanced_delete_notification() { Parent p1 = ConfigTestData.getParent("1"); Parent p2 = ConfigTestData.getParent("2"); Parent p3 = ConfigTestData.getParent("3"); admin.createObjects(Arrays.asList(p1, p2, p3)); assertThat(observer.getChanges().size(), is(3)); admin.delete(ConfigTestData.PARENT_SCHEMA_NAME, Arrays.asList("1", "2", "3")); assertThat(observer.getChanges().size(), is(3)); for (ConfigChange<Parent> change : observer.getChanges(Parent.class)) { assertTrue(change.before().isPresent()); assertFalse(change.after().isPresent()); if (change.before().get().getId().equals("1")) { assertReflectionEquals(p1, change.before().get(), LENIENT_ORDER); } else if (change.before().get().getId().equals("2")) { assertReflectionEquals(p2, change.before().get(), LENIENT_ORDER); } else if (change.before().get().getId().equals("3")) { assertReflectionEquals(p3, change.before().get(), LENIENT_ORDER); } else { fail("change not recognized"); } } }
/** * Create a changes object from a delete operation. * * @param schemaName schemaName of deleted instances * @param instanceIds id of deleted instances * @return changes object */ public final ConfigChanges deleted(String schemaName, Collection<String> instanceIds) { ConfigChanges changes = new ConfigChanges(); for (String instanceId : instanceIds) { BeanId id = BeanId.create(instanceId, schemaName); Optional<Bean> before = beanManager.getEager(id); if (!before.isPresent()) { throw Events.CFG304_BEAN_DOESNT_EXIST(id); } Bean bean = before.get(); schemaManager.setSchema(Arrays.asList(bean)); changes.add(ConfigChange.deleted(bean)); } return changes; }
@Test public void test_set_merge_without_schema() { Bean b = Bean.create(BeanId.create("1", "missing_schema_name")); try { admin.create(b); fail("Cant add beans without a schema."); } catch (AbortRuntimeException e) { assertThat(e.getEvent().getCode(), is(CFG101)); assertThat(observer.getChanges().size(), is(0)); } try { admin.merge(b); fail("Cant add beans without a schema."); } catch (AbortRuntimeException e) { assertThat(e.getEvent().getCode(), is(CFG101)); assertThat(observer.getChanges().size(), is(0)); } }
/** * Create a changes object from a delete operation. * * @param schemaName schemaName of deleted instances * @param instanceIds id of deleted instances * @return changes object */ public final ConfigChanges deleted(String schemaName, Collection<String> instanceIds) { ConfigChanges changes = new ConfigChanges(); for (String instanceId : instanceIds) { BeanId id = BeanId.create(instanceId, schemaName); Optional<Bean> before = beanManager.getEager(id); if (!before.isPresent()) { throw Events.CFG304_BEAN_DOESNT_EXIST(id); } Bean bean = before.get(); schemaManager.setSchema(Arrays.asList(bean)); changes.add(ConfigChange.deleted(bean)); } return changes; }
@Test public void test_simple_set_notification() { Parent before = ConfigTestData.getParent("1"); Parent after = ConfigTestData.getParent("1"); admin.createObject(before); assertThat(observer.getChanges().size(), is(1)); after.setProp1("new"); admin.setObject(after); for (ConfigChange<Parent> change : observer.getChanges(Parent.class)) { assertTrue(change.before().isPresent()); assertTrue(change.after().isPresent()); Parent beforeChange = change.before().get(); Parent afterChange = change.after().get(); assertReflectionEquals(beforeChange, before, LENIENT_ORDER); assertReflectionEquals(afterChange, after, LENIENT_ORDER); } }
/** * Create a changes object from an update operation. * * @param after state after the update have been made * @return changes object */ public final ConfigChanges updated(Collection<Bean> after) { ConfigChanges changes = new ConfigChanges(); for (Bean bean : after) { Optional<Bean> optional = beanManager.getEager(bean.getId()); if (!optional.isPresent()) { throw Events.CFG304_BEAN_DOESNT_EXIST(bean.getId()); } Bean before = optional.get(); schemaManager.setSchema(Arrays.asList(before)); changes.add(ConfigChange.updated(before, bean)); } return changes; } }