import java.util.AbstractMap.SimpleEntry;
import java.util.Collection;
import java.util.HashSet;
-import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private Method findRpcMethod(final Class<? extends RpcService> key, final RpcDefinition rpcDef)
throws NoSuchMethodException {
final String methodName = BindingMapping.getMethodName(rpcDef.getQName());
- if (rpcDef.getInput() != null && isExplicitStatement(rpcDef.getInput())) {
- final Class<?> inputClz = runtimeContext().getClassForSchema(rpcDef.getInput());
- return key.getMethod(methodName, inputClz);
- }
- return key.getMethod(methodName);
- }
-
- private static boolean isExplicitStatement(final ContainerSchemaNode node) {
- return node instanceof EffectiveStatement
- && ((EffectiveStatement<?, ?>) node).getDeclared().getStatementSource() == StatementSource.DECLARATION;
+ final Class<?> inputClz = runtimeContext().getClassForSchema(rpcDef.getInput());
+ return key.getMethod(methodName, inputClz);
}
@Override
}
@Nonnull
- protected Map.Entry<InstanceIdentifier<?>, BindingCodecTreeNode<?>> getSubtreeCodec(
+ protected Entry<InstanceIdentifier<?>, BindingCodecTreeNode<?>> getSubtreeCodec(
final YangInstanceIdentifier domIdentifier) {
final BindingCodecTree currentCodecTree = codecRegistry.getCodecContext();
import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils;
private final LoadingCache<QName, DataContainerCodecContext<?,?>> childrenByQName = CacheBuilder.newBuilder().build(
new CacheLoader<QName, DataContainerCodecContext<?,?>>() {
- @SuppressWarnings("unchecked")
@Override
public DataContainerCodecContext<?,?> load(final QName qname) {
final DataSchemaNode childSchema = getSchema().getDataChildByName(qname);
childNonNull(childSchema, qname,"Argument %s is not valid child of %s", qname,getSchema());
if (childSchema instanceof DataNodeContainer || childSchema instanceof ChoiceSchemaNode) {
- @SuppressWarnings("rawtypes")
- final Class childCls = factory().getRuntimeContext().getClassForSchema(childSchema);
+ @SuppressWarnings("unchecked")
+ final Class<? extends DataObject> childCls = (Class<? extends DataObject>)
+ factory().getRuntimeContext().getClassForSchema(childSchema);
return streamChild(childCls);
}
private final LoadingCache<SchemaPath, RpcInputCodec<?>> rpcDataByPath = CacheBuilder.newBuilder().build(
new CacheLoader<SchemaPath, RpcInputCodec<?>>() {
- @SuppressWarnings({ "rawtypes", "unchecked" })
@Override
- public RpcInputCodec load(final SchemaPath key) {
+ public RpcInputCodec<?> load(final SchemaPath key) {
final ContainerSchemaNode schema = SchemaContextUtil.getRpcDataSchema(getSchema(), key);
- if (schema instanceof EffectiveStatement
- && ((EffectiveStatement) schema).getDeclared().getStatementSource()
- != StatementSource.DECLARATION) {
- // This is an implicitly-defined input or output statement. We do not have a corresponding
- // data representation, so we hard-wire it to null.
- return UnmappedRpcInputCodec.getInstance();
- }
-
- final Class cls = factory().getRuntimeContext().getClassForSchema(schema);
+ @SuppressWarnings("unchecked")
+ final Class<? extends DataContainer> cls = (Class<? extends DataContainer>)
+ factory().getRuntimeContext().getClassForSchema(schema);
return getRpc(cls);
}
});
private final LoadingCache<SchemaPath, NotificationCodecContext<?>> notificationsByPath = CacheBuilder.newBuilder()
.build(new CacheLoader<SchemaPath, NotificationCodecContext<?>>() {
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
@Override
- public NotificationCodecContext load(final SchemaPath key) throws Exception {
+ public NotificationCodecContext<?> load(final SchemaPath key) {
final NotificationDefinition schema = SchemaContextUtil.getNotificationSchema(getSchema(), key);
- final Class clz = factory().getRuntimeContext().getClassForSchema(schema);
+ @SuppressWarnings("unchecked")
+ final Class<? extends Notification> clz = (Class<? extends Notification>)
+ factory().getRuntimeContext().getClassForSchema(schema);
return getNotification(clz);
}
});
+++ /dev/null
-/*
- * Copyright (c) 2017 Pantheon Technologies, s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * 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.mdsal.binding.dom.codec.impl;
-
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-
-/**
- * Singleton codec for translating RPCs with implicit input statements, which are not mapped by binding spec v1. Since
- * there is no equivalent, we always return null.
- *
- * @author Robert Varga
- *
- * @param <D> Data object type
- */
-final class UnmappedRpcInputCodec<D extends DataObject> implements RpcInputCodec<D> {
- private static final UnmappedRpcInputCodec<?> INSTANCE = new UnmappedRpcInputCodec<>();
-
- private UnmappedRpcInputCodec() {
-
- }
-
- @SuppressWarnings("unchecked")
- static <D extends DataObject> UnmappedRpcInputCodec<D> getInstance() {
- return (UnmappedRpcInputCodec<D>) INSTANCE;
- }
-
- @Override
- public D deserialize(final NormalizedNode<?, ?> data) {
- return null;
- }
-
- @Override
- public NormalizedNode<?, ?> serialize(final D data) {
- throw new UnsupportedOperationException("Serialization of " + data + " not supported");
- }
-}
import com.google.common.base.Preconditions;
import org.opendaylight.yangtools.concepts.Identifiable;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
public abstract boolean isContextBasedRouted();
public static RpcRoutingStrategy from(final RpcDefinition rpc) {
- ContainerSchemaNode input = rpc.getInput();
- if (input != null) {
- for (DataSchemaNode schemaNode : input.getChildNodes()) {
- Optional<QName> context = getRoutingContext(schemaNode);
- if (context.isPresent()) {
- return new RoutedRpcStrategy(rpc.getQName(), context.get(), schemaNode.getQName());
- }
+ for (DataSchemaNode schemaNode : rpc.getInput().getChildNodes()) {
+ Optional<QName> context = getRoutingContext(schemaNode);
+ if (context.isPresent()) {
+ return new RoutedRpcStrategy(rpc.getQName(), context.get(), schemaNode.getQName());
}
}
return new GlobalRpcStrategy(rpc.getQName());