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=c798da7f7629a4ac4783900a65c56895cc925543;hp=0d3370548a5de0468ac138ee244bc9b2575d0a60;hb=cd50f92c60580b546a696aab7c3ff4fbf3f9a5f0;hpb=b5c49b7c32cae050b9a91ff07c0a001d7dfb0042 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..c798da7f76 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,37 +8,48 @@ 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); private final Map> moduleMXBeanEntryMap; + Map> moduleMXBeanEntryMap; 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()); + } }