package org.deephacks.confit.internal.core.notification; import org.deephacks.confit.ConfigChanges; import org.deephacks.confit.ConfigChanges.ConfigChange; import org.deephacks.confit.ConfigObserver; import org.deephacks.confit.model.Bean; import org.deephacks.confit.spi.NotificationManager; /** * Default notification manager that forwards notifications to observers * that have been registered. */ public class DefaultNotificationManager extends NotificationManager { @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. } } } }