/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.management.ValueMappings;
import com.opengamma.engine.target.ComputationTargetReference;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.view.compilation.CompiledViewDefinition;
/**
* Extends {@link ValueMappings} filtering out the {@link ValueRequirement} version for both creation and lookup.
*/
public class UnversionedValueMappings extends ValueMappings {
public UnversionedValueMappings(CompiledViewDefinition compiledViewDef) {
super(compiledViewDef);
}
public UnversionedValueMappings() {
super();
}
/**
* As a subclasses of ValueMappings if the ComputationTargetReference is an instance of ComputationTargetSpecification
* and the unique id is versioned then a new ValueRequirement is created with a unversioned
* ComputationTargetSpecification
* @param valueRequirement to check for versioning
* @return either 'unversioned' or returned unaltered
*/
@Override
protected ValueRequirement createRequirement(ValueRequirement valueRequirement) {
ComputationTargetReference ref = valueRequirement.getTargetReference();
if (ref instanceof ComputationTargetSpecification) {
if (((ComputationTargetSpecification) ref).getUniqueId() == null) {
return valueRequirement;
}
Boolean isVersioned = ((ComputationTargetSpecification) ref).getUniqueId().isVersioned();
Boolean isParentVersionedAndNotNull = (ref.getParent() == null) ? false : ((ComputationTargetSpecification) ref.getParent()).getUniqueId().isVersioned();
if (isVersioned || isParentVersionedAndNotNull) {
/* If the parent is versioned and exists create an unversioned copy and create the valueRequirement
* else if the parent is not versioned or does not exist and the passed in valueRequirement is versioned then
* create an unversioned copy
* otherwise return the original
*/
if (isParentVersionedAndNotNull) {
ComputationTargetSpecification parent = ref.getParent().getSpecification();
ComputationTargetSpecification newParentTargetSpec = new ComputationTargetSpecification(parent.getType(), parent.getUniqueId().toLatest());
ComputationTargetSpecification newTargetSpec = new ComputationTargetSpecification(newParentTargetSpec, ref.getType(), ((ComputationTargetSpecification) ref).getUniqueId().toLatest());
ValueRequirement undersionedvalueRequirement = new ValueRequirement(valueRequirement.getValueName(), newTargetSpec, valueRequirement.getConstraints());
return undersionedvalueRequirement;
} else if (isVersioned) {
ComputationTargetSpecification newTargetSpec = new ComputationTargetSpecification(ref.getType(), ((ComputationTargetSpecification) ref).getUniqueId().toLatest());
ValueRequirement undersionedvalueRequirement = new ValueRequirement(valueRequirement.getValueName(), newTargetSpec, valueRequirement.getConstraints());
return undersionedvalueRequirement;
} else {
return valueRequirement;
}
}
return valueRequirement;
} else {
return valueRequirement;
}
}
}