/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.test;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.AbstractSource;
import com.opengamma.core.change.BasicChangeManager;
import com.opengamma.core.change.ChangeManager;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.core.config.impl.ConfigItem;
import com.opengamma.engine.view.ViewDefinition;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
/**
* A mock config source for testing.
*/
public class MockConfigSource extends AbstractSource<ConfigItem<?>> implements ConfigSource {
/**
* The map of data.
*/
private final Map<ObjectId, ConfigItem<?>> _store = newHashMap();
/**
* The change manager.
*/
private final ChangeManager _changeManager = new BasicChangeManager();
@SuppressWarnings("unchecked")
@Override
public <T> Collection<ConfigItem<T>> get(final Class<T> clazz, final String configName, final VersionCorrection versionCorrection) {
final Collection<ConfigItem<T>> result = new ArrayList<ConfigItem<T>>();
for (final ConfigItem configItem : _store.values()) {
if (clazz.isAssignableFrom(configItem.getType()) && configItem.getName().equals(configName)) {
result.add(configItem);
}
}
return result;
}
@Override
public ConfigItem<?> get(final UniqueId uniqueId) {
final ConfigItem<?> item = _store.get(uniqueId.getObjectId());
if (item != null) {
return item;
} else {
throw new DataNotFoundException(uniqueId.toString());
}
}
@Override
public ConfigItem<?> get(final ObjectId objectId, final VersionCorrection versionCorrection) {
for (final ConfigItem<?> configItem : _store.values()) {
if (configItem.getObjectId().equals(objectId)) {
return configItem;
}
}
return null;
}
@SuppressWarnings("unchecked")
@Override
public <R> Collection<ConfigItem<R>> getAll(final Class<R> clazz, final VersionCorrection versionCorrection) {
final List<ConfigItem<R>> list = newArrayList();
for (final ConfigItem<?> configItem : _store.values()) {
if (clazz.isAssignableFrom(configItem.getType())) {
list.add((ConfigItem<R>) configItem);
}
}
return list;
}
@SuppressWarnings("unchecked")
@Override
public <R> R getConfig(final Class<R> clazz, final UniqueId uniqueId) {
return (R) get(uniqueId).getValue();
}
@SuppressWarnings("unchecked")
@Override
public <R> R getConfig(final Class<R> clazz, final ObjectId objectId, final VersionCorrection versionCorrection) {
return (R) get(objectId, versionCorrection).getValue();
}
@SuppressWarnings("unchecked")
@Override
public <R> R getSingle(final Class<R> clazz, final String configName, final VersionCorrection versionCorrection) {
for (final ConfigItem<?> configItem : _store.values()) {
if (clazz.isAssignableFrom(configItem.getType()) && configItem.getName().equals(configName)) {
return (R) configItem.getValue();
}
}
return null;
}
@Override
public <R> R getLatestByName(final Class<R> clazz, final String name) {
return getSingle(clazz, name, VersionCorrection.LATEST);
}
@Override
public ChangeManager changeManager() {
return _changeManager;
}
public ConfigItem<ViewDefinition> put(final ViewDefinition viewDefinition) {
// REVIEW 2012-11-28 Andrew -- This shouldn't be specific to view definition
final ConfigItem<ViewDefinition> item = ConfigItem.of(viewDefinition);
if (item.getValue().getUniqueId() == null) {
item.getValue().setUniqueId(UniqueId.of(ViewDefinition.class.getName(), item.getValue().getName()));
}
_store.put(viewDefinition.getUniqueId().getObjectId(), item);
// TODO: should probably notify the change manager
return item;
}
}