X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2FControllerContext.java;h=28e6a3c2472ee3b8723c82dc5d1050215c209bee;hp=6330c0a479caa5acf2926e5ce9820bc3a435e756;hb=3b721d88ed1083a463ecb73a6050de4bfedf1a78;hpb=f5639ec4d80dc50b71f306137dd7aa9f077973b2 diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java index 6330c0a479..28e6a3c247 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java @@ -7,6 +7,18 @@ */ package org.opendaylight.controller.sal.restconf.impl; +import com.google.common.base.Function; +import com.google.common.base.Objects; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.base.Splitter; +import com.google.common.base.Strings; +import com.google.common.collect.BiMap; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.Iterables; + import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLDecoder; @@ -55,19 +67,6 @@ import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; -import com.google.common.base.Splitter; -import com.google.common.base.Strings; -import com.google.common.collect.BiMap; -import com.google.common.collect.FluentIterable; -import com.google.common.collect.HashBiMap; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; - public class ControllerContext implements SchemaContextListener { private final static Logger LOG = LoggerFactory.getLogger( ControllerContext.class ); @@ -83,6 +82,10 @@ public class ControllerContext implements SchemaContextListener { private final static String URI_ENCODING_CHAR_SET = "ISO-8859-1"; + private static final Splitter SLASH_SPLITTER = Splitter.on('/'); + + private static final Splitter COLON_SPLITTER = Splitter.on(':'); + private final BiMap uriToModuleName = HashBiMap. create(); private final Map moduleNameToUri = uriToModuleName.inverse(); @@ -129,10 +132,8 @@ public class ControllerContext implements SchemaContextListener { final boolean toMountPointIdentifier ) { this.checkPreconditions(); - Iterable split = Splitter.on( "/" ).split( restconfInstance ); - final ArrayList encodedPathArgs = Lists. newArrayList( split ); - final List pathArgs = this.urlPathArgsDecode( encodedPathArgs ); - this.omitFirstAndLastEmptyString( pathArgs ); + final List pathArgs = urlPathArgsDecode( SLASH_SPLITTER.split( restconfInstance ) ); + omitFirstAndLastEmptyString( pathArgs ); if( pathArgs.isEmpty() ) { return null; } @@ -158,7 +159,7 @@ public class ControllerContext implements SchemaContextListener { return iiWithSchemaNode; } - private List omitFirstAndLastEmptyString( final List list ) { + private static List omitFirstAndLastEmptyString( final List list ) { if( list.isEmpty() ) { return list; } @@ -256,7 +257,7 @@ public class ControllerContext implements SchemaContextListener { public DataNodeContainer getDataNodeContainerFor( final InstanceIdentifier path ) { this.checkPreconditions(); - final List elements = path.getPath(); + final Iterable elements = path.getPathArguments(); PathArgument head = elements.iterator().next(); final QName startQName = head.getNodeType(); final Module initialModule = globalSchema.findModuleByNamespaceAndRevision( @@ -277,7 +278,7 @@ public class ControllerContext implements SchemaContextListener { public String toFullRestconfIdentifier( final InstanceIdentifier path ) { this.checkPreconditions(); - final List elements = path.getPath(); + final Iterable elements = path.getPathArguments(); final StringBuilder builder = new StringBuilder(); PathArgument head = elements.iterator().next(); final QName startQName = head.getNodeType(); @@ -562,7 +563,7 @@ public class ControllerContext implements SchemaContextListener { } String head = strings.iterator().next(); - final String nodeName = this.toNodeName( head ); + final String nodeName = toNodeName( head ); final String moduleName = ControllerContext.toModuleName( head ); DataSchemaNode targetNode = null; @@ -695,8 +696,8 @@ public class ControllerContext implements SchemaContextListener { final int keysSize = listNode.getKeyDefinition().size(); if( (strings.size() - consumed) < keysSize ) { throw new RestconfDocumentedException( - "Missing key for list \"" + listNode.getQName().getLocalName() + "\".", - ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE ); + "Missing key value for list element '" + listNode.getQName().getLocalName() + "' in the URI.", + ErrorType.PROTOCOL, ErrorTag.DATA_MISSING ); } final List uriKeyValues = strings.subList( consumed, consumed + keysSize ); @@ -805,8 +806,8 @@ public class ControllerContext implements SchemaContextListener { public boolean isInstantiatedDataSchema( final DataSchemaNode node ) { return node instanceof LeafSchemaNode || node instanceof LeafListSchemaNode || - node instanceof ContainerSchemaNode || node instanceof ListSchemaNode || - node instanceof AnyXmlSchemaNode; + node instanceof ContainerSchemaNode || node instanceof ListSchemaNode || + node instanceof AnyXmlSchemaNode; } private void addKeyValue( final HashMap map, final DataSchemaNode node, @@ -839,20 +840,20 @@ public class ControllerContext implements SchemaContextListener { private static String toModuleName( final String str ) { Preconditions. checkNotNull( str ); - if( str.contains( ":" ) ) { - final String[] args = str.split( ":" ); - if( args.length == 2 ) { - return args[0]; + if( str.indexOf( ':' ) != -1 ) { + final Iterable args = COLON_SPLITTER.split( str ); + if( Iterables.size( args ) == 2 ) { + return args.iterator().next(); } } return null; } - private String toNodeName( final String str ) { - if( str.contains( ":" ) ) { - final String[] args = str.split( ":" ); - if( args.length == 2 ) { - return args[1]; + private static String toNodeName( final String str ) { + if( str.indexOf( ':' ) != -1 ) { + final Iterable args = COLON_SPLITTER.split( str ); + if( Iterables.size( args ) == 2 ) { + return Iterables.get( args, 1 ); } } return str; @@ -860,7 +861,7 @@ public class ControllerContext implements SchemaContextListener { private QName toQName( final String name ) { final String module = toModuleName( name ); - final String node = this.toNodeName( name ); + final String node = toNodeName( name ); Set modules = globalSchema.getModules(); final Comparator comparator = new Comparator() { @@ -916,7 +917,7 @@ public class ControllerContext implements SchemaContextListener { } } - public List urlPathArgsDecode( final List strings ) { + public static List urlPathArgsDecode( final Iterable strings ) { try { List decodedPathArgs = new ArrayList(); for( final String pathArg : strings ) { @@ -998,7 +999,7 @@ public class ControllerContext implements SchemaContextListener { try { builder.append( this.toUriString( keyValues.get( key ) ) ); } catch( UnsupportedEncodingException e ) { - LOG.error( "Error parsing URI: " + keyValues.get( key ), e ); + LOG.error( "Error parsing URI: {}", keyValues.get( key ), e ); return null; } }