/** * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.basics; import java.io.Serializable; import java.util.Optional; import java.util.Set; import org.joda.beans.BeanDefinition; import org.joda.beans.ImmutableBean; import org.joda.beans.JodaBeanUtils; import org.joda.beans.MetaBean; import org.joda.beans.Property; import org.joda.beans.PropertyDefinition; import org.joda.beans.impl.light.LightMetaBean; /** * A set of reference data which combines the data from two other {@link ReferenceData} instances. * <p> * When an item of data is requested the underlying sets of reference data are checked in order. * If the item is present in the first set of data it is returned. If the item is not found * it is looked up in the second set of data. */ @BeanDefinition(style = "light", constructorScope = "package") final class CombinedReferenceData implements ReferenceData, ImmutableBean, Serializable { /** * The first set of reference data. */ @PropertyDefinition(validate = "notNull") private final ReferenceData refData1; /** * The second set of reference data. */ @PropertyDefinition(validate = "notNull") private final ReferenceData refData2; //------------------------------------------------------------------------- @Override public boolean containsValue(ReferenceDataId<?> id) { return refData1.containsValue(id) || refData2.containsValue(id); } @Override public <T> T getValue(ReferenceDataId<T> id) { Optional<T> value1 = refData1.findValue(id); return value1.isPresent() ? value1.get() : refData2.getValue(id); } @Override public <T> Optional<T> findValue(ReferenceDataId<T> id) { Optional<T> value1 = refData1.findValue(id); return value1.isPresent() ? value1 : refData2.findValue(id); } //------------------------- AUTOGENERATED START ------------------------- ///CLOVER:OFF /** * The meta-bean for {@code CombinedReferenceData}. */ private static MetaBean META_BEAN = LightMetaBean.of(CombinedReferenceData.class); /** * The meta-bean for {@code CombinedReferenceData}. * @return the meta-bean, not null */ public static MetaBean meta() { return META_BEAN; } static { JodaBeanUtils.registerMetaBean(META_BEAN); } /** * The serialization version id. */ private static final long serialVersionUID = 1L; /** * Creates an instance. * @param refData1 the value of the property, not null * @param refData2 the value of the property, not null */ CombinedReferenceData( ReferenceData refData1, ReferenceData refData2) { JodaBeanUtils.notNull(refData1, "refData1"); JodaBeanUtils.notNull(refData2, "refData2"); this.refData1 = refData1; this.refData2 = refData2; } @Override public MetaBean metaBean() { return META_BEAN; } @Override public <R> Property<R> property(String propertyName) { return metaBean().<R>metaProperty(propertyName).createProperty(this); } @Override public Set<String> propertyNames() { return metaBean().metaPropertyMap().keySet(); } //----------------------------------------------------------------------- /** * Gets the first set of reference data. * @return the value of the property, not null */ public ReferenceData getRefData1() { return refData1; } //----------------------------------------------------------------------- /** * Gets the second set of reference data. * @return the value of the property, not null */ public ReferenceData getRefData2() { return refData2; } //----------------------------------------------------------------------- @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj != null && obj.getClass() == this.getClass()) { CombinedReferenceData other = (CombinedReferenceData) obj; return JodaBeanUtils.equal(refData1, other.refData1) && JodaBeanUtils.equal(refData2, other.refData2); } return false; } @Override public int hashCode() { int hash = getClass().hashCode(); hash = hash * 31 + JodaBeanUtils.hashCode(refData1); hash = hash * 31 + JodaBeanUtils.hashCode(refData2); return hash; } @Override public String toString() { StringBuilder buf = new StringBuilder(96); buf.append("CombinedReferenceData{"); buf.append("refData1").append('=').append(refData1).append(',').append(' '); buf.append("refData2").append('=').append(JodaBeanUtils.toString(refData2)); buf.append('}'); return buf.toString(); } ///CLOVER:ON //-------------------------- AUTOGENERATED END -------------------------- }