Update MRI projects for Aluminium
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / ConvertorManager.java
index 69382d00106087f49ebef36a0e33fdb680b117bf..42c6af9f7b0b09e50a14afcff005a6a508d33fe4 100644 (file)
@@ -96,6 +96,36 @@ public class ConvertorManager implements ConvertorExecutor, ConvertorRegistrator
         return findConvertor(data.getVersion(), type).map(convertor -> (T)convertor.convert(source, data));
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
+    public <K, F, T, D extends ConvertorData> Optional<T> convert(final Map<K, F> source, final D data) {
+        Optional<T> result = Optional.empty();
+
+        if (source == null) {
+            LOG.trace("Cannot extract type from null source");
+            return result;
+        }
+
+        final Optional<F> firstOptional = source.values().stream().findFirst();
+
+        if (!firstOptional.isPresent()) {
+            LOG.trace("Cannot extract type from empty collection");
+            return result;
+        }
+
+        final F first = firstOptional.get();
+
+        final Class<?> type = first instanceof DataContainer ? ((DataContainer) first).implementedInterface()
+                : first.getClass();
+
+        if (type == null) {
+            LOG.warn("Cannot extract type from {}, because implementedInterface() returns null", source);
+            return result;
+        }
+
+        return findConvertor(data.getVersion(), type).map(convertor -> (T)convertor.convert(source.values(), data));
+    }
+
     @Override
     @SuppressWarnings("unchecked")
     public <F, T, D extends ConvertorData> Optional<T> convert(final Collection<F> source, final D data) {