Revert "BUG-47 : unfinished PCEP migration to generated DTOs."
[bgpcep.git] / pcep / impl / src / main / java / org / opendaylight / protocol / pcep / impl / object / PCEPSvecObjectParser.java
index 6ae579c2ee8c3130f89cc478b1379d77f7ba3414..863fd8c4e1723a03496872495a6600b55ecf6556 100644 (file)
@@ -7,31 +7,21 @@
  */
 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.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.spi.AbstractObjectParser;
-import org.opendaylight.protocol.pcep.spi.HandlerRegistry;
+import org.opendaylight.protocol.pcep.PCEPObject;
+import org.opendaylight.protocol.pcep.impl.PCEPObjectParser;
+import org.opendaylight.protocol.pcep.object.PCEPSvecObject;
 import org.opendaylight.protocol.util.ByteArray;
-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;
+import com.google.common.primitives.UnsignedInts;
 
 /**
- * Parser for {@link SvecObject}
+ * Parser for {@link org.opendaylight.protocol.pcep.object.PCEPSvecObject PCEPSvecObject}
  */
-public class PCEPSvecObjectParser extends AbstractObjectParser<SvecBuilder> {
-
-       public static final int CLASS = 11;
-
-       public static final int TYPE = 1;
+public class PCEPSvecObjectParser implements PCEPObjectParser {
 
        /*
         * field lengths in bytes
@@ -52,69 +42,57 @@ public class PCEPSvecObjectParser extends AbstractObjectParser<SvecBuilder> {
        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);
-       }
+       public static final int MIN_SIZE = FLAGS_F_LENGTH + FLAGS_F_OFFSET;
 
        @Override
-       public SvecObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+       public PCEPObject parse(byte[] bytes, boolean processed, boolean ignored) throws PCEPDeserializerException {
                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 List<RequestId> requestIDs = Lists.newArrayList();
+               final int numOfRIDs = (bytes.length - FLAGS_F_LENGTH - FLAGS_F_OFFSET) / REQ_LIST_ITEM_LENGTH;
+               final List<Long> requestIDs = new ArrayList<Long>(numOfRIDs);
 
                for (int i = REQ_ID_LIST_OFFSET; i < bytes.length; i += REQ_LIST_ITEM_LENGTH) {
-                       requestIDs.add(new RequestId(ByteArray.bytesToLong(ByteArray.subByte(bytes, i, REQ_LIST_ITEM_LENGTH))));
+                       requestIDs.add(UnsignedInts.toLong(ByteArray.bytesToInt(ByteArray.subByte(bytes, i, REQ_LIST_ITEM_LENGTH))));
                }
 
                if (requestIDs.isEmpty())
                        throw new PCEPDeserializerException("Empty Svec Object - no request ids.");
 
-               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();
+               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);
        }
 
        @Override
-       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.");
+       public byte[] put(PCEPObject obj) {
+               if (!(obj instanceof PCEPSvecObject))
+                       throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + obj.getClass() + ". Needed PCEPSvecObject.");
 
-               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 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 BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE);
-               flags.set(L_FLAG_OFFSET, svecObj.isLinkDiverse());
-               flags.set(N_FLAG_OFFSET, svecObj.isNodeDiverse());
-               flags.set(S_FLAG_OFFSET, svecObj.isSrlgDiverse());
+               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());
 
                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).getValue()), 4, retBytes, REQ_LIST_ITEM_LENGTH * i
-                                       + REQ_ID_LIST_OFFSET, REQ_LIST_ITEM_LENGTH);
+                       System.arraycopy(ByteArray.longToBytes(requestIDs.get(i)), 4, retBytes, REQ_LIST_ITEM_LENGTH * i + REQ_ID_LIST_OFFSET, REQ_LIST_ITEM_LENGTH);
                }
 
                assert !(requestIDs.isEmpty()) : "Empty Svec Object - no request ids.";
@@ -122,13 +100,4 @@ public class PCEPSvecObjectParser extends AbstractObjectParser<SvecBuilder> {
                return retBytes;
        }
 
-       @Override
-       public int getObjectType() {
-               return TYPE;
-       }
-
-       @Override
-       public int getObjectClass() {
-               return CLASS;
-       }
 }