/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2015, 2017 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
package org.opendaylight.controller.config.facade.xml.osgi;
-import com.google.common.base.Charsets;
import com.google.common.base.Preconditions;
import com.google.common.collect.BiMap;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.io.ByteStreams;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.ListenableFuture;
import java.io.IOException;
+import java.io.InputStream;
import java.lang.ref.SoftReference;
+import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.ExecutionException;
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.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.opendaylight.mdsal.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.model.repo.api.SchemaSourceException;
+import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-final class YangStoreSnapshot implements YangStoreContext, EnumResolver {
+public final class YangStoreSnapshot implements YangStoreContext, EnumResolver {
private static final class MXBeans {
private final Map<String /* Namespace from yang file */,
Map<String /* Name of module entry from yang file */, ModuleMXBeanEntry>> moduleMXBeanEntryMap;
- private final Map<QName, Map<String, ModuleMXBeanEntry>> qNamesToIdentitiesToModuleMXBeanEntries;
+ private final Map<QName, Map<String, ModuleMXBeanEntry>> namesToIdentitiesToModuleMXBeanEntries;
MXBeans(final SchemaContext schemaContext) {
LOG.trace("Resolved modules:{}", schemaContext.getModules());
// JMX generator
- Map<String, String> namespaceToPackageMapping = Maps.newHashMap();
- PackageTranslator packageTranslator = new PackageTranslator(namespaceToPackageMapping);
- Map<QName, ServiceInterfaceEntry> qNamesToSIEs = new HashMap<>();
- Map<IdentitySchemaNode, ServiceInterfaceEntry> knownSEITracker = new HashMap<>();
+ final Map<String, String> namespaceToPackageMapping = Maps.newHashMap();
+ final PackageTranslator packageTranslator = new PackageTranslator(namespaceToPackageMapping);
+ final Map<QName, ServiceInterfaceEntry> qNamesToSIEs = new HashMap<>();
+ final Map<IdentitySchemaNode, ServiceInterfaceEntry> knownSEITracker = new HashMap<>();
// create SIE structure qNamesToSIEs
- for (Module module : schemaContext.getModules()) {
- String packageName = packageTranslator.getPackageName(module);
- Map<QName, ServiceInterfaceEntry> namesToSIEntries = ServiceInterfaceEntry
+ for (final Module module : schemaContext.getModules()) {
+ final String packageName = packageTranslator.getPackageName(module);
+ final Map<QName, ServiceInterfaceEntry> namesToSIEntries = ServiceInterfaceEntry
.create(module, packageName, knownSEITracker);
- for (Entry<QName, ServiceInterfaceEntry> sieEntry : namesToSIEntries.entrySet()) {
+ for (final Entry<QName, ServiceInterfaceEntry> sieEntry : namesToSIEntries.entrySet()) {
// merge value into qNamesToSIEs
- if (qNamesToSIEs.containsKey(sieEntry.getKey()) == false) {
+ if (!qNamesToSIEs.containsKey(sieEntry.getKey())) {
qNamesToSIEs.put(sieEntry.getKey(), sieEntry.getValue());
} else {
throw new IllegalStateException("Cannot add two SIE with same qname "
}
}
- Map<String, Map<String, ModuleMXBeanEntry>> moduleMXBeanEntryMap = Maps.newHashMap();
+ final Map<String, Map<String, ModuleMXBeanEntry>> moduleMXBeanEntries = Maps.newHashMap();
- Map<QName, Map<String /* identity local name */, ModuleMXBeanEntry>> qNamesToIdentitiesToModuleMXBeanEntries = new HashMap<>();
+ final Map<QName, Map<String /* identity local name */,
+ ModuleMXBeanEntry>> qNamesToIdentitiesToModuleMXBeanEntries = new HashMap<>();
- for (Module module : schemaContext.getModules()) {
- String packageName = packageTranslator.getPackageName(module);
- TypeProviderWrapper typeProviderWrapper = new TypeProviderWrapper(
+ for (final Module module : schemaContext.getModules()) {
+ final String packageName = packageTranslator.getPackageName(module);
+ final TypeProviderWrapper typeProviderWrapper = new TypeProviderWrapper(
new TypeProviderImpl(schemaContext));
- QName qName = QName.create(module.getNamespace(), module.getRevision(), module.getName());
+ final QName qName = QName.create(module.getNamespace(), module.getRevision(), module.getName());
- Map<String /* MB identity local name */, ModuleMXBeanEntry> namesToMBEs =
+ final Map<String /* MB identity local name */, ModuleMXBeanEntry> namesToMBEs =
Collections.unmodifiableMap(ModuleMXBeanEntry.create(module, qNamesToSIEs, schemaContext,
typeProviderWrapper, packageName));
- moduleMXBeanEntryMap.put(module.getNamespace().toString(), namesToMBEs);
+ moduleMXBeanEntries.put(module.getNamespace().toString(), namesToMBEs);
qNamesToIdentitiesToModuleMXBeanEntries.put(qName, namesToMBEs);
}
- this.moduleMXBeanEntryMap = Collections.unmodifiableMap(moduleMXBeanEntryMap);
- this.qNamesToIdentitiesToModuleMXBeanEntries = Collections.unmodifiableMap(qNamesToIdentitiesToModuleMXBeanEntries);
+ this.moduleMXBeanEntryMap = Collections.unmodifiableMap(moduleMXBeanEntries);
+ this.namesToIdentitiesToModuleMXBeanEntries =
+ Collections.unmodifiableMap(qNamesToIdentitiesToModuleMXBeanEntries);
}
}
}
private MXBeans getMXBeans() {
- MXBeans mxBean = ref.get();
+ MXBeans mxBean = this.ref.get();
if (mxBean == null) {
synchronized (this) {
- mxBean = ref.get();
+ mxBean = this.ref.get();
if (mxBean == null) {
- mxBean = new MXBeans(bindingContextProvider.getSchemaContext());
- ref = new SoftReference<>(mxBean);
+ mxBean = new MXBeans(this.bindingContextProvider.getSchemaContext());
+ this.ref = new SoftReference<>(mxBean);
}
}
}
@Override
public Map<QName, Map<String, ModuleMXBeanEntry>> getQNamesToIdentitiesToModuleMXBeanEntries() {
- return getMXBeans().qNamesToIdentitiesToModuleMXBeanEntries;
+ return getMXBeans().namesToIdentitiesToModuleMXBeanEntries;
}
@Override
public Set<Module> getModules() {
- final Set<Module> modules = Sets.newHashSet(bindingContextProvider.getSchemaContext().getModules());
- for (final Module module : bindingContextProvider.getSchemaContext().getModules()) {
+ final Set<Module> modules = Sets.newHashSet(this.bindingContextProvider.getSchemaContext().getModules());
+ for (final Module module : this.bindingContextProvider.getSchemaContext().getModules()) {
modules.addAll(module.getSubmodules());
}
return modules;
}
@Override
- public String getModuleSource(final org.opendaylight.yangtools.yang.model.api.ModuleIdentifier moduleIdentifier) {
- final CheckedFuture<? extends YangTextSchemaSource, SchemaSourceException> source = sourceProvider.getSource(
- moduleIdentifier.getRevision() == null ?
- new SourceIdentifier(moduleIdentifier.getName()) :
- new SourceIdentifier(moduleIdentifier.getName(),
- QName.formattedRevision(moduleIdentifier.getRevision())));
-
+ public String getModuleSource(final SourceIdentifier moduleIdentifier) {
+ final ListenableFuture<? extends YangTextSchemaSource> source = this.sourceProvider.getSource(
+ RevisionSourceIdentifier.create(moduleIdentifier.getName(), moduleIdentifier.getRevision()));
try {
- final YangTextSchemaSource yangTextSchemaSource = source.checkedGet();
- return new String(ByteStreams.toByteArray(yangTextSchemaSource.openStream()), Charsets.UTF_8);
- } catch (SchemaSourceException | IOException e) {
+ final YangTextSchemaSource yangTextSchemaSource = source.get();
+ try (InputStream inStream = yangTextSchemaSource.openStream()) {
+ return new String(ByteStreams.toByteArray(inStream), StandardCharsets.UTF_8);
+ }
+ } catch (ExecutionException | InterruptedException | IOException e) {
LOG.warn("Unable to provide source for {}", moduleIdentifier, e);
throw new IllegalArgumentException("Unable to provide source for " + moduleIdentifier, e);
}
}
final YangStoreSnapshot other = (YangStoreSnapshot) obj;
- return Objects.equals(bindingContextProvider, other.bindingContextProvider);
+ return Objects.equals(this.bindingContextProvider, other.bindingContextProvider);
}
@Override
public int hashCode() {
- return Objects.hashCode(bindingContextProvider);
+ return Objects.hashCode(this.bindingContextProvider);
}
@Override
public String fromYang(final String enumClass, final String enumYangValue) {
- Preconditions.checkState(bindingContextProvider != null, "Binding context provider was not set yet");
- final BiMap<String, String> enumMapping = bindingContextProvider.getEnumMapping(enumClass);
+ Preconditions.checkState(this.bindingContextProvider != null, "Binding context provider was not set yet");
+ final BiMap<String, String> enumMapping = this.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);
+ 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<String, String> enumMapping = bindingContextProvider.getEnumMapping(enumClass);
+ Preconditions.checkState(this.bindingContextProvider != null, "Binding context provider was not set yet");
+ final BiMap<String, String> enumMapping = this.bindingContextProvider.getEnumMapping(enumClass);
final String javaName = enumMapping.inverse().get(enumJavaValue);
return Preconditions.checkNotNull(javaName,
"Unable to map enum value %s for enum class %s with assumed enum mapping: %s", enumJavaValue, enumClass,