X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fdeserialization%2Ffactories%2FExperimenterMessageFactory.java;h=269976ffa7da4db72c40b4fdd5e77f49139c7128;hb=519a86d1ddcfb8f0fe264174e62e5424e1efba1f;hp=f12985919e494177e84b8ee202bf09b1b2125a54;hpb=7d9b6038060779d819e17d5add8556dcc097fcea;p=openflowjava.git diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ExperimenterMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ExperimenterMessageFactory.java index f1298591..269976ff 100644 --- a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ExperimenterMessageFactory.java +++ b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ExperimenterMessageFactory.java @@ -1,47 +1,44 @@ -/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */ +/* + * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + package org.opendaylight.openflowjava.protocol.impl.deserialization.factories; import io.netty.buffer.ByteBuf; -import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer; +import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry; +import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector; +import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer; +import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; +import org.opendaylight.openflowjava.util.ExperimenterDeserializerKeyFactory; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessageBuilder; /** - * Translates Experimenter messages - * @author michal.polkorab, - * @author timotej.kubas + * @author michal.polkorab + * */ -public class ExperimenterMessageFactory implements OFDeserializer{ +public class ExperimenterMessageFactory implements OFDeserializer, + DeserializerRegistryInjector { - private static ExperimenterMessageFactory instance; - - private ExperimenterMessageFactory() { - //singleton - } - - - /** - * @return singleton factory - */ - public static synchronized ExperimenterMessageFactory getInstance(){ - if (instance == null){ - instance = new ExperimenterMessageFactory(); - } - return instance; + /** Experimenter ID index after version, message type and length were read */ + private static final byte EXPERIMENTER_ID_INDEX = 4; + private DeserializerRegistry deserializerRegistry; + + @Override + public ExperimenterMessage deserialize(ByteBuf message) { + long expId = message.getUnsignedInt(message.readerIndex() + EXPERIMENTER_ID_INDEX); + OFDeserializer deserializer = deserializerRegistry.getDeserializer( + ExperimenterDeserializerKeyFactory.createExperimenterMessageDeserializerKey( + EncodeConstants.OF13_VERSION_ID, expId)); + return deserializer.deserialize(message); } @Override - public ExperimenterMessage bufferToMessage(ByteBuf rawMessage, short version) { - ExperimenterMessageBuilder builder = new ExperimenterMessageBuilder(); - builder.setVersion(version); - builder.setXid(rawMessage.readUnsignedInt()); - builder.setExperimenter(rawMessage.readUnsignedInt()); - builder.setExpType(rawMessage.readUnsignedInt()); - int remainingBytes = rawMessage.readableBytes(); - if (remainingBytes > 0) { - builder.setData(rawMessage.readBytes(remainingBytes).array()); - } - return builder.build(); + public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) { + this.deserializerRegistry = deserializerRegistry; } -} +} \ No newline at end of file