import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
-
import java.util.HashMap;
import java.util.Map;
-
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@Override
protected DataContainerCodecContext<?> getStreamChild(final Class<?> childClass) {
- return byClass.get(childClass).get();
+ DataContainerCodecPrototype<?> child = byClass.get(childClass);
+ Preconditions.checkArgument(child != null,"Supplied class is not valid case",childClass);
+ return child.get();
+ }
+
+ @Override
+ protected Optional<DataContainerCodecContext<?>> getPossibleStreamChild(final Class<?> childClass) {
+ DataContainerCodecPrototype<?> child = byClass.get(childClass);
+ if(child != null) {
+ return Optional.<DataContainerCodecContext<?>>of(child.get());
+ }
+ return Optional.absent();
}
Iterable<Class<?>> getCaseChildrenClasses() {
*/
package org.opendaylight.yangtools.binding.data.codec.impl;
+import com.google.common.base.Optional;
import java.util.List;
-
import org.opendaylight.yangtools.yang.binding.BindingStreamEventWriter;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
*
* @param childClass
* @return Context of child
+ * @throws IllegalArgumentException If supplied child class is not valid in specified context.
*/
- protected abstract DataContainerCodecContext<?> getStreamChild(final Class<?> childClass);
+ protected abstract DataContainerCodecContext<?> getStreamChild(final Class<?> childClass) throws IllegalArgumentException;
+
+ /**
+ *
+ * Returns child context as if it was walked by
+ * {@link BindingStreamEventWriter}. This means that to enter case, one
+ * must issue getChild(ChoiceClass).getChild(CaseClass).
+ *
+ * @param childClass
+ * @return Context of child or Optional absent is supplied class is not applicable in context.
+ */
+ protected abstract Optional<DataContainerCodecContext<?>> getPossibleStreamChild(final Class<?> childClass);
@Override
public String toString() {
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
-
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-
import org.opendaylight.yangtools.sal.binding.generator.api.ClassLoadingStrategy;
import org.opendaylight.yangtools.sal.binding.model.api.Type;
import org.opendaylight.yangtools.yang.binding.Augmentable;
return childProto.get();
}
+ @Override
+ protected Optional<DataContainerCodecContext<?>> getPossibleStreamChild(final Class<?> childClass) {
+ DataContainerCodecPrototype<?> childProto = byStreamClass.get(childClass);
+ if(childProto != null) {
+ return Optional.<DataContainerCodecContext<?>>of(childProto.get());
+ }
+ return Optional.absent();
+ }
+
@Override
protected DataContainerCodecContext<?> getIdentifierChild(final InstanceIdentifier.PathArgument arg,
final List<YangInstanceIdentifier.PathArgument> builder) {
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
-
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
-
import org.opendaylight.yangtools.binding.data.codec.util.AugmentationReader;
import org.opendaylight.yangtools.yang.binding.Augmentable;
import org.opendaylight.yangtools.yang.binding.Augmentation;
if (aug != null) {
return aug.get(cls);
}
-
- final DataContainerCodecContext<?> augCtx = context.getStreamChild(cls);
- final Optional<NormalizedNode<?, ?>> augData = data.getChild(augCtx.getDomPathArgument());
- if (augData.isPresent()) {
- return augCtx.dataFromNormalizedNode(augData.get());
+ Preconditions.checkNotNull(cls,"Supplied augmentation must not be null.");
+ final Optional<DataContainerCodecContext<?>> augCtx= context.getPossibleStreamChild(cls);
+ if(augCtx.isPresent()) {
+ final Optional<NormalizedNode<?, ?>> augData = data.getChild(augCtx.get().getDomPathArgument());
+ if (augData.isPresent()) {
+ return augCtx.get().dataFromNormalizedNode(augData.get());
+ }
}
return null;
}
*/
package org.opendaylight.yangtools.binding.data.codec.impl;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
-
import org.opendaylight.yangtools.util.ClassLoaderUtils;
import org.opendaylight.yangtools.yang.binding.ChildOf;
import org.opendaylight.yangtools.yang.binding.DataRoot;
return children.getUnchecked(childClass);
}
+ @Override
+ protected Optional<DataContainerCodecContext<?>> getPossibleStreamChild(final Class<?> childClass) {
+ throw new UnsupportedOperationException("Not supported");
+ }
+
@Override
protected YangInstanceIdentifier.PathArgument getDomPathArgument() {
throw new UnsupportedOperationException();