/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.depgraph.rest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.threeten.bp.Instant;
import com.opengamma.engine.marketdata.spec.MarketDataSpecification;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.id.VersionCorrection;
/**
* A set of properties to use to build a dependency graph trace.
*/
public class DependencyGraphTraceBuilderProperties {
private final String _calculationConfigurationName;
private final Instant _valuationTime;
private final VersionCorrection _resolutionTime;
private final ValueProperties _defaultProperties;
private final Collection<ValueRequirement> _requirements;
private final List<MarketDataSpecification> _marketData;
/**
* Constructs a builder instance with given context and default values.
*/
public DependencyGraphTraceBuilderProperties() {
_calculationConfigurationName = "Default";
_valuationTime = null;
_resolutionTime = VersionCorrection.LATEST;
_defaultProperties = ValueProperties.none();
_requirements = Collections.emptyList();
_marketData = Collections.emptyList();
}
/**
* Copy constructor
* @param other instance to copy
*/
private DependencyGraphTraceBuilderProperties(DependencyGraphTraceBuilderProperties other) {
_calculationConfigurationName = other.getCalculationConfigurationName();
_valuationTime = other.getValuationTime();
_resolutionTime = other.getResolutionTime();
_defaultProperties = other.getDefaultProperties();
_requirements = other.getRequirements();
_marketData = other.getMarketData();
}
/**
* @return configured calculation configuration name
*/
public String getCalculationConfigurationName() {
return _calculationConfigurationName;
}
/**
* @return configured valuation time
*/
public Instant getValuationTime() {
return _valuationTime;
}
/**
* @return configured resolution time
*/
public VersionCorrection getResolutionTime() {
return _resolutionTime;
}
/**
* @return configured default properties
*/
public ValueProperties getDefaultProperties() {
return _defaultProperties;
}
/**
* @return configured requirements
*/
public Collection<ValueRequirement> getRequirements() {
return _requirements;
}
/**
* @return configured market data
*/
public List<MarketDataSpecification> getMarketData() {
return _marketData;
}
/**
* @param calculationConfigurationName calculation configuration name to set
* @return a newly configured instance
*/
public DependencyGraphTraceBuilderProperties calculationConfigurationName(final String calculationConfigurationName) {
return new DependencyGraphTraceBuilderProperties(this) {
public String getCalculationConfigurationName() {
return calculationConfigurationName;
}
};
}
/**
* @param resolutionTime resolution time to set
* @return a newly configured instance
*/
public DependencyGraphTraceBuilderProperties resolutionTime(final VersionCorrection resolutionTime) {
return new DependencyGraphTraceBuilderProperties(this) {
@Override
public VersionCorrection getResolutionTime() {
return resolutionTime;
}
};
}
/**
* @param valuationTime valuation time to set
* @return a newly configured instance
*/
public DependencyGraphTraceBuilderProperties valuationTime(final Instant valuationTime) {
return new DependencyGraphTraceBuilderProperties(this) {
@Override
public Instant getValuationTime() {
return valuationTime;
}
};
}
/**
* @param defaultProperties default properties to set
* @return a newly configured instance
*/
public DependencyGraphTraceBuilderProperties defaultProperties(final ValueProperties defaultProperties) {
return new DependencyGraphTraceBuilderProperties(this) {
public ValueProperties getDefaultProperties() {
return defaultProperties;
};
};
}
/**
* @param requirement requirement to add
* @return a newly configured instance
*/
public DependencyGraphTraceBuilderProperties addRequirement(ValueRequirement requirement) {
final Collection<ValueRequirement> currentRequirements = new ArrayList<>(getRequirements());
currentRequirements.add(requirement);
return requirements(currentRequirements);
}
/**
* @param requirements requirements to set
* @return a newly configured instance
*/
public DependencyGraphTraceBuilderProperties requirements(final Collection<ValueRequirement> requirements) {
return new DependencyGraphTraceBuilderProperties(this) {
@Override
public Collection<ValueRequirement> getRequirements() {
return requirements;
}
};
}
/**
* @param marketData market data to set
* @return a newly configured instance
*/
public DependencyGraphTraceBuilderProperties marketData(final List<MarketDataSpecification> marketData) {
return new DependencyGraphTraceBuilderProperties(this) {
@Override
public List<MarketDataSpecification> getMarketData() {
return marketData;
}
};
}
/**
* Add a market data spec
* @param marketData a market data spec
* @return a newly configured instance
*/
public DependencyGraphTraceBuilderProperties addMarketData(MarketDataSpecification marketData) {
List<MarketDataSpecification> newMarketData = new ArrayList<>(getMarketData());
newMarketData.add(marketData);
return marketData(newMarketData);
}
@Override
public String toString() {
return "DependencyGraphTraceBuilderProperties [getCalculationConfigurationName()=" + getCalculationConfigurationName() + ", getValuationTime()=" + getValuationTime() + ", getResolutionTime()=" +
getResolutionTime() + ", getDefaultProperties()=" + getDefaultProperties() + ", getRequirements()=" + getRequirements() + ", getMarketData()=" + getMarketData() + "]";
}
}