BUG-981: cleanup superfluous use of Callable 71/6871/3
authorRobert Varga <rovarga@cisco.com>
Sat, 10 May 2014 14:54:20 +0000 (16:54 +0200)
committerRobert Varga <rovarga@cisco.com>
Sun, 11 May 2014 15:27:10 +0000 (17:27 +0200)
As it turns out, wrapping code in a callable is completely unnecessary.
Removing it makes the code much more clear and allows for proper
inspection.

Change-Id: Ib57c9996fc8faaa8388736d469334eb2952bf018
Signed-off-by: Robert Varga <rovarga@cisco.com>
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/RuntimeGeneratedMappingServiceImpl.java

index 5a0d074a1def0e81aa5ab3d9c25011da5593ba9e..eacbd93eb55e3c65c1b8d3dc03c846093d390ef7 100644 (file)
@@ -16,7 +16,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ExecutionException;
@@ -52,6 +51,7 @@ import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMapping
 import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry;
 import org.opendaylight.yangtools.yang.data.impl.codec.DataContainerCodec;
 import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
+import org.opendaylight.yangtools.yang.data.impl.codec.InstanceIdentifierCodec;
 import org.opendaylight.yangtools.yang.data.impl.codec.ValueWithQName;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
@@ -65,7 +65,6 @@ import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Objects;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.HashMultimap;
@@ -292,46 +291,50 @@ public class RuntimeGeneratedMappingServiceImpl implements BindingIndependentMap
         for (final org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument arg : path.getPathArguments()) {
             this.waitForSchema(arg.getType());
         }
-        return registry.getInstanceIdentifierCodec().serialize(path);
+
+        final InstanceIdentifierCodec c = getRegistry().getInstanceIdentifierCodec();
+        Preconditions.checkState(c != null, "InstanceIdentifierCodec not present");
+        return c.serialize(path);
     }
 
     @Override
     public DataObject dataObjectFromDataDom(
             final org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject> path,
-            final CompositeNode node) throws DeserializationException {
+            final CompositeNode domData) throws DeserializationException {
+        if (domData == null) {
+            return null;
+        }
 
-        final Class<? extends DataContainer> container = path.getTargetType();
-        final CompositeNode domData = node;
+        try {
+            final Class<? extends DataContainer> container = path.getTargetType();
+            // FIXME: deprecate use without iid
+            final org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject> wildcardedPath = createWildcarded(path);
 
-        return tryDeserialization(new Callable<DataObject>() {
-            @Override
-            public DataObject call() {
-                if (Objects.equal(domData, null)) {
-                    return null;
-                }
-                final DataContainerCodec<? extends DataContainer> transformer = getRegistry()
-                        .getCodecForDataObject(container);
-                // TODO: deprecate use without iid
-                org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends DataObject> wildcardedPath = createWildcarded(path);
-                ValueWithQName<? extends DataContainer> deserialize = transformer.deserialize(domData, wildcardedPath);
-                DataContainer value = null;
-                if (deserialize != null) {
-                    value = deserialize.getValue();
-                }
-                return ((DataObject) value);
+            final DataContainerCodec<? extends DataContainer> transformer = getRegistry().getCodecForDataObject(container);
+            Preconditions.checkState(transformer != null, "Failed to find codec for type %s", container);
+
+            final ValueWithQName<? extends DataContainer> deserialize = transformer.deserialize(domData, wildcardedPath);
+            if (deserialize == null) {
+                return null;
             }
-        });
-    }
 
+            return (DataObject) deserialize.getValue();
+        } catch (Exception e) {
+            LOG.warn("Failed to deserialize path {} data {}", path, domData);
+            throw new DeserializationException("Data deserialization failed", e);
+        }
+    }
 
     @Override
     public org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends Object> fromDataDom(final InstanceIdentifier entry) throws DeserializationException {
-        return tryDeserialization(new Callable<org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends Object>>() {
-            @Override
-            public org.opendaylight.yangtools.yang.binding.InstanceIdentifier<? extends Object> call() {
-                return getRegistry().getInstanceIdentifierCodec().deserialize(entry);
-            }
-        });
+        try {
+            final InstanceIdentifierCodec c = getRegistry().getInstanceIdentifierCodec();
+            Preconditions.checkState(c != null, "InstanceIdentifierCodec not present");
+            return c.deserialize(entry);
+        } catch (Exception e) {
+            LOG.warn("Failed to deserialize entry {}", entry);
+            throw new DeserializationException("Entry deserialization failed", e);
+        }
     }
 
     @Override
@@ -339,15 +342,6 @@ public class RuntimeGeneratedMappingServiceImpl implements BindingIndependentMap
         return this.getRegistry();
     }
 
-    private static <T> T tryDeserialization(final Callable<T> deserializationBlock) throws DeserializationException {
-        try {
-            return deserializationBlock.call();
-        } catch (Exception e) {
-            // FIXME: Make this block providing more information.
-            throw new DeserializationException("Failed to run deserialization", e);
-        }
-    }
-
     private void updateBindingFor(final Map<SchemaPath, GeneratedTypeBuilder> map, final SchemaContext module) {
         for (Map.Entry<SchemaPath, GeneratedTypeBuilder> entry : map.entrySet()) {
             SchemaNode schemaNode = SchemaContextUtil.findDataSchemaNode(module, entry.getKey());
@@ -482,5 +476,4 @@ public class RuntimeGeneratedMappingServiceImpl implements BindingIndependentMap
         }
         return org.opendaylight.yangtools.yang.binding.InstanceIdentifier.create(wildcardedArgs);
     }
-
 }