import java.util.Optional;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.common.api.CommitInfo;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.mdsal.dom.api.DOMSchemaService.YangTextSourceExtension;
import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
+import org.opendaylight.restconf.api.FormattableBody;
import org.opendaylight.restconf.api.query.FieldsParam;
import org.opendaylight.restconf.api.query.FieldsParam.NodeSelector;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
import org.opendaylight.restconf.common.errors.RestconfFuture;
import org.opendaylight.restconf.common.errors.SettableRestconfFuture;
-import org.opendaylight.restconf.nb.rfc8040.jersey.providers.ParameterAwareNormalizedNodeWriter;
-import org.opendaylight.restconf.nb.rfc8040.legacy.WriterParameters;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.RestconfNormalizedNodeWriter;
import org.opendaylight.restconf.server.api.DataGetParams;
import org.opendaylight.restconf.server.api.DataGetResult;
import org.opendaylight.restconf.server.api.DatabindContext;
import org.opendaylight.restconf.server.api.DatabindPath.Data;
+import org.opendaylight.restconf.server.api.ServerRequest;
+import org.opendaylight.restconf.server.spi.HttpGetResource;
+import org.opendaylight.restconf.server.spi.NormalizedNodeWriterFactory;
import org.opendaylight.restconf.server.spi.RpcImplementation;
+import org.opendaylight.restconf.server.spi.YangLibraryVersionResource;
import org.opendaylight.yangtools.yang.common.Empty;
import org.opendaylight.yangtools.yang.common.ErrorTag;
import org.opendaylight.yangtools.yang.common.ErrorType;
* @see DOMDataTreeReadWriteTransaction
*/
public final class MdsalRestconfStrategy extends RestconfStrategy {
- private final DOMDataBroker dataBroker;
+ private final @NonNull HttpGetResource yangLibraryVersion;
+ private final @NonNull DOMDataBroker dataBroker;
public MdsalRestconfStrategy(final DatabindContext databind, final DOMDataBroker dataBroker,
final ImmutableMap<QName, RpcImplementation> localRpcs, final @Nullable DOMRpcService rpcService,
final @Nullable DOMMountPointService mountPointService) {
super(databind, localRpcs, rpcService, actionService, sourceProvider, mountPointService);
this.dataBroker = requireNonNull(dataBroker);
+ yangLibraryVersion = YangLibraryVersionResource.of(databind);
+ }
+
+ @NonNullByDefault
+ public RestconfFuture<FormattableBody> yangLibraryVersionGET(final ServerRequest request) {
+ return yangLibraryVersion.httpGET(request);
}
@Override
}
@Override
- void delete(final SettableRestconfFuture<Empty> future, final YangInstanceIdentifier path) {
+ void delete(final SettableRestconfFuture<Empty> future, final ServerRequest request,
+ final YangInstanceIdentifier path) {
final var tx = dataBroker.newReadWriteTransaction();
tx.exists(CONFIGURATION, path).addCallback(new FutureCallback<>() {
@Override
}
@Override
- RestconfFuture<DataGetResult> dataGET(final Data path, final DataGetParams params) {
- final var inference = path.inference();
+ RestconfFuture<DataGetResult> dataGET(final ServerRequest request, final Data path, final DataGetParams params) {
+ final var depth = params.depth();
final var fields = params.fields();
- return completeDataGET(inference,
- fields == null ? WriterParameters.of(params.prettyPrint(), params.depth())
- : new WriterParameters(params.prettyPrint(), params.depth(),
- translateFieldsParam(inference.modelContext(), path.schema(), fields)),
- readData(params.content(), path.instance(), params.withDefaults()), null);
+ final var writerFactory = fields == null ? NormalizedNodeWriterFactory.of(depth)
+ : new MdsalNormalizedNodeWriterFactory(
+ translateFieldsParam(path.inference().modelContext(), path.schema(), fields), depth);
+
+ return completeDataGET(readData(params.content(), path.instance(), params.withDefaults()), path, writerFactory,
+ null);
}
@Override
/**
* Translate a {@link FieldsParam} to a complete list of child nodes organized into levels, suitable for use with
- * {@link ParameterAwareNormalizedNodeWriter}.
+ * {@link RestconfNormalizedNodeWriter}.
*
* <p>
* Fields parser that stores set of {@link QName}s in each level. Because of this fact, from the output it is only
level.add(qualifiedName);
currentNode = currentMixin.childByQName(qualifiedName);
}
-
return currentNode;
}
-
}