/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.swap.derivative;
import java.io.Serializable;
import java.util.Arrays;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivative;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitor;
import com.opengamma.analytics.financial.interestrate.annuity.derivative.Annuity;
import com.opengamma.analytics.financial.interestrate.payments.derivative.Payment;
import com.opengamma.util.ArgumentChecker;
/**
* Class describing a generic swap with multiple legs.
*/
public class SwapMultileg implements InstrumentDerivative, Serializable {
/**
* The swap first leg.
*/
private final Annuity<? extends Payment>[] _legs;
public SwapMultileg(final Annuity<? extends Payment>[] legs) {
ArgumentChecker.noNulls(legs, "legs");
ArgumentChecker.isTrue(legs.length > 0, "SwapMultileg should have at least one leg");
_legs = legs;
}
/**
* Returns the legs.
* @return The legs.
*/
public Annuity<? extends Payment>[] getLegs() {
return _legs;
}
@Override
public <S, T> T accept(InstrumentDerivativeVisitor<S, T> visitor, S data) {
ArgumentChecker.notNull(visitor, "visitor");
return visitor.visitSwapMultileg(this, data);
}
@Override
public <T> T accept(InstrumentDerivativeVisitor<?, T> visitor) {
ArgumentChecker.notNull(visitor, "visitor");
return visitor.visitSwapMultileg(this);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(_legs);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
SwapMultileg other = (SwapMultileg) obj;
if (!Arrays.equals(_legs, other._legs)) {
return false;
}
return true;
}
}