X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2FControllerContext.java;h=39f4eef657bd0d06d42c7dd7c6cbbb222a97c856;hb=eb887b1c2c8cd2768f8b4c2ed2b5054f97798466;hp=0a67c84d8b2b04c56a31fa2d7e9dd2e3e8821934;hpb=72382540b7780b0083e05f148300dd1f3f47b687;p=controller.git 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 0a67c84d8b..39f4eef657 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 @@ -15,11 +15,9 @@ 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.ImmutableMap; import com.google.common.collect.Iterables; - import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLDecoder; @@ -28,28 +26,25 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; - import javax.ws.rs.core.Response.Status; - -import org.opendaylight.controller.sal.core.api.mount.MountInstance; -import org.opendaylight.controller.sal.core.api.mount.MountService; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.rest.api.Draft02; import org.opendaylight.controller.sal.rest.impl.RestUtil; import org.opendaylight.controller.sal.restconf.impl.RestconfError.ErrorTag; import org.opendaylight.controller.sal.restconf.impl.RestconfError.ErrorType; import org.opendaylight.yangtools.concepts.Codec; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.InstanceIdentifierBuilder; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifier; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; import org.opendaylight.yangtools.yang.model.api.ChoiceNode; @@ -94,13 +89,13 @@ public class ControllerContext implements SchemaContextListener { new AtomicReference<>(Collections.emptyMap()); private volatile SchemaContext globalSchema; - private volatile MountService mountService; + private volatile DOMMountPointService mountService; public void setGlobalSchema(final SchemaContext globalSchema) { this.globalSchema = globalSchema; } - public void setMountService(final MountService mountService) { + public void setMountService(final DOMMountPointService mountService) { this.mountService = mountService; } @@ -145,7 +140,7 @@ public class ControllerContext implements SchemaContextListener { ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); } - InstanceIdentifierBuilder builder = InstanceIdentifier.builder(); + InstanceIdentifierBuilder builder = YangInstanceIdentifier.builder(); Module latestModule = this.getLatestModule(globalSchema, startModule); InstanceIdWithSchemaNode iiWithSchemaNode = this.collectPathArguments(builder, pathArgs, latestModule, null, toMountPointIdentifier); @@ -210,7 +205,7 @@ public class ControllerContext implements SchemaContextListener { return this.getLatestModule(globalSchema, moduleName); } - public Module findModuleByName(final MountInstance mountPoint, final String moduleName) { + public Module findModuleByName(final DOMMountPoint mountPoint, final String moduleName) { Preconditions.checkArgument(moduleName != null && mountPoint != null); final SchemaContext mountPointSchema = mountPoint.getSchemaContext(); @@ -225,7 +220,7 @@ public class ControllerContext implements SchemaContextListener { return moduleSchemas == null ? null : this.filterLatestModule(moduleSchemas); } - public Module findModuleByNamespace(final MountInstance mountPoint, final URI namespace) { + public Module findModuleByNamespace(final DOMMountPoint mountPoint, final URI namespace) { Preconditions.checkArgument(namespace != null && mountPoint != null); final SchemaContext mountPointSchema = mountPoint.getSchemaContext(); @@ -240,7 +235,7 @@ public class ControllerContext implements SchemaContextListener { return globalSchema.findModuleByName(module.getLocalName(), module.getRevision()); } - public Module findModuleByNameAndRevision(final MountInstance mountPoint, final QName module) { + public Module findModuleByNameAndRevision(final DOMMountPoint mountPoint, final QName module) { this.checkPreconditions(); Preconditions.checkArgument(module != null && module.getLocalName() != null && module.getRevision() != null && mountPoint != null); @@ -250,7 +245,7 @@ public class ControllerContext implements SchemaContextListener { module.getRevision()); } - public DataNodeContainer getDataNodeContainerFor(final InstanceIdentifier path) { + public DataNodeContainer getDataNodeContainerFor(final YangInstanceIdentifier path) { this.checkPreconditions(); final Iterable elements = path.getPathArguments(); @@ -262,7 +257,7 @@ public class ControllerContext implements SchemaContextListener { for (final PathArgument element : elements) { QName _nodeType = element.getNodeType(); final DataSchemaNode potentialNode = ControllerContext.childByQName(node, _nodeType); - if (potentialNode == null || !this.isListOrContainer(potentialNode)) { + if (potentialNode == null || !ControllerContext.isListOrContainer(potentialNode)) { return null; } node = (DataNodeContainer) potentialNode; @@ -271,7 +266,7 @@ public class ControllerContext implements SchemaContextListener { return node; } - public String toFullRestconfIdentifier(final InstanceIdentifier path) { + public String toFullRestconfIdentifier(final YangInstanceIdentifier path) { this.checkPreconditions(); final Iterable elements = path.getPathArguments(); @@ -284,7 +279,7 @@ public class ControllerContext implements SchemaContextListener { for (final PathArgument element : elements) { QName _nodeType = element.getNodeType(); final DataSchemaNode potentialNode = ControllerContext.childByQName(node, _nodeType); - if (!this.isListOrContainer(potentialNode)) { + if (!ControllerContext.isListOrContainer(potentialNode)) { return null; } node = ((DataNodeContainer) potentialNode); @@ -309,7 +304,7 @@ public class ControllerContext implements SchemaContextListener { return moduleName; } - public String findModuleNameByNamespace(final MountInstance mountPoint, final URI namespace) { + public String findModuleNameByNamespace(final DOMMountPoint mountPoint, final URI namespace) { final Module module = this.findModuleByNamespace(mountPoint, namespace); return module == null ? null : module.getName(); } @@ -327,12 +322,12 @@ public class ControllerContext implements SchemaContextListener { return namespace; } - public URI findNamespaceByModuleName(final MountInstance mountPoint, final String moduleName) { + public URI findNamespaceByModuleName(final DOMMountPoint mountPoint, final String moduleName) { final Module module = this.findModuleByName(mountPoint, moduleName); return module == null ? null : module.getNamespace(); } - public Set getAllModules(final MountInstance mountPoint) { + public Set getAllModules(final DOMMountPoint mountPoint) { this.checkPreconditions(); SchemaContext schemaContext = mountPoint == null ? null : mountPoint.getSchemaContext(); @@ -366,7 +361,7 @@ public class ControllerContext implements SchemaContextListener { return builder.toString(); } - public CharSequence toRestconfIdentifier(final MountInstance mountPoint, final QName qname) { + public CharSequence toRestconfIdentifier(final DOMMountPoint mountPoint, final QName qname) { if (mountPoint == null) { return null; } @@ -511,9 +506,9 @@ public class ControllerContext implements SchemaContextListener { DataSchemaNode ret = container.getDataChildByName(name); if (ret == null) { for (final DataSchemaNode node : container.getChildNodes()) { - if ((node instanceof ChoiceCaseNode)) { - final ChoiceCaseNode caseNode = ((ChoiceCaseNode) node); - DataSchemaNode childByQName = ControllerContext.childByQName(caseNode, name); + if ((node instanceof ChoiceNode)) { + final ChoiceNode choiceNode = ((ChoiceNode) node); + DataSchemaNode childByQName = ControllerContext.childByQName(choiceNode, name); if (childByQName != null) { return childByQName; } @@ -528,7 +523,7 @@ public class ControllerContext implements SchemaContextListener { } private InstanceIdWithSchemaNode collectPathArguments(final InstanceIdentifierBuilder builder, - final List strings, final DataNodeContainer parentNode, final MountInstance mountPoint, + final List strings, final DataNodeContainer parentNode, final DOMMountPoint mountPoint, final boolean returnJustMountPoint) { Preconditions.> checkNotNull(strings); @@ -559,13 +554,14 @@ public class ControllerContext implements SchemaContextListener { ErrorType.APPLICATION, ErrorTag.OPERATION_NOT_SUPPORTED); } - final InstanceIdentifier partialPath = builder.toInstance(); - final MountInstance mount = mountService.getMountPoint(partialPath); - if (mount == null) { + final YangInstanceIdentifier partialPath = builder.toInstance(); + final Optional mountOpt = mountService.getMountPoint(partialPath); + if (!mountOpt.isPresent()) { LOG.debug("Instance identifier to missing mount point: {}", partialPath); throw new RestconfDocumentedException("Mount point does not exist.", ErrorType.PROTOCOL, ErrorTag.UNKNOWN_ELEMENT); } + DOMMountPoint mount = mountOpt.get(); final SchemaContext mountPointSchema = mount.getSchemaContext(); if (mountPointSchema == null) { @@ -574,12 +570,12 @@ public class ControllerContext implements SchemaContextListener { } if (returnJustMountPoint) { - InstanceIdentifier instance = InstanceIdentifier.builder().toInstance(); + YangInstanceIdentifier instance = YangInstanceIdentifier.builder().toInstance(); return new InstanceIdWithSchemaNode(instance, mountPointSchema, mount); } if (strings.size() == 1) { - InstanceIdentifier instance = InstanceIdentifier.builder().toInstance(); + YangInstanceIdentifier instance = YangInstanceIdentifier.builder().toInstance(); return new InstanceIdWithSchemaNode(instance, mountPointSchema, mount); } @@ -598,7 +594,7 @@ public class ControllerContext implements SchemaContextListener { } List subList = strings.subList(1, strings.size()); - return this.collectPathArguments(InstanceIdentifier.builder(), subList, moduleBehindMountPoint, mount, + return this.collectPathArguments(YangInstanceIdentifier.builder(), subList, moduleBehindMountPoint, mount, returnJustMountPoint); } @@ -650,7 +646,7 @@ public class ControllerContext implements SchemaContextListener { targetNode = potentialSchemaNodes.iterator().next(); } - if (!this.isListOrContainer(targetNode)) { + if (!ControllerContext.isListOrContainer(targetNode)) { throw new RestconfDocumentedException("URI has bad format. Node \"" + head + "\" must be Container or List yang type.", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); } @@ -767,7 +763,7 @@ public class ControllerContext implements SchemaContextListener { } private void addKeyValue(final HashMap map, final DataSchemaNode node, final String uriValue, - final MountInstance mountPoint) { + final DOMMountPoint mountPoint) { Preconditions. checkNotNull(uriValue); Preconditions.checkArgument((node instanceof LeafSchemaNode)); @@ -824,34 +820,8 @@ public class ControllerContext implements SchemaContextListener { private QName toQName(final String name) { final String module = toModuleName(name); final String node = toNodeName(name); - Set modules = globalSchema.getModules(); - - final Comparator comparator = new Comparator() { - @Override - public int compare(final Module o1, final Module o2) { - return o1.getRevision().compareTo(o2.getRevision()); - } - }; - - List sorted = new ArrayList(modules); - Collections. sort(new ArrayList(modules), comparator); - - final Function transform = new Function() { - @Override - public QName apply(final Module m) { - return QName.create(m.getNamespace(), m.getRevision(), m.getName()); - } - }; - - final Predicate findFirst = new Predicate() { - @Override - public boolean apply(final QName qn) { - return Objects.equal(module, qn.getLocalName()); - } - }; - - Optional namespace = FluentIterable.from(sorted).transform(transform).firstMatch(findFirst); - return namespace.isPresent() ? QName.create(namespace.get(), node) : null; + final Module m = globalSchema.findModuleByName(module, null); + return m == null ? null : QName.create(m.getQNameModule(), node); } private static boolean isListOrContainer(final DataSchemaNode node) {