/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.examples.marketdata.credit.markit;
import org.joda.convert.FromString;
import com.google.common.base.Preconditions;
import com.opengamma.strata.basics.StandardId;
import com.opengamma.strata.collect.ArgChecker;
import com.opengamma.strata.collect.TypedString;
/**
* A simple string type to contain a 6 or 9 character Markit RED Code.
* <p>
* static utilities to convert from or to StandardIds with a fixed schema
* <p>
* http://www.markit.com/product/reference-data-cds
*/
public final class MarkitRedCode
extends TypedString<MarkitRedCode> {
/**
* Serialization version.
*/
private static final long serialVersionUID = 1L;
/**
* Scheme used in an OpenGamma {@link StandardId} where the value is a Markit RED code.
*/
public static final String MARKIT_REDCODE_SCHEME = "MarkitRedCode";
//-------------------------------------------------------------------------
/**
* Obtains an instance from the specified name.
* <p>
* RED codes must be 6 or 9 characters long.
*
* @param name the name of the field
* @return a RED code
*/
@FromString
public static MarkitRedCode of(String name) {
ArgChecker.isTrue(name.length() == 6 || name.length() == 9, "RED Code must be exactly 6 or 9 characters");
return new MarkitRedCode(name);
}
/**
* Converts from a standard identifier ensuring the scheme is correct.
*
* @param id standard id identifying a RED code
* @return the equivalent RED code
*/
public static MarkitRedCode from(StandardId id) {
Preconditions.checkArgument(id.getScheme().equals(MARKIT_REDCODE_SCHEME));
return MarkitRedCode.of(id.getValue());
}
/**
* Creates a standard identifier using the correct Markit RED code scheme.
*
* @param name the Markit RED code, 6 or 9 characters long
* @return the equivalent standard identifier
*/
public static StandardId id(String name) {
ArgChecker.isTrue(name.length() == 6 || name.length() == 9, "RED Code must be exactly 6 or 9 characters");
return StandardId.of(MARKIT_REDCODE_SCHEME, name);
}
/**
* Creates an instance.
*
* @param name the RED code
*/
private MarkitRedCode(String name) {
super(name);
}
//-------------------------------------------------------------------------
/**
* Converts this RED code to a standard identifier.
*
* @return the standard identifier
*/
public StandardId toStandardId() {
return StandardId.of(MARKIT_REDCODE_SCHEME, getName());
}
}