Fix license header violations in binding-data-codec
[yangtools.git] / code-generator / binding-data-codec / src / main / java / org / opendaylight / yangtools / binding / data / codec / impl / ListNodeCodecContext.java
index da174b0ab687a48ef397bb9b61ee66951e16e6e3..919df103cf583f199fe553f0d85ce69cbcb8a068 100644 (file)
@@ -7,81 +7,34 @@
  */
 package org.opendaylight.yangtools.binding.data.codec.impl;
 
-import com.google.common.collect.Iterables;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
-import org.opendaylight.yangtools.concepts.Codec;
 import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
-import org.opendaylight.yangtools.yang.binding.Identifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 
-final class ListNodeCodecContext extends DataObjectCodecContext<ListSchemaNode> {
-    private final Codec<NodeIdentifierWithPredicates, IdentifiableItem<?, ?>> codec;
-    private final Method keyGetter;
-
-    ListNodeCodecContext(final DataContainerCodecPrototype<ListSchemaNode> prototype) {
+class ListNodeCodecContext<D extends DataObject> extends DataObjectCodecContext<D,ListSchemaNode> {
+    protected ListNodeCodecContext(final DataContainerCodecPrototype<ListSchemaNode> prototype) {
         super(prototype);
-        if (Identifiable.class.isAssignableFrom(bindingClass())) {
-            this.codec = factory().getPathArgumentCodec(bindingClass(),schema());
-            try {
-                this.keyGetter = bindingClass().getMethod("getKey");
-            } catch (NoSuchMethodException e) {
-                throw new IllegalStateException("Required method not available");
-            }
-        } else {
-            this.codec = null;
-            this.keyGetter = null;
-        }
     }
 
     @Override
-    public void addYangPathArgument(final InstanceIdentifier.PathArgument arg, final List<YangInstanceIdentifier.PathArgument> builder) {
-
-        /*
-         * DOM Instance Identifier for list is always represent by two
-         * entries one for map and one for children. This is also true for
-         * wildcarded instance identifiers
-         */
-        if (builder == null) {
-            return;
-        }
-        super.addYangPathArgument(arg, builder);
-        if (arg instanceof IdentifiableItem<?, ?>) {
-            builder.add(codec.serialize((IdentifiableItem<?, ?>) arg));
+    public D deserialize(final NormalizedNode<?, ?> node) {
+        if (node instanceof MapEntryNode) {
+            return fromMapEntry((MapEntryNode) node);
+        } else if (node instanceof UnkeyedListEntryNode) {
+            return fromUnkeyedListEntry((UnkeyedListEntryNode) node);
         } else {
-            // Adding wildcarded
-            super.addYangPathArgument(arg, builder);
-        }
-    }
-
-    @Override
-    public InstanceIdentifier.PathArgument getBindingPathArgument(
-            final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument domArg) {
-        if (domArg instanceof NodeIdentifierWithPredicates) {
-            return codec.deserialize((NodeIdentifierWithPredicates) domArg);
+            throw new IllegalStateException("Unsupported data type " + node.getClass());
         }
-        return super.getBindingPathArgument(domArg);
-    }
-
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    public NodeIdentifierWithPredicates serialize(final Identifier<?> key) {
-        return codec.serialize(new IdentifiableItem(bindingClass(), key));
     }
 
     @Override
-    protected Object dataFromNormalizedNode(final NormalizedNode<?, ?> node) {
+    protected Object deserializeObject(NormalizedNode<?, ?> node) {
         if (node instanceof MapNode) {
             return fromMap((MapNode) node);
         } else if (node instanceof MapEntryNode) {
@@ -95,38 +48,29 @@ final class ListNodeCodecContext extends DataObjectCodecContext<ListSchemaNode>
         }
     }
 
-    private List<DataObject> fromMap(final MapNode nodes) {
-        List<DataObject> ret = new ArrayList<>(Iterables.size(nodes.getValue()));
-        for(MapEntryNode node : nodes.getValue()) {
+    private List<D> fromMap(final MapNode nodes) {
+        List<D> ret = new ArrayList<>(nodes.getValue().size());
+        for (MapEntryNode node : nodes.getValue()) {
             ret.add(fromMapEntry(node));
         }
         return ret;
     }
 
-    private DataObject fromMapEntry(final MapEntryNode node) {
+    private D fromMapEntry(final MapEntryNode node) {
         return createBindingProxy(node);
     }
 
-    private DataObject fromUnkeyedListEntry(final UnkeyedListEntryNode node) {
+    private D fromUnkeyedListEntry(final UnkeyedListEntryNode node) {
         return createBindingProxy(node);
     }
 
-    private List<DataObject> fromUnkeyedList(final UnkeyedListNode nodes) {
+    private List<D> fromUnkeyedList(final UnkeyedListNode nodes) {
         // FIXME: Could be this lazy transformed list?
-        List<DataObject> ret = new ArrayList<>(Iterables.size(nodes.getValue()));
+        List<D> ret = new ArrayList<>(nodes.getValue().size());
         for (UnkeyedListEntryNode node : nodes.getValue()) {
             ret.add(fromUnkeyedListEntry(node));
         }
         return ret;
     }
 
-    @Override
-    @SuppressWarnings("rawtypes")
-    Object getBindingChildValue(final Method method, final NormalizedNodeContainer dom) {
-        if (dom instanceof MapEntryNode && method.equals(keyGetter)) {
-            NodeIdentifierWithPredicates identifier = ((MapEntryNode) dom).getIdentifier();
-            return codec.deserialize(identifier).getKey();
-        }
-        return super.getBindingChildValue(method, dom);
-    }
 }
\ No newline at end of file