import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterInstructionDeserializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
+import org.opendaylight.openflowjava.protocol.api.keys.TypeToClassKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
*/
void registerQueuePropertyDeserializer(ExperimenterIdDeserializerKey key,
OFDeserializer<QueueProperty> deserializer);
+
+ /**
+ * Registers type to class mapping used to assign return type when deserializing message
+ * @param key type to class key
+ * @param clazz return class
+ */
+ void registerDeserializerMapping(TypeToClassKey key, Class<?> clazz);
+
+ /**
+ * Unregisters type to class mapping used to assign return type when deserializing message
+ * @param key type to class key
+ * @return true if mapping was successfully removed
+ */
+ boolean unregisterDeserializerMapping(TypeToClassKey key);
}
* 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.util;
+package org.opendaylight.openflowjava.protocol.api.keys;
/**
* @author michal.polkorab
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-package org.opendaylight.openflowjava.protocol.impl.deserialization;
+package org.opendaylight.openflowjava.protocol.api.keys;
import org.junit.Assert;
import org.junit.Test;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.TypeToClassKey;
/**
*
* @author madamjak
import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
import org.opendaylight.openflowjava.protocol.impl.serialization.SerializationFactory;
import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
+import org.opendaylight.openflowjava.protocol.api.keys.TypeToClassKey;
import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.config.rev140630.TransportProtocol;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
public void registerDeserializer(MessageCodeKey key, OFGeneralDeserializer deserializer) {
deserializerRegistry.registerDeserializer(key, deserializer);
}
+
+ @Override
+ public void registerDeserializerMapping(final TypeToClassKey key, final Class<?> clazz) {
+ deserializationFactory.registerMapping(key, clazz);
+ }
+
+ @Override
+ public boolean unregisterDeserializerMapping(final TypeToClassKey key) {
+ return deserializationFactory.unregisterMapping(key);
+ }
}
package org.opendaylight.openflowjava.protocol.impl.deserialization;
-import com.google.common.collect.ImmutableMap;
import io.netty.buffer.ByteBuf;
-import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
+import org.opendaylight.openflowjava.protocol.api.keys.TypeToClassKey;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.TypeToClassKey;
import org.opendaylight.yangtools.yang.binding.DataObject;
/**
*/
public class DeserializationFactory {
- private final Map<TypeToClassKey, Class<?>> messageClassMap;
+ private final Map<TypeToClassKey, Class<?>> messageClassMap = new ConcurrentHashMap<>();
private DeserializerRegistry registry;
/**
* Constructor
*/
public DeserializationFactory() {
- final Map<TypeToClassKey, Class<?>> temp = new HashMap<>();
- TypeToClassMapInitializer.initializeTypeToClassMap(temp);
+ TypeToClassMapInitializer.initializeTypeToClassMap(messageClassMap);
// Register type to class map for additional deserializers
- TypeToClassMapInitializer.initializeAdditionalTypeToClassMap(temp);
-
- messageClassMap = ImmutableMap.copyOf(temp);
+ TypeToClassMapInitializer.initializeAdditionalTypeToClassMap(messageClassMap);
}
/**
return dataObject;
}
+ /**
+ * Register new type to class mapping used to assign return type when deserializing message
+ * @param key type to class key
+ * @param clazz return class
+ */
+ public void registerMapping(final TypeToClassKey key, final Class<?> clazz) {
+ messageClassMap.put(key, clazz);
+ }
+
+ /**
+ * Unregister type to class mapping used to assign return type when deserializing message
+ * @param key type to class key
+ * @return true if mapping was successfully removed
+ */
+ public boolean unregisterMapping(final TypeToClassKey key) {
+ if (key == null) {
+ throw new IllegalArgumentException("TypeToClassKey is null");
+ }
+
+ return messageClassMap.remove(key) != null;
+ }
+
/**
* @param registry
*/
import java.util.Map;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.openflowjava.protocol.impl.util.TypeToClassInitHelper;
-import org.opendaylight.openflowjava.protocol.impl.util.TypeToClassKey;
+import org.opendaylight.openflowjava.protocol.api.keys.TypeToClassKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoOutput;
package org.opendaylight.openflowjava.protocol.impl.util;
import java.util.Map;
+import org.opendaylight.openflowjava.protocol.api.keys.TypeToClassKey;
/**
* @author michal.polkorab
import java.util.Map;
import org.junit.Test;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.TypeToClassKey;
+import org.opendaylight.openflowjava.protocol.api.keys.TypeToClassKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoOutput;