/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.view.helper;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.opengamma.engine.value.ValueProperties;
/**
* Partial implementation of {@link AvailableOutputs} using {@link AvailableOutputImpl} instances.
*/
public class AvailableOutputsImpl implements AvailableOutputs {
private final Set<String> _securityTypes = new HashSet<String>();
private final Map<String, AvailableOutputImpl> _outputs = new HashMap<String, AvailableOutputImpl>();
public AvailableOutputsImpl() {
}
protected AvailableOutputImpl createOutput(final String valueName) {
return new AvailableOutputImpl(valueName, null);
}
private AvailableOutputImpl getOrCreateOutput(final String valueName) {
AvailableOutputImpl output = _outputs.get(valueName);
if (output == null) {
output = createOutput(valueName);
_outputs.put(valueName, output);
}
return output;
}
public void portfolioNodeOutput(final String valueName, final ValueProperties properties) {
final AvailableOutputImpl output = getOrCreateOutput(valueName);
output.setPortfolioNodeProperties(properties);
}
public void positionOutput(final String valueName, final String securityType, final ValueProperties properties) {
final AvailableOutputImpl output = getOrCreateOutput(valueName);
_securityTypes.add(securityType);
output.setPositionProperties(properties, securityType);
}
@Override
public Set<String> getSecurityTypes() {
return Collections.unmodifiableSet(_securityTypes);
}
@Override
public Set<AvailableOutput> getPositionOutputs(final String securityType) {
final Set<AvailableOutput> result = new HashSet<AvailableOutput>();
for (AvailableOutputImpl output : _outputs.values()) {
if (output.isAvailableOn(securityType)) {
result.add(AvailableOutputImpl.ofPosition(output, securityType));
}
}
return result;
}
@Override
public Set<AvailableOutput> getPortfolioNodeOutputs() {
final Set<AvailableOutput> result = new HashSet<AvailableOutput>();
for (AvailableOutputImpl output : _outputs.values()) {
if (output.isAvailableOnPortfolioNode()) {
result.add(AvailableOutputImpl.ofPortfolioNode(output));
}
}
return result;
}
@Override
public Set<AvailableOutput> getPositionOutputs() {
final Set<AvailableOutput> result = new HashSet<AvailableOutput>();
for (AvailableOutputImpl output : _outputs.values()) {
if (output.isAvailableOnPosition()) {
result.add(AvailableOutputImpl.ofPosition(output));
}
}
return result;
}
@Override
public Set<AvailableOutput> getOutputs() {
return new HashSet<AvailableOutput>(_outputs.values());
}
}