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=3834a383db8e94da989f7b1bd4076285cd250935;hb=cb5b61610718a37853429c308652bf7a8733a30f;hp=5a16c04aedb1fb7ed3d44b77bd1595897215d73f;hpb=03ee21b4d6ae3dd6fd3a6991253e877dc96fabf5;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 5a16c04aed..3834a383db 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 @@ -15,7 +15,6 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; - import java.net.URI; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -28,12 +27,10 @@ import java.util.HashMap; import java.util.List; import java.util.Set; import java.util.concurrent.Future; - import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; - import org.apache.commons.lang3.StringUtils; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.sal.core.api.mount.MountInstance; @@ -78,6 +75,21 @@ import org.opendaylight.yangtools.yang.parser.builder.impl.ContainerSchemaNodeBu import org.opendaylight.yangtools.yang.parser.builder.impl.LeafSchemaNodeBuilder; public class RestconfImpl implements RestconfService { + private enum UriParameters { + PRETTY_PRINT( "prettyPrint"), + DEPTH( "depth"); + + private String uriParameterName; + UriParameters(String uriParameterName) { + this.uriParameterName = uriParameterName; + } + + @Override + public String toString() { + return uriParameterName; + } + } + private final static RestconfImpl INSTANCE = new RestconfImpl(); private static final int CHAR_NOT_FOUND = -1; @@ -110,7 +122,7 @@ public class RestconfImpl implements RestconfService { } @Override - public StructuredData getModules() { + public StructuredData getModules(final UriInfo uriInfo) { final Module restconfModule = this.getRestconfModule(); final List> modulesAsData = new ArrayList>(); @@ -127,11 +139,11 @@ public class RestconfImpl implements RestconfService { restconfModule, Draft02.RestConfModule.MODULES_CONTAINER_SCHEMA_NODE); QName qName = modulesSchemaNode.getQName(); final CompositeNode modulesNode = NodeFactory.createImmutableCompositeNode(qName, null, modulesAsData); - return new StructuredData(modulesNode, modulesSchemaNode, null); + return new StructuredData(modulesNode, modulesSchemaNode, null,parsePrettyPrintParameter( uriInfo )); } @Override - public StructuredData getAvailableStreams() { + public StructuredData getAvailableStreams(final UriInfo uriInfo) { Set availableStreams = Notificator.getStreamNames(); final List> streamsAsData = new ArrayList>(); @@ -146,11 +158,11 @@ public class RestconfImpl implements RestconfService { restconfModule, Draft02.RestConfModule.STREAMS_CONTAINER_SCHEMA_NODE); QName qName = streamsSchemaNode.getQName(); final CompositeNode streamsNode = NodeFactory.createImmutableCompositeNode(qName, null, streamsAsData); - return new StructuredData(streamsNode, streamsSchemaNode, null); + return new StructuredData(streamsNode, streamsSchemaNode, null,parsePrettyPrintParameter( uriInfo )); } @Override - public StructuredData getModules(final String identifier) { + public StructuredData getModules(final String identifier,final UriInfo uriInfo) { Set modules = null; MountInstance mountPoint = null; if (identifier.contains(ControllerContext.MOUNT)) { @@ -178,11 +190,11 @@ public class RestconfImpl implements RestconfService { restconfModule, Draft02.RestConfModule.MODULES_CONTAINER_SCHEMA_NODE); QName qName = modulesSchemaNode.getQName(); final CompositeNode modulesNode = NodeFactory.createImmutableCompositeNode(qName, null, modulesAsData); - return new StructuredData(modulesNode, modulesSchemaNode, mountPoint); + return new StructuredData(modulesNode, modulesSchemaNode, mountPoint,parsePrettyPrintParameter( uriInfo )); } @Override - public StructuredData getModule(final String identifier) { + public StructuredData getModule(final String identifier,final UriInfo uriInfo) { final QName moduleNameAndRevision = this.getModuleNameAndRevision(identifier); Module module = null; MountInstance mountPoint = null; @@ -207,17 +219,17 @@ public class RestconfImpl implements RestconfService { final DataSchemaNode moduleSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode( restconfModule, Draft02.RestConfModule.MODULE_LIST_SCHEMA_NODE); final CompositeNode moduleNode = this.toModuleCompositeNode(module, moduleSchemaNode); - return new StructuredData(moduleNode, moduleSchemaNode, mountPoint); + return new StructuredData(moduleNode, moduleSchemaNode, mountPoint,parsePrettyPrintParameter( uriInfo )); } @Override - public StructuredData getOperations() { + public StructuredData getOperations(final UriInfo uriInfo) { Set allModules = this.controllerContext.getAllModules(); - return this.operationsFromModulesToStructuredData(allModules, null); + return this.operationsFromModulesToStructuredData(allModules, null,parsePrettyPrintParameter(uriInfo)); } @Override - public StructuredData getOperations(final String identifier) { + public StructuredData getOperations(final String identifier,final UriInfo uriInfo) { Set modules = null; MountInstance mountPoint = null; if (identifier.contains(ControllerContext.MOUNT)) { @@ -232,11 +244,11 @@ public class RestconfImpl implements RestconfService { ControllerContext.MOUNT, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE ); } - return this.operationsFromModulesToStructuredData(modules, mountPoint); + return this.operationsFromModulesToStructuredData(modules, mountPoint,parsePrettyPrintParameter(uriInfo)); } private StructuredData operationsFromModulesToStructuredData(final Set modules, - final MountInstance mountPoint) { + final MountInstance mountPoint,boolean prettyPrint) { final List> operationsAsData = new ArrayList>(); Module restconfModule = this.getRestconfModule(); final DataSchemaNode operationsSchemaNode = controllerContext.getRestconfModuleRestConfSchemaNode( @@ -269,7 +281,7 @@ public class RestconfImpl implements RestconfService { final CompositeNode operationsNode = NodeFactory.createImmutableCompositeNode(qName, null, operationsAsData); ContainerSchemaNode schemaNode = fakeOperationsSchemaNode.build(); - return new StructuredData(operationsNode, schemaNode, mountPoint); + return new StructuredData(operationsNode, schemaNode, mountPoint,prettyPrint); } private Module getRestconfModule() { @@ -389,18 +401,18 @@ public class RestconfImpl implements RestconfService { } @Override - public StructuredData invokeRpc(final String identifier, final CompositeNode payload) { + public StructuredData invokeRpc(final String identifier, final CompositeNode payload,final UriInfo uriInfo) { final RpcExecutor rpc = this.resolveIdentifierInInvokeRpc(identifier); QName rpcName = rpc.getRpcDefinition().getQName(); URI rpcNamespace = rpcName.getNamespace(); if (Objects.equal(rpcNamespace.toString(), SAL_REMOTE_NAMESPACE) && Objects.equal(rpcName.getLocalName(), SAL_REMOTE_RPC_SUBSRCIBE)) { - return invokeSalRemoteRpcSubscribeRPC(payload, rpc.getRpcDefinition()); + return invokeSalRemoteRpcSubscribeRPC(payload, rpc.getRpcDefinition(),parsePrettyPrintParameter(uriInfo)); } validateInput( rpc.getRpcDefinition().getInput(), payload ); - return callRpc(rpc, payload); + return callRpc(rpc, payload,parsePrettyPrintParameter(uriInfo)); } private void validateInput(final DataSchemaNode inputSchema, final CompositeNode payload) { @@ -426,7 +438,7 @@ public class RestconfImpl implements RestconfService { } private StructuredData invokeSalRemoteRpcSubscribeRPC(final CompositeNode payload, - final RpcDefinition rpc) { + final RpcDefinition rpc,final boolean prettyPrint) { final CompositeNode value = this.normalizeNode(payload, rpc.getInput(), null); final SimpleNode pathNode = value == null ? null : value.getFirstSimpleByName( QName.create(rpc.getQName(), "path") ); @@ -463,16 +475,16 @@ public class RestconfImpl implements RestconfService { Notificator.createListener(pathIdentifier, streamName); } - return new StructuredData(responseData, rpc.getOutput(), null); + return new StructuredData(responseData, rpc.getOutput(), null,prettyPrint); } @Override - public StructuredData invokeRpc(final String identifier, final String noPayload) { + public StructuredData invokeRpc(final String identifier, final String noPayload, final UriInfo uriInfo) { if (StringUtils.isNotBlank(noPayload)) { throw new RestconfDocumentedException( "Content must be empty.", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE ); } - return invokeRpc( identifier, (CompositeNode)null ); + return invokeRpc( identifier, (CompositeNode)null,uriInfo); } private RpcExecutor resolveIdentifierInInvokeRpc(final String identifier) { @@ -516,7 +528,7 @@ public class RestconfImpl implements RestconfService { } - private StructuredData callRpc(final RpcExecutor rpcExecutor, final CompositeNode payload) { + private StructuredData callRpc(final RpcExecutor rpcExecutor, final CompositeNode payload,boolean prettyPrint) { if (rpcExecutor == null) { throw new RestconfDocumentedException( "RPC does not exist.", ErrorType.RPC, ErrorTag.UNKNOWN_ELEMENT ); @@ -547,7 +559,7 @@ public class RestconfImpl implements RestconfService { return null; //no output, nothing to send back. } - return new StructuredData(rpcResult.getResult(), rpc.getOutput(), null); + return new StructuredData(rpcResult.getResult(), rpc.getOutput(), null,prettyPrint); } private void checkRpcSuccessAndThrowException(final RpcResult rpcResult) { @@ -570,7 +582,7 @@ public class RestconfImpl implements RestconfService { } @Override - public StructuredData readConfigurationData(final String identifier, final UriInfo info) { + public StructuredData readConfigurationData(final String identifier, final UriInfo uriInfo) { final InstanceIdWithSchemaNode iiWithData = this.controllerContext.toInstanceIdentifier(identifier); CompositeNode data = null; MountInstance mountPoint = iiWithData.getMountPoint(); @@ -581,8 +593,9 @@ public class RestconfImpl implements RestconfService { data = broker.readConfigurationData(iiWithData.getInstanceIdentifier()); } - data = pruneDataAtDepth( data, parseDepthParameter( info ) ); - return new StructuredData(data, iiWithData.getSchemaNode(), iiWithData.getMountPoint()); + data = pruneDataAtDepth( data, parseDepthParameter( uriInfo ) ); + boolean prettyPrintMode = parsePrettyPrintParameter( uriInfo ); + return new StructuredData(data, iiWithData.getSchemaNode(), iiWithData.getMountPoint(),prettyPrintMode); } @SuppressWarnings("unchecked") @@ -607,7 +620,7 @@ public class RestconfImpl implements RestconfService { } private Integer parseDepthParameter( final UriInfo info ) { - String param = info.getQueryParameters( false ).getFirst( "depth" ); + String param = info.getQueryParameters( false ).getFirst( UriParameters.DEPTH.toString() ); if( Strings.isNullOrEmpty( param ) || "unbounded".equals( param ) ) { return null; } @@ -643,7 +656,13 @@ public class RestconfImpl implements RestconfService { } data = pruneDataAtDepth( data, parseDepthParameter( info ) ); - return new StructuredData(data, iiWithData.getSchemaNode(), mountPoint); + boolean prettyPrintMode = parsePrettyPrintParameter( info ); + return new StructuredData(data, iiWithData.getSchemaNode(), mountPoint,prettyPrintMode); + } + + private boolean parsePrettyPrintParameter(UriInfo info) { + String param = info.getQueryParameters(false).getFirst(UriParameters.PRETTY_PRINT.toString()); + return Boolean.parseBoolean(param); } @Override