<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-data-util</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-data-impl</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-model-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-model-ri</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-model-spi</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-model-util</artifactId>
</dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yang-xpath-api</artifactId>
- </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<artifactId>mdsal-dom-api</artifactId>
+++ /dev/null
-/*
- * Copyright (c) 2020 PANTHEON.tech, 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.restconf.common.util;
-
-import com.google.common.collect.ImmutableSet;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Map.Entry;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.dom.api.DOMMountPoint;
-import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
-import org.opendaylight.yangtools.yang.common.Empty;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder;
-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.Module;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
-
-
-// FIXME: remove this class
-public final class OperationsResourceUtils {
- private OperationsResourceUtils() {
- // Hidden on purpose
- }
-
- public static @NonNull Entry<InstanceIdentifierContext, ContainerNode>
- contextForModelContext(final @NonNull SchemaContext context, final @Nullable DOMMountPoint mountPoint) {
- // Determine which modules we need and construct leaf schemas to correspond to all RPC definitions
- final Collection<Module> modules = new ArrayList<>();
- final ArrayList<OperationsLeafSchemaNode> rpcLeafSchemas = new ArrayList<>();
- for (final Module m : context.getModules()) {
- final Collection<? extends RpcDefinition> rpcs = m.getRpcs();
- if (!rpcs.isEmpty()) {
- modules.add(new OperationsImportedModule(m));
- rpcLeafSchemas.ensureCapacity(rpcLeafSchemas.size() + rpcs.size());
- for (RpcDefinition rpc : rpcs) {
- rpcLeafSchemas.add(new OperationsLeafSchemaNode(rpc));
- }
- }
- }
-
- // Now generate a module for RESTCONF so that operations contain what they need
- final OperationsContainerSchemaNode operatationsSchema = new OperationsContainerSchemaNode(rpcLeafSchemas);
- modules.add(new OperationsRestconfModule(operatationsSchema));
-
- // Now build the operations container and combine it with the context
- final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> operationsBuilder = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(OperationsContainerSchemaNode.QNAME));
- for (final OperationsLeafSchemaNode leaf : rpcLeafSchemas) {
- operationsBuilder.withChild(ImmutableNodes.leafNode(leaf.getQName(), Empty.value()));
- }
-
- final var opContext = new OperationsEffectiveModuleContext(ImmutableSet.copyOf(modules));
- final var stack = SchemaInferenceStack.of(opContext);
- stack.enterSchemaTree(operatationsSchema.getQName());
-
- return Map.entry(InstanceIdentifierContext.ofStack(stack, mountPoint), operationsBuilder.build());
- }
-}
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-model-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-model-ri</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-model-spi</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-model-util</artifactId>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-repo-api</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-xpath-api</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
* 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.restconf.common.util;
+package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.xpath.api.YangXPathExpression.QualifiedBound;
+@Deprecated(forRemoval = true, since = "4.0.0")
abstract class AbstractOperationDataSchemaNode implements DataSchemaNode {
@Override
public final Status getStatus() {
* 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.restconf.common.util;
+package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
import java.util.Collection;
-import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.UnresolvedQName;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
+@Deprecated(forRemoval = true, since = "4.0.0")
abstract class AbstractOperationsModule implements Module, ModuleEffectiveStatement {
@Override
public final ModuleStatement getDeclared() {
@Override
public final Collection<? extends @NonNull ModuleImport> getImports() {
// Yeah, not accurate, but this should not be needed
- return Collections.emptySet();
+ return Set.of();
}
@Override
@Override
public final Collection<? extends TypeDefinition<?>> getTypeDefinitions() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public final Collection<? extends GroupingDefinition> getGroupings() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public final Collection<? extends UsesNode> getUses() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
@Override
public final Collection<? extends NotificationDefinition> getNotifications() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
@Override
public final Collection<? extends @NonNull Submodule> getSubmodules() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public final Collection<? extends @NonNull FeatureDefinition> getFeatures() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public final Collection<? extends @NonNull AugmentationSchemaNode> getAugmentations() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public final Collection<? extends @NonNull RpcDefinition> getRpcs() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public final Collection<? extends @NonNull Deviation> getDeviations() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public final Collection<? extends @NonNull IdentitySchemaNode> getIdentities() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public final Collection<? extends @NonNull ExtensionDefinition> getExtensionSchemaNodes() {
- return Collections.emptyList();
+ return List.of();
}
@Override
* 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.restconf.common.util;
+package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
import static java.util.Objects.requireNonNull;
import com.google.common.collect.Maps;
import java.util.Collection;
-import java.util.Collections;
import java.util.Map;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.model.api.UsesNode;
import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
+@Deprecated(forRemoval = true, since = "4.0.0")
final class OperationsContainerSchemaNode extends AbstractOperationDataSchemaNode implements ContainerSchemaNode {
// There is no need to intern this nor add a revision, as we are providing the corresponding context anyway
static final @NonNull QName QNAME = QName.create(OperationsRestconfModule.NAMESPACE, "operations");
@Override
public Set<TypeDefinition<?>> getTypeDefinitions() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public Set<GroupingDefinition> getGroupings() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public Set<UsesNode> getUses() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public Set<AugmentationSchemaNode> getAvailableAugmentations() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public Set<NotificationDefinition> getNotifications() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public Set<ActionDefinition> getActions() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
public Collection<@NonNull MustDefinition> getMustConstraints() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
* 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.restconf.common.util;
+package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
import static com.google.common.base.Verify.verify;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
import org.opendaylight.yangtools.yang.model.spi.SimpleSchemaContext;
+@Deprecated(forRemoval = true, since = "4.0.0")
final class OperationsEffectiveModuleContext extends SimpleSchemaContext implements EffectiveModelContext {
- private final Map<QNameModule, ModuleEffectiveStatement> modules;
+ private final ImmutableMap<QNameModule, ModuleEffectiveStatement> modules;
OperationsEffectiveModuleContext(final Set<Module> modules) {
super(modules);
* 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.restconf.common.util;
+package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
import static java.util.Objects.requireNonNull;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+@Deprecated(forRemoval = true, since = "4.0.0")
final class OperationsImportedModule extends AbstractOperationsModule {
private final Module original;
* 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.restconf.common.util;
+package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
import java.util.Collection;
-import java.util.Collections;
+import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes;
+@Deprecated(forRemoval = true, since = "4.0.0")
final class OperationsLeafSchemaNode extends AbstractOperationDataSchemaNode implements LeafSchemaNode {
private final QName qname;
@Override
public Collection<@NonNull MustDefinition> getMustConstraints() {
- return Collections.emptySet();
+ return Set.of();
}
@Override
* 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.restconf.common.util;
+package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
import static java.util.Objects.requireNonNull;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+@Deprecated(forRemoval = true, since = "4.0.0")
final class OperationsRestconfModule extends AbstractOperationsModule {
// There is no need to intern this nor add a revision, as we are providing the corresponding context anyway
static final @NonNull QNameModule NAMESPACE =
import static java.util.Objects.requireNonNull;
+import com.google.common.collect.ImmutableSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
import java.util.Optional;
import javax.ws.rs.Path;
import javax.ws.rs.core.UriInfo;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.dom.api.DOMMountPoint;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
-import org.opendaylight.restconf.common.util.OperationsResourceUtils;
import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
import org.opendaylight.restconf.nb.rfc8040.rests.services.api.RestconfOperationsService;
import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
import org.opendaylight.restconf.nb.rfc8040.utils.parser.ParserIdentifier;
+import org.opendaylight.yangtools.yang.common.Empty;
import org.opendaylight.yangtools.yang.common.ErrorTag;
import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder;
+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.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
final InstanceIdentifierContext mountPointIdentifier = ParserIdentifier.toInstanceIdentifier(identifier,
schemaContextHandler.get(), Optional.of(mountPointService));
final DOMMountPoint mountPoint = mountPointIdentifier.getMountPoint();
- final var entry = OperationsResourceUtils.contextForModelContext(modelContext(mountPoint), mountPoint);
+ final var entry = contextForModelContext(modelContext(mountPoint), mountPoint);
return NormalizedNodePayload.of(entry.getKey(), entry.getValue());
}
.flatMap(svc -> Optional.ofNullable(svc.getGlobalContext()))
.orElse(null);
}
+
+ // FIXME: remove this method and everything it uses
+ @Deprecated(forRemoval = true, since = "4.0.0")
+ private static @NonNull Entry<InstanceIdentifierContext, ContainerNode> contextForModelContext(
+ final @NonNull EffectiveModelContext context, final @Nullable DOMMountPoint mountPoint) {
+ // Determine which modules we need and construct leaf schemas to correspond to all RPC definitions
+ final Collection<Module> modules = new ArrayList<>();
+ final ArrayList<OperationsLeafSchemaNode> rpcLeafSchemas = new ArrayList<>();
+ for (final Module m : context.getModules()) {
+ final Collection<? extends RpcDefinition> rpcs = m.getRpcs();
+ if (!rpcs.isEmpty()) {
+ modules.add(new OperationsImportedModule(m));
+ rpcLeafSchemas.ensureCapacity(rpcLeafSchemas.size() + rpcs.size());
+ for (RpcDefinition rpc : rpcs) {
+ rpcLeafSchemas.add(new OperationsLeafSchemaNode(rpc));
+ }
+ }
+ }
+
+ // Now generate a module for RESTCONF so that operations contain what they need
+ final OperationsContainerSchemaNode operatationsSchema = new OperationsContainerSchemaNode(rpcLeafSchemas);
+ modules.add(new OperationsRestconfModule(operatationsSchema));
+
+ // Now build the operations container and combine it with the context
+ final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> operationsBuilder = Builders.containerBuilder()
+ .withNodeIdentifier(new NodeIdentifier(OperationsContainerSchemaNode.QNAME));
+ for (final OperationsLeafSchemaNode leaf : rpcLeafSchemas) {
+ operationsBuilder.withChild(ImmutableNodes.leafNode(leaf.getQName(), Empty.value()));
+ }
+
+ final var opContext = new OperationsEffectiveModuleContext(ImmutableSet.copyOf(modules));
+ final var stack = SchemaInferenceStack.of(opContext);
+ stack.enterSchemaTree(operatationsSchema.getQName());
+
+ return Map.entry(InstanceIdentifierContext.ofStack(stack, mountPoint), operationsBuilder.build());
+ }
+
}