/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.credit; import org.threeten.bp.Period; import com.opengamma.analytics.financial.credit.isdastandardmodel.StubType; import com.opengamma.financial.convention.businessday.BusinessDayConvention; import com.opengamma.financial.convention.businessday.BusinessDayConventionFactory; import com.opengamma.financial.convention.daycount.DayCount; import com.opengamma.financial.convention.daycount.DayCountFactory; import com.opengamma.id.ExternalId; import com.opengamma.id.ObjectId; import com.opengamma.id.ObjectIdentifiable; import com.opengamma.id.UniqueId; import com.opengamma.id.UniqueIdentifiable; import com.opengamma.util.ArgumentChecker; /** * Class holding properties of a single name. */ public class SingleNameIdentifiable implements UniqueIdentifiable, ObjectIdentifiable { /** * Scheme used for a single name. */ public static final String SCHEME = "SingleName"; /** * The separator. */ private static final String SEPERATOR = "-"; private String name; private UniqueId id; private ExternalId referenceEntity; private BusinessDayConvention badDayConvention; private DayCount daycount; private Period couponFrequency; private StubType stubType; public SingleNameIdentifiable(String name, ExternalId referenceEntity, BusinessDayConvention badDayConvention, DayCount daycount, Period couponFrequency, StubType stubType) { this.name = name; this.referenceEntity = referenceEntity; this.badDayConvention = badDayConvention; this.daycount = daycount; this.couponFrequency = couponFrequency; this.stubType = stubType; this.id = UniqueId.of(SCHEME, name + SEPERATOR + referenceEntity.getScheme() + SEPERATOR + badDayConvention.getName() + SEPERATOR + daycount.getName() + SEPERATOR + couponFrequency + SEPERATOR + stubType); } public static SingleNameIdentifiable of(final UniqueId id) { String[] tokens = id.getValue().split(SEPERATOR); ArgumentChecker.isTrue(tokens.length == 6, "Incorrect number of params for SingleNameIdentifiable"); final String name = tokens[0]; final ExternalId reference = ExternalId.of(tokens[1], name); final BusinessDayConvention badDayConvention = BusinessDayConventionFactory.of(tokens[2]); final DayCount dayCount = DayCountFactory.of(tokens[3]); final Period couponFrequency = Period.parse(tokens[4]); final StubType stubType = StubType.valueOf(tokens[5]); return new SingleNameIdentifiable(name, reference, badDayConvention, dayCount, couponFrequency, stubType); } @Override public UniqueId getUniqueId() { return id; } @Override public ObjectId getObjectId() { return getUniqueId().getObjectId(); } public String getName() { return name; } public ExternalId getReferenceEntity() { return referenceEntity; } public BusinessDayConvention getBadDayConvention() { return badDayConvention; } public DayCount getDaycount() { return daycount; } public Period getCouponFrequency() { return couponFrequency; } public StubType getStubType() { return stubType; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } SingleNameIdentifiable that = (SingleNameIdentifiable) o; if (badDayConvention != null ? !badDayConvention.equals(that.badDayConvention) : that.badDayConvention != null) { return false; } if (couponFrequency != null ? !couponFrequency.equals(that.couponFrequency) : that.couponFrequency != null) { return false; } if (daycount != null ? !daycount.equals(that.daycount) : that.daycount != null) { return false; } if (id != null ? !id.equals(that.id) : that.id != null) { return false; } if (name != null ? !name.equals(that.name) : that.name != null) { return false; } if (referenceEntity != null ? !referenceEntity.equals(that.referenceEntity) : that.referenceEntity != null) { return false; } if (stubType != that.stubType) { return false; } return true; } @Override public int hashCode() { int result; result = name != null ? name.hashCode() : 0; result = 31 * result + (id != null ? id.hashCode() : 0); result = 31 * result + (referenceEntity != null ? referenceEntity.hashCode() : 0); result = 31 * result + (badDayConvention != null ? badDayConvention.hashCode() : 0); result = 31 * result + (daycount != null ? daycount.hashCode() : 0); result = 31 * result + (couponFrequency != null ? couponFrequency.hashCode() : 0); result = 31 * result + (stubType != null ? stubType.hashCode() : 0); return result; } }