BUG-64 : initial rewrite, ObjectRegistry.
[bgpcep.git] / pcep / spi / src / main / java / org / opendaylight / protocol / pcep / spi / AbstractMessageParser.java
index bd29b3f9b97374c5ed74f57e94307ec463feb308..97ce4243f357db907757fddfb7c6ebbd3d7b24f4 100644 (file)
@@ -23,6 +23,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.request.RpsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
@@ -30,6 +32,8 @@ import com.google.common.primitives.UnsignedBytes;
 
 public abstract class AbstractMessageParser implements MessageParser, MessageSerializer {
 
+       private static final Logger LOG = LoggerFactory.getLogger(AbstractMessageParser.class);
+
        private static final int COMMON_OBJECT_HEADER_LENGTH = 4;
 
        private static final int OC_F_LENGTH = 1;
@@ -49,18 +53,17 @@ public abstract class AbstractMessageParser implements MessageParser, MessageSer
        private static final int P_FLAG_OFFSET = 6;
        private static final int I_FLAG_OFFSET = 7;
 
-       private final ObjectHandlerRegistry registry;
+       private final ObjectRegistry registry;
 
-       protected AbstractMessageParser(final ObjectHandlerRegistry registry) {
+       protected AbstractMessageParser(final ObjectRegistry registry) {
                this.registry = Preconditions.checkNotNull(registry);
        }
 
        protected byte[] serializeObject(final Object object) {
                if (object == null) {
-                       throw new IllegalArgumentException("Null object passed.");
+                       return new byte[] {};
                }
-               final ObjectSerializer serializer = this.registry.getObjectSerializer(object);
-               return serializer.serializeObject(object);
+               return this.registry.serializeObject(object);
        }
 
        private List<Object> parseObjects(final byte[] bytes) throws PCEPDeserializerException {
@@ -98,11 +101,10 @@ public abstract class AbstractMessageParser implements MessageParser, MessageSer
 
                        offset += objLength - COMMON_OBJECT_HEADER_LENGTH;
 
-                       final ObjectParser parser = Preconditions.checkNotNull(this.registry.getObjectParser(objClass, objType));
                        final ObjectHeader header = new ObjectHeaderImpl(flags.get(P_FLAG_OFFSET), flags.get(I_FLAG_OFFSET));
 
                        // parseObject is required to return null for P=0 errored objects
-                       final Object o = parser.parseObject(header, bytesToPass);
+                       final Object o = this.registry.parseObject(objClass, objType, header, bytesToPass);
                        if (o != null) {
                                objs.add(o);
                        }
@@ -126,9 +128,9 @@ public abstract class AbstractMessageParser implements MessageParser, MessageSer
                                new PcerrMessageBuilder().setErrorType(
                                                new RequestCaseBuilder().setRequest(
                                                                new RequestBuilder().setRps(Lists.newArrayList(new RpsBuilder().setRp(rp).build())).build()).build()).setErrors(
-                                               Arrays.asList(new ErrorsBuilder().setErrorObject(
-                                                               new ErrorObjectBuilder().setType(maping.getFromErrorsEnum(e).type).setValue(
-                                                                               maping.getFromErrorsEnum(e).value).build()).build())).build()).build();
+                                                                               Arrays.asList(new ErrorsBuilder().setErrorObject(
+                                                                                               new ErrorObjectBuilder().setType(maping.getFromErrorsEnum(e).type).setValue(
+                                                                                                               maping.getFromErrorsEnum(e).value).build()).build())).build()).build();
        }
 
        protected abstract Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException;