X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Fosgi%2FYangStoreSnapshot.java;h=803a7c3ce3c5a6eccb029d328d1974f1cb033c3d;hp=0d3370548a5de0468ac138ee244bc9b2575d0a60;hb=1a43f55c49d91816751cec1825c40d0a90f8bd8b;hpb=c64ef5f44f131976c20fcf8ced56627f81091838 diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreSnapshot.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreSnapshot.java index 0d3370548a..803a7c3ce3 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreSnapshot.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreSnapshot.java @@ -8,25 +8,34 @@ package org.opendaylight.controller.netconf.confignetconfconnector.osgi; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.collect.BiMap; +import com.google.common.collect.Iterables; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.NoSuchElementException; import java.util.Set; import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.controller.config.yangjmxgenerator.PackageTranslator; import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry; import org.opendaylight.controller.config.yangjmxgenerator.TypeProviderWrapper; +import org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext; import org.opendaylight.yangtools.sal.binding.yang.types.TypeProviderImpl; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleIdentifierImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class YangStoreSnapshot implements YangStoreContext { +final class YangStoreSnapshot implements YangStoreContext, EnumResolver { private static final Logger LOG = LoggerFactory.getLogger(YangStoreSnapshot.class); @@ -37,8 +46,10 @@ final class YangStoreSnapshot implements YangStoreContext { private final Map> qNamesToIdentitiesToModuleMXBeanEntries; private final SchemaContext schemaContext; + private final BindingRuntimeContext bindingContextProvider; - public YangStoreSnapshot(final SchemaContext resolveSchemaContext) { + public YangStoreSnapshot(final SchemaContext resolveSchemaContext, final BindingRuntimeContext bindingContextProvider) { + this.bindingContextProvider = bindingContextProvider; LOG.trace("Resolved modules:{}", resolveSchemaContext.getModules()); this.schemaContext = resolveSchemaContext; // JMX generator @@ -99,12 +110,36 @@ final class YangStoreSnapshot implements YangStoreContext { @Override public Set getModules() { - return schemaContext.getModules(); + final Set modules = Sets.newHashSet(schemaContext.getModules()); + for (final Module module : schemaContext.getModules()) { + modules.addAll(module.getSubmodules()); + } + return modules; } @Override public String getModuleSource(final org.opendaylight.yangtools.yang.model.api.ModuleIdentifier moduleIdentifier) { - return schemaContext.getModuleSource(moduleIdentifier).get(); + final Optional moduleSource = schemaContext.getModuleSource(moduleIdentifier); + if(moduleSource.isPresent()) { + return moduleSource.get(); + } else { + try { + return Iterables.find(getModules(), new Predicate() { + @Override + public boolean apply(final Module input) { + final ModuleIdentifierImpl id = new ModuleIdentifierImpl(input.getName(), Optional.fromNullable(input.getNamespace()), Optional.fromNullable(input.getRevision())); + return id.equals(moduleIdentifier); + } + }).getSource(); + } catch (final NoSuchElementException e) { + throw new IllegalArgumentException("Source for yang module " + moduleIdentifier + " not found", e); + } + } + } + + @Override + public EnumResolver getEnumResolver() { + return this; } @Override @@ -124,4 +159,21 @@ final class YangStoreSnapshot implements YangStoreContext { public int hashCode() { return schemaContext != null ? schemaContext.hashCode() : 0; } + + @Override + public String fromYang(final String enumClass, final String enumYangValue) { + Preconditions.checkState(bindingContextProvider != null, "Binding context provider was not set yet"); + final BiMap enumMapping = bindingContextProvider.getEnumMapping(enumClass); + final String javaName = enumMapping.get(enumYangValue); + return Preconditions.checkNotNull(javaName, "Unable to resolve enum value %s for enum class %s with assumed enum mapping: %s", enumYangValue, enumClass, enumMapping); + } + + @Override + public String toYang(final String enumClass, final String enumJavaValue) { + Preconditions.checkState(bindingContextProvider != null, "Binding context provider was not set yet"); + final BiMap enumMapping = bindingContextProvider.getEnumMapping(enumClass); + final String javaName = enumMapping.inverse().get(enumJavaValue); + return Preconditions.checkNotNull(javaName, "Unable to map enumcd .." + + "cd value %s for enum class %s with assumed enum mapping: %s", enumJavaValue, enumClass, enumMapping.inverse()); + } }