/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.livedata; import java.io.Serializable; import java.util.Collection; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.id.ExternalScheme; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.PublicAPI; /** * Specifies the live data that is desired, and in what format. * <p> * Live data represents updating data, typically from a market. * This class defines the data required and the format. * <p> * This class is immutable and thread-safe. */ @PublicAPI public class LiveDataSpecification implements Serializable { /** * Serialization version. */ private static final long serialVersionUID = 6038819203285248721L; /** * The external identifier bundle describing the desired data, such as the ticker. */ private final ExternalIdBundle _externalIdBundle; /** * The format that the data should be sent to the client. */ private final String _normalizationRuleSetId; /** * Creates an instance by copying another instance. * * @param specificationToCopy the original to copy, not null */ public LiveDataSpecification(LiveDataSpecification specificationToCopy) { this(specificationToCopy.getNormalizationRuleSetId(), specificationToCopy.getIdentifiers()); } /** * Creates an instance from a set of external identifiers. * * @param normalizationRuleSetId the rule defining the data format to return, not null * @param externalIds the external identifiers defining the data to fetch, not null */ public LiveDataSpecification(String normalizationRuleSetId, ExternalId... externalIds) { this(normalizationRuleSetId, ExternalIdBundle.of(externalIds)); } /** * Creates an instance from a set of external identifiers. * * @param normalizationRuleSetId the rule defining the data format to return, not null * @param externalIds the external identifiers defining the data to fetch, not null */ public LiveDataSpecification(String normalizationRuleSetId, Collection<ExternalId> externalIds) { this(normalizationRuleSetId, ExternalIdBundle.of(externalIds)); } /** * Creates an instance from a single external identifier. * * @param normalizationRuleSetId the rule defining the data format to return, not null * @param externalId the external identifiers defining the data to fetch, not null */ public LiveDataSpecification(String normalizationRuleSetId, ExternalId externalId) { this(normalizationRuleSetId, ExternalIdBundle.of(externalId)); } /** * Creates an instance from an external identifier bundle. * * @param normalizationRuleSetId the rule defining the data format to return, not null * @param bundle the external identifier bundle defining the data to fetch, not null */ public LiveDataSpecification(String normalizationRuleSetId, ExternalIdBundle bundle) { ArgumentChecker.notNull(normalizationRuleSetId, "normalizationRuleSetId"); ArgumentChecker.notNull(bundle, "bundle"); _externalIdBundle = bundle; _normalizationRuleSetId = normalizationRuleSetId; } //------------------------------------------------------------------------- /** * Gets the format that the data should be sent to the client. * * @return the data format, not null */ public String getNormalizationRuleSetId() { return _normalizationRuleSetId; } /** * Gets the external identifier bundle specifying the data to obtain. * * @return the bundle, not null */ public ExternalIdBundle getIdentifiers() { return _externalIdBundle; } /** * Gets the value of an identifier by scheme. * * @param scheme the scheme to query, null returns null * @return the value for the scheme, null if not found */ public String getIdentifier(ExternalScheme scheme) { return _externalIdBundle.getValue(scheme); } //------------------------------------------------------------------------- @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof LiveDataSpecification) { LiveDataSpecification other = (LiveDataSpecification) obj; return _externalIdBundle.equals(other._externalIdBundle) && _normalizationRuleSetId.equals(other._normalizationRuleSetId); } return false; } @Override public int hashCode() { return _externalIdBundle.hashCode() ^ _normalizationRuleSetId.hashCode(); } @Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append("LiveDataSpecification["); buf.append(_externalIdBundle.toString()); buf.append(":").append(_normalizationRuleSetId); buf.append("]"); return buf.toString(); } }