X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2FRestconfImpl.java;h=f44ce951550b3cd01c940739568f197cd0e8e6fd;hb=8aeb4a575b7b5988e3a50d6c9a4c05418c926fd9;hp=9dc299ddaf91155e62222378d8d5eafaabe6a2c4;hpb=dddd84ae73bdefcfb2ef1de77a98b9462eeff66d;p=controller.git diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java index 9dc299ddaf..f44ce95155 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java @@ -218,79 +218,89 @@ public class RestconfImpl implements RestconfService { null, schemaContext), moduleContainerBuilder.build()); } + /** + * Valid only for mount point + */ @Override - public StructuredData getAvailableStreams(final UriInfo uriInfo) { - final Set availableStreams = Notificator.getStreamNames(); - - final List> streamsAsData = new ArrayList>(); - final Module restconfModule = getRestconfModule(); - final DataSchemaNode streamSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(restconfModule, - Draft02.RestConfModule.STREAM_LIST_SCHEMA_NODE); - for (final String streamName : availableStreams) { - streamsAsData.add(toStreamCompositeNode(streamName, streamSchemaNode)); + public NormalizedNodeContext getModules(final String identifier, final UriInfo uriInfo) { + Preconditions.checkNotNull(identifier); + if ( ! identifier.contains(ControllerContext.MOUNT)) { + final String errMsg = "URI has bad format. If modules behind mount point should be showed," + + " URI has to end with " + ControllerContext.MOUNT; + throw new RestconfDocumentedException(errMsg, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); } - final DataSchemaNode streamsSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(restconfModule, - Draft02.RestConfModule.STREAMS_CONTAINER_SCHEMA_NODE); - final QName qName = streamsSchemaNode.getQName(); - final CompositeNode streamsNode = NodeFactory.createImmutableCompositeNode(qName, null, streamsAsData); - return new StructuredData(streamsNode, streamsSchemaNode, null, parsePrettyPrintParameter(uriInfo)); - } + final InstanceIdentifierContext mountPointIdentifier = controllerContext.toMountPointIdentifier(identifier); + final DOMMountPoint mountPoint = mountPointIdentifier.getMountPoint(); + final Set modules = controllerContext.getAllModules(mountPoint); + final SchemaContext schemaContext = mountPoint.getSchemaContext(); + final MapNode mountPointModulesMap = makeModuleMapNode(modules); - @Override - public StructuredData getModules(final String identifier, final UriInfo uriInfo) { - Set modules = null; - DOMMountPoint mountPoint = null; - if (identifier.contains(ControllerContext.MOUNT)) { - final InstanceIdentifierContext mountPointIdentifier = controllerContext.toMountPointIdentifier(identifier); - mountPoint = mountPointIdentifier.getMountPoint(); - modules = controllerContext.getAllModules(mountPoint); - } else { - throw new RestconfDocumentedException( - "URI has bad format. If modules behind mount point should be showed, URI has to end with " - + ControllerContext.MOUNT, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); - } - - final List> modulesAsData = new ArrayList>(); final Module restconfModule = getRestconfModule(); - final DataSchemaNode moduleSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(restconfModule, - Draft02.RestConfModule.MODULE_LIST_SCHEMA_NODE); + final DataSchemaNode modulesSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode( + restconfModule, Draft02.RestConfModule.MODULES_CONTAINER_SCHEMA_NODE); + Preconditions.checkState(modulesSchemaNode instanceof ContainerSchemaNode); - for (final Module module : modules) { - modulesAsData.add(toModuleCompositeNode(module, moduleSchemaNode)); - } + final DataContainerNodeAttrBuilder moduleContainerBuilder = + Builders.containerBuilder((ContainerSchemaNode) modulesSchemaNode); + moduleContainerBuilder.withChild(mountPointModulesMap); - final DataSchemaNode modulesSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(restconfModule, - Draft02.RestConfModule.MODULES_CONTAINER_SCHEMA_NODE); - final QName qName = modulesSchemaNode.getQName(); - final CompositeNode modulesNode = NodeFactory.createImmutableCompositeNode(qName, null, modulesAsData); - return new StructuredData(modulesNode, modulesSchemaNode, mountPoint, parsePrettyPrintParameter(uriInfo)); + return new NormalizedNodeContext(new InstanceIdentifierContext(null, modulesSchemaNode, + mountPoint, schemaContext), moduleContainerBuilder.build()); } @Override - public StructuredData getModule(final String identifier, final UriInfo uriInfo) { + public NormalizedNodeContext getModule(final String identifier, final UriInfo uriInfo) { + Preconditions.checkNotNull(identifier); final QName moduleNameAndRevision = getModuleNameAndRevision(identifier); Module module = null; DOMMountPoint mountPoint = null; + final SchemaContext schemaContext; if (identifier.contains(ControllerContext.MOUNT)) { final InstanceIdentifierContext mountPointIdentifier = controllerContext.toMountPointIdentifier(identifier); mountPoint = mountPointIdentifier.getMountPoint(); module = controllerContext.findModuleByNameAndRevision(mountPoint, moduleNameAndRevision); + schemaContext = mountPoint.getSchemaContext(); } else { module = controllerContext.findModuleByNameAndRevision(moduleNameAndRevision); + schemaContext = controllerContext.getGlobalSchema(); } if (module == null) { - throw new RestconfDocumentedException("Module with name '" + moduleNameAndRevision.getLocalName() - + "' and revision '" + moduleNameAndRevision.getRevision() + "' was not found.", - ErrorType.PROTOCOL, ErrorTag.UNKNOWN_ELEMENT); + final String errMsg = "Module with name '" + moduleNameAndRevision.getLocalName() + + "' and revision '" + moduleNameAndRevision.getRevision() + "' was not found."; + throw new RestconfDocumentedException(errMsg, ErrorType.PROTOCOL, ErrorTag.UNKNOWN_ELEMENT); } final Module restconfModule = getRestconfModule(); - final DataSchemaNode moduleSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(restconfModule, - Draft02.RestConfModule.MODULE_LIST_SCHEMA_NODE); - final CompositeNode moduleNode = toModuleCompositeNode(module, moduleSchemaNode); - return new StructuredData(moduleNode, moduleSchemaNode, mountPoint, parsePrettyPrintParameter(uriInfo)); + final Set modules = Collections.singleton(module); + final MapNode moduleMap = makeModuleMapNode(modules); + + final DataSchemaNode moduleSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode( + restconfModule, Draft02.RestConfModule.MODULE_LIST_SCHEMA_NODE); + Preconditions.checkState(moduleSchemaNode instanceof ListSchemaNode); + + return new NormalizedNodeContext(new InstanceIdentifierContext(null, moduleSchemaNode, mountPoint, + schemaContext), moduleMap); + } + + @Override + public StructuredData getAvailableStreams(final UriInfo uriInfo) { + final Set availableStreams = Notificator.getStreamNames(); + + final List> streamsAsData = new ArrayList>(); + final Module restconfModule = getRestconfModule(); + final DataSchemaNode streamSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(restconfModule, + Draft02.RestConfModule.STREAM_LIST_SCHEMA_NODE); + for (final String streamName : availableStreams) { + streamsAsData.add(toStreamCompositeNode(streamName, streamSchemaNode)); + } + + final DataSchemaNode streamsSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode(restconfModule, + Draft02.RestConfModule.STREAMS_CONTAINER_SCHEMA_NODE); + final QName qName = streamsSchemaNode.getQName(); + final CompositeNode streamsNode = NodeFactory.createImmutableCompositeNode(qName, null, streamsAsData); + return new StructuredData(streamsNode, streamsSchemaNode, null, parsePrettyPrintParameter(uriInfo)); } @Override