package org.opendaylight.protocol.pcep.impl.subobject;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.subobject.EROUnnumberedInterfaceSubobject;
-import org.opendaylight.protocol.pcep.subobject.ExplicitRouteSubobject;
+import org.opendaylight.protocol.pcep.spi.EROSubobjectParser;
+import org.opendaylight.protocol.pcep.spi.EROSubobjectSerializer;
import org.opendaylight.protocol.util.ByteArray;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Subobjects;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.SubobjectsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.UnnumberedSubobject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.UnnumberedBuilder;
+
+import com.google.common.primitives.UnsignedInts;
/**
- * Parser for {@link org.opendaylight.protocol.pcep.subobject.EROUnnumberedInterfaceSubobject
- * EROUnnumberedInterfaceSubobject}
+ * Parser for {@link UnnumberedSubobject}
*/
-public class EROUnnumberedInterfaceSubobjectParser {
+public class EROUnnumberedInterfaceSubobjectParser implements EROSubobjectParser, EROSubobjectSerializer {
+
+ public static final int TYPE = 4;
+
public static final int ROUTER_ID_NUMBER_LENGTH = 4;
public static final int INTERFACE_ID_NUMBER_LENGTH = 4;
public static final int CONTENT_LENGTH = INTERFACE_ID_NUMBER_OFFSET + INTERFACE_ID_NUMBER_LENGTH;
- public static EROUnnumberedInterfaceSubobject parse(final byte[] soContentsBytes, final boolean loose) throws PCEPDeserializerException {
- if (soContentsBytes == null || soContentsBytes.length == 0)
+ @Override
+ public Subobjects parseSubobject(final byte[] buffer, final boolean loose) throws PCEPDeserializerException {
+ if (buffer == null || buffer.length == 0)
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
- if (soContentsBytes.length != CONTENT_LENGTH)
- throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + soContentsBytes.length + "; Expected: "
+ if (buffer.length != CONTENT_LENGTH)
+ throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.length + "; Expected: "
+ CONTENT_LENGTH + ".");
-
- // return new EROUnnumberedInterfaceSubobject(new IPv4Address(ByteArray.subByte(soContentsBytes,
- // ROUTER_ID_NUMBER_OFFSET, ROUTER_ID_NUMBER_LENGTH)), new UnnumberedInterfaceIdentifier(
- // UnsignedInts.toLong(ByteArray.bytesToInt(ByteArray.subByte(soContentsBytes, INTERFACE_ID_NUMBER_OFFSET,
- // INTERFACE_ID_NUMBER_LENGTH)))), loose);
- return null;
+ final SubobjectsBuilder builder = new SubobjectsBuilder();
+ builder.setLoose(loose);
+ final UnnumberedBuilder ubuilder = new UnnumberedBuilder();
+ ubuilder.setRouterId(ByteArray.bytesToLong(ByteArray.subByte(buffer, ROUTER_ID_NUMBER_OFFSET, ROUTER_ID_NUMBER_LENGTH)));
+ ubuilder.setInterfaceId(UnsignedInts.toLong(ByteArray.bytesToInt(ByteArray.subByte(buffer, INTERFACE_ID_NUMBER_OFFSET,
+ INTERFACE_ID_NUMBER_LENGTH))));
+ builder.setSubobjectType(ubuilder.build());
+ return builder.build();
}
- public static byte[] put(final ExplicitRouteSubobject objToSerialize) {
- if (!(objToSerialize instanceof EROUnnumberedInterfaceSubobject))
- throw new IllegalArgumentException("Unknown ExplicitRouteSubobject instance. Passed " + objToSerialize.getClass()
- + ". Needed EROUnnumberedInterfaceSubobject.");
+ @Override
+ public byte[] serializeSubobject(final Subobjects subobject) {
+ if (!(subobject.getSubobjectType() instanceof UnnumberedSubobject))
+ throw new IllegalArgumentException("Unknown ExplicitRouteSubobject instance. Passed " + subobject.getSubobjectType().getClass()
+ + ". Needed UnnumberedSubobject.");
byte[] retBytes;
retBytes = new byte[CONTENT_LENGTH];
- final EROUnnumberedInterfaceSubobject specObj = (EROUnnumberedInterfaceSubobject) objToSerialize;
+ final UnnumberedSubobject specObj = (UnnumberedSubobject) subobject.getSubobjectType();
- ByteArray.copyWhole(specObj.getRouterID().getValue().getBytes(), retBytes, ROUTER_ID_NUMBER_OFFSET);
- System.arraycopy(ByteArray.longToBytes(specObj.getInterfaceID().getInterfaceId()), Long.SIZE / Byte.SIZE
- - INTERFACE_ID_NUMBER_LENGTH, retBytes, INTERFACE_ID_NUMBER_OFFSET, INTERFACE_ID_NUMBER_LENGTH);
+ ByteArray.copyWhole(ByteArray.longToBytes(specObj.getRouterId()), retBytes, ROUTER_ID_NUMBER_OFFSET);
+ System.arraycopy(ByteArray.longToBytes(specObj.getInterfaceId()), Long.SIZE / Byte.SIZE - INTERFACE_ID_NUMBER_LENGTH, retBytes,
+ INTERFACE_ID_NUMBER_OFFSET, INTERFACE_ID_NUMBER_LENGTH);
return retBytes;
}
+
+ @Override
+ public int getType() {
+ return TYPE;
+ }
}