*/
package org.opendaylight.protocol.pcep.impl.object;
-import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.impl.message.AbstractObjectWithTlvsParser;
-import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
+import java.util.List;
+
+import org.opendaylight.protocol.pcep.spi.EROSubobjectHandlerRegistry;
+import org.opendaylight.protocol.pcep.spi.ObjectUtil;
+import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
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.PathKeyObject;
-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.requests.path.key.expansion.PathKeyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.key.object.PathKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.key.object.PathKeyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.key.object.path.key.PathKeys;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.key.object.path.key.PathKeysBuilder;
+
+import com.google.common.collect.Lists;
/**
- * Parser for {@link PathKeyObject}
+ * Parser for {@link PathKey}
*/
-public class PCEPPathKeyObjectParser extends AbstractObjectWithTlvsParser<PathKeyBuilder> {
+public class PCEPPathKeyObjectParser extends AbstractEROWithSubobjectsParser {
public static final int CLASS = 16;
public static final int TYPE = 1;
- public PCEPPathKeyObjectParser(final TlvHandlerRegistry tlvReg) {
- super(tlvReg);
+ public PCEPPathKeyObjectParser(final EROSubobjectHandlerRegistry subReg) {
+ super(subReg);
}
@Override
- public PathKeyObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException,
- PCEPDocumentedException {
- // FIXME : finish
-
+ public PathKey parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
final PathKeyBuilder builder = new PathKeyBuilder();
-
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
-
+ final List<PathKeys> pk = Lists.newArrayList();
+ final List<Subobject> subs = parseSubobjects(bytes);
+ for (final Subobject s : subs) {
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.subobject.subobject.type.PathKeyCase k = (org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.subobject.subobject.type.PathKeyCase) s.getSubobjectType();
+ pk.add(new PathKeysBuilder().setLoose(s.isLoose()).setPceId(k.getPathKey().getPceId()).setPathKey(k.getPathKey().getPathKey()).build());
+ }
+ builder.setPathKeys(pk);
return builder.build();
}
- @Override
- public void addTlv(final PathKeyBuilder builder, final Tlv tlv) {
- // No tlvs defined
- }
-
@Override
public byte[] serializeObject(final Object object) {
- if (!(object instanceof PathKeyObject)) {
+ if (!(object instanceof PathKey)) {
throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() + ". Needed PathKeyObject.");
}
-
- final PathKeyObject pkey = (PathKeyObject) object;
-
- // FIXME, but no Tlvs defined
- // final byte[] tlvs = PCEPTlvParser.put(lspaObj.getTlvs());
- // final byte[] retBytes = new byte[TLVS_F_OFFSET + tlvs.length];
- // ByteArray.copyWhole(tlvs, retBytes, TLVS_F_OFFSET);
- return new byte[0];
+ final PathKey pkey = (PathKey) object;
+ final List<PathKeys> pk = pkey.getPathKeys();
+ final List<Subobject> subs = Lists.newArrayList();
+ for (final PathKeys p : pk) {
+ subs.add(new SubobjectBuilder().setLoose(p.isLoose()).setSubobjectType(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.subobject.subobject.type.PathKeyCaseBuilder().setPathKey(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.subobject.subobject.type.path.key._case.PathKeyBuilder().setPathKey(
+ p.getPathKey()).setPceId(p.getPceId()).build()).build()).build());
+ }
+ return ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), serializeSubobject(subs));
}
@Override