/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.config; import java.util.concurrent.ConcurrentMap; import com.google.common.collect.MapMaker; import com.opengamma.core.change.ChangeEvent; import com.opengamma.core.change.ChangeProvider; import com.opengamma.master.config.ConfigDocument; import com.opengamma.master.config.ConfigMaster; import com.opengamma.util.ArgumentChecker; /** * A {@link ChangeProvider} that translates configuration changes from a {@link ConfigMaster} to type summaries. */ public class ConfigMasterChangeProvider extends AbstractConfigChangeProvider { private static final ConcurrentMap<ConfigMaster, ConfigMasterChangeProvider> s_instances = new MapMaker().weakValues().makeMap(); private final ConfigMaster _configMaster; public ConfigMasterChangeProvider(final ConfigMaster configMaster) { _configMaster = ArgumentChecker.notNull(configMaster, "configMaster"); } public static ConfigMasterChangeProvider of(final ConfigMaster configMaster) { ConfigMasterChangeProvider changes = s_instances.get(configMaster); if (changes == null) { changes = new ConfigMasterChangeProvider(configMaster); final ConfigMasterChangeProvider existing = s_instances.putIfAbsent(configMaster, changes); if (existing != null) { return existing; } } return changes; } @Override protected ChangeProvider getUnderlying() { return _configMaster; } @Override protected void configAdded(final ChangeEvent event) { final ConfigDocument document = _configMaster.get(event.getObjectId(), getNewVersion(event)); added(event, document.getType()); } @Override protected void configChanged(final ChangeEvent event) { final ConfigDocument oldDocument = _configMaster.get(event.getObjectId(), getOldVersion(event)); final ConfigDocument newDocument = _configMaster.get(event.getObjectId(), getNewVersion(event)); if (oldDocument.getType().equals(newDocument.getType())) { changed(event, newDocument.getType()); } else { removed(event, oldDocument.getType()); added(event, newDocument.getType()); } } @Override protected void configRemoved(final ChangeEvent event) { final ConfigDocument document = _configMaster.get(event.getObjectId(), getOldVersion(event)); removed(event, document.getType()); } }