BUG-47 : unfinished PCEP migration to generated DTOs.
[bgpcep.git] / pcep / impl / src / main / java / org / opendaylight / protocol / pcep / impl / object / PCEPSvecObjectParser.java
index 863fd8c4e1723a03496872495a6600b55ecf6556..6ae579c2ee8c3130f89cc478b1379d77f7ba3414 100644 (file)
@@ -7,21 +7,31 @@
  */
 package org.opendaylight.protocol.pcep.impl.object;
 
-import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.List;
 
 import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPObject;
-import org.opendaylight.protocol.pcep.impl.PCEPObjectParser;
-import org.opendaylight.protocol.pcep.object.PCEPSvecObject;
+import org.opendaylight.protocol.pcep.PCEPDocumentedException;
+import org.opendaylight.protocol.pcep.spi.AbstractObjectParser;
+import org.opendaylight.protocol.pcep.spi.HandlerRegistry;
 import org.opendaylight.protocol.util.ByteArray;
-import com.google.common.primitives.UnsignedInts;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SvecObject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.SvecBuilder;
+
+import com.google.common.collect.Lists;
 
 /**
- * Parser for {@link org.opendaylight.protocol.pcep.object.PCEPSvecObject PCEPSvecObject}
+ * Parser for {@link SvecObject}
  */
-public class PCEPSvecObjectParser implements PCEPObjectParser {
+public class PCEPSvecObjectParser extends AbstractObjectParser<SvecBuilder> {
+
+       public static final int CLASS = 11;
+
+       public static final int TYPE = 1;
 
        /*
         * field lengths in bytes
@@ -42,57 +52,69 @@ public class PCEPSvecObjectParser implements PCEPObjectParser {
        public static final int N_FLAG_OFFSET = 22;
        public static final int L_FLAG_OFFSET = 23;
 
-       public static final int P_FLAG_OFFSET = 19;
-       public static final int D_FLAG_OFFSET = 20;
-
        /*
         * min size in bytes
         */
-
        public static final int MIN_SIZE = FLAGS_F_LENGTH + FLAGS_F_OFFSET;
 
+       public PCEPSvecObjectParser(final HandlerRegistry registry) {
+               super(registry);
+       }
+
        @Override
-       public PCEPObject parse(byte[] bytes, boolean processed, boolean ignored) throws PCEPDeserializerException {
+       public SvecObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
                if (bytes == null || bytes.length == 0)
                        throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
 
                if (bytes.length < MIN_SIZE)
-                       throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + bytes.length + "; Expected: >=" + MIN_SIZE + ".");
+                       throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + bytes.length + "; Expected: >=" + MIN_SIZE
+                                       + ".");
 
                final BitSet flags = ByteArray.bytesToBitSet(ByteArray.subByte(bytes, FLAGS_F_OFFSET, FLAGS_F_LENGTH));
-               final int numOfRIDs = (bytes.length - FLAGS_F_LENGTH - FLAGS_F_OFFSET) / REQ_LIST_ITEM_LENGTH;
-               final List<Long> requestIDs = new ArrayList<Long>(numOfRIDs);
+               final List<RequestId> requestIDs = Lists.newArrayList();
 
                for (int i = REQ_ID_LIST_OFFSET; i < bytes.length; i += REQ_LIST_ITEM_LENGTH) {
-                       requestIDs.add(UnsignedInts.toLong(ByteArray.bytesToInt(ByteArray.subByte(bytes, i, REQ_LIST_ITEM_LENGTH))));
+                       requestIDs.add(new RequestId(ByteArray.bytesToLong(ByteArray.subByte(bytes, i, REQ_LIST_ITEM_LENGTH))));
                }
 
                if (requestIDs.isEmpty())
                        throw new PCEPDeserializerException("Empty Svec Object - no request ids.");
 
-               return new PCEPSvecObject(flags.get(L_FLAG_OFFSET), flags.get(N_FLAG_OFFSET), flags.get(S_FLAG_OFFSET), flags.get(P_FLAG_OFFSET),
-                               flags.get(D_FLAG_OFFSET), requestIDs, processed);
+               final SvecBuilder builder = new SvecBuilder();
+
+               builder.setIgnore(header.isIgnore());
+               builder.setProcessingRule(header.isProcessingRule());
+
+               builder.setLinkDiverse(flags.get(L_FLAG_OFFSET));
+               builder.setNodeDiverse(flags.get(N_FLAG_OFFSET));
+               builder.setSrlgDiverse(flags.get(S_FLAG_OFFSET));
+               builder.setRequestsIds(requestIDs);
+               return builder.build();
        }
 
        @Override
-       public byte[] put(PCEPObject obj) {
-               if (!(obj instanceof PCEPSvecObject))
-                       throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + obj.getClass() + ". Needed PCEPSvecObject.");
+       public void addTlv(final SvecBuilder builder, final Tlv tlv) {
+               // No tlvs defined
+       }
+
+       @Override
+       public byte[] serializeObject(final Object object) {
+               if (!(object instanceof SvecObject))
+                       throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed SvecObject.");
 
-               final PCEPSvecObject svecObj = (PCEPSvecObject) obj;
-               final byte[] retBytes = new byte[svecObj.getRequestIDs().size() * REQ_LIST_ITEM_LENGTH + REQ_ID_LIST_OFFSET];
-               final List<Long> requestIDs = svecObj.getRequestIDs();
+               final SvecObject svecObj = (SvecObject) object;
+               final byte[] retBytes = new byte[svecObj.getRequestsIds().size() * REQ_LIST_ITEM_LENGTH + REQ_ID_LIST_OFFSET];
+               final List<RequestId> requestIDs = svecObj.getRequestsIds();
                final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE);
-               flags.set(L_FLAG_OFFSET, svecObj.isLinkDiversed());
-               flags.set(N_FLAG_OFFSET, svecObj.isNodeDiversed());
-               flags.set(S_FLAG_OFFSET, svecObj.isSrlgDiversed());
-               flags.set(P_FLAG_OFFSET, svecObj.isParitialPathDiversed());
-               flags.set(D_FLAG_OFFSET, svecObj.isLinkDirectionDiversed());
+               flags.set(L_FLAG_OFFSET, svecObj.isLinkDiverse());
+               flags.set(N_FLAG_OFFSET, svecObj.isNodeDiverse());
+               flags.set(S_FLAG_OFFSET, svecObj.isSrlgDiverse());
 
                ByteArray.copyWhole(ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH), retBytes, FLAGS_F_OFFSET);
 
                for (int i = 0; i < requestIDs.size(); i++) {
-                       System.arraycopy(ByteArray.longToBytes(requestIDs.get(i)), 4, retBytes, REQ_LIST_ITEM_LENGTH * i + REQ_ID_LIST_OFFSET, REQ_LIST_ITEM_LENGTH);
+                       System.arraycopy(ByteArray.longToBytes(requestIDs.get(i).getValue()), 4, retBytes, REQ_LIST_ITEM_LENGTH * i
+                                       + REQ_ID_LIST_OFFSET, REQ_LIST_ITEM_LENGTH);
                }
 
                assert !(requestIDs.isEmpty()) : "Empty Svec Object - no request ids.";
@@ -100,4 +122,13 @@ public class PCEPSvecObjectParser implements PCEPObjectParser {
                return retBytes;
        }
 
+       @Override
+       public int getObjectType() {
+               return TYPE;
+       }
+
+       @Override
+       public int getObjectClass() {
+               return CLASS;
+       }
 }