Sho SHIMIZU

Make Instructions.modL0Lambda(short) deprecated

Integrate static factory method for indexed lambda and OCh

Change-Id: I80074f7ce2e1703a4ebc7d6f552b52bffc970193
......@@ -22,20 +22,29 @@ import com.google.common.base.MoreObjects;
*/
public class IndexedLambda implements Lambda {
private final long lambda;
private final long index;
/**
* Creates an instance representing the wavelength specified by the given index number.
*
* @param lambda index number of wavelength
* @param index index number of wavelength
*/
IndexedLambda(long lambda) {
this.lambda = lambda;
IndexedLambda(long index) {
this.index = index;
}
/**
* Returns the index number of lambda.
*
* @return the index number of lambda
*/
public long index() {
return index;
}
@Override
public int hashCode() {
return (int) (lambda ^ (lambda >>> 32));
return (int) (index ^ (index >>> 32));
}
@Override
......@@ -48,13 +57,13 @@ public class IndexedLambda implements Lambda {
}
final IndexedLambda that = (IndexedLambda) obj;
return this.lambda == that.lambda;
return this.index == that.index;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("lambda", lambda)
.add("lambda", index)
.toString();
}
}
......
......@@ -21,10 +21,13 @@ import org.onlab.packet.MacAddress;
import org.onlab.packet.MplsLabel;
import org.onlab.packet.VlanId;
import org.onosproject.core.GroupId;
import org.onosproject.net.IndexedLambda;
import org.onosproject.net.Lambda;
import org.onosproject.net.OchSignal;
import org.onosproject.net.PortNumber;
import org.onosproject.net.flow.instructions.L0ModificationInstruction.L0SubType;
import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModOchSignalInstruction;
import org.onosproject.net.flow.instructions.L3ModificationInstruction.L3SubType;
import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction;
......@@ -81,7 +84,9 @@ public final class Instructions {
*
* @param lambda the lambda to modify to
* @return a l0 modification
* @deprecated in Cardinal Release. Use {@link #modL0Lambda(Lambda)} instead.
*/
@Deprecated
public static L0ModificationInstruction modL0Lambda(short lambda) {
checkNotNull(lambda, "L0 lambda cannot be null");
return new ModLambdaInstruction(L0SubType.LAMBDA, lambda);
......@@ -93,9 +98,16 @@ public final class Instructions {
* @param lambda OCh signal
* @return an L0 modification
*/
public static L0ModificationInstruction modL0OchSignal(OchSignal lambda) {
public static L0ModificationInstruction modL0Lambda(Lambda lambda) {
checkNotNull(lambda, "L0 OCh signal cannot be null");
return new L0ModificationInstruction.ModOchSignalInstruction(lambda);
if (lambda instanceof IndexedLambda) {
return new ModLambdaInstruction(L0SubType.LAMBDA, (short) ((IndexedLambda) lambda).index());
} else if (lambda instanceof OchSignal) {
return new ModOchSignalInstruction((OchSignal) lambda);
} else {
throw new UnsupportedOperationException(String.format("Unsupported type: %s", lambda));
}
}
/**
......