diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2017-06-30 12:46:56 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-06-30 13:15:59 +0000 |
commit | 84ff4e5fd52c064437d0b6dcf43b2223f440b3c5 (patch) | |
tree | 45485b3df79423a42922c946724bdc55ee075067 /infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema | |
parent | a90863760d1ae1a92520ce29841aec600d25a83a (diff) |
HONEYCOMB-373 - Separate minimal distribution modules to core module
Change-Id: I5278f91ea06f57c84b44a8458ef44469ebd0cf84
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema')
8 files changed, 0 insertions, 542 deletions
diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/ModuleInfoBackedCtxProvider.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/ModuleInfoBackedCtxProvider.java deleted file mode 100644 index e2d0fbfaa..000000000 --- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/ModuleInfoBackedCtxProvider.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.infra.distro.schema; - -import static io.fd.honeycomb.infra.distro.schema.YangModulesProvider.YangModules; - -import com.google.common.base.MoreObjects; -import com.google.inject.Inject; -import io.fd.honeycomb.infra.distro.ProviderTrait; -import java.util.stream.Collectors; -import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public final class ModuleInfoBackedCtxProvider extends ProviderTrait<ModuleInfoBackedContext> { - private static final Logger LOG = LoggerFactory.getLogger(ModuleInfoBackedCtxProvider.class); - - // optional in sense that list of modules inside can be empty if none was found - @Inject - private YangModules moduleInfos; - - @Override - protected ModuleInfoBackedContext create() { - ModuleInfoBackedContext create = ModuleInfoBackedContext.create(); - create.addModuleInfos(moduleInfos.getYangBindings().stream() - .map(YangModelBindingProvider::getModuleInfo) - .collect(Collectors.toList())); - LOG.debug("ModuleInfoBackedContext created from {}", moduleInfos); - return create; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this).add("writerFactories", moduleInfos).toString(); - } -} diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/ResourceLoader.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/ResourceLoader.java deleted file mode 100644 index c851dab1b..000000000 --- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/ResourceLoader.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2017 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.infra.distro.schema; - -import static com.google.common.base.Preconditions.checkNotNull; -import static java.lang.String.format; - -import com.google.common.base.Charsets; -import com.google.common.base.Strings; -import com.google.common.io.Resources; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.Collections; -import java.util.Set; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.stream.Collectors; -import org.apache.commons.io.IOUtils; - -interface ResourceLoader { - - default Set<String> loadResourceContentsOnPath(final String path) { - final URL folderUrl = getClass().getClassLoader().getResource(path); - checkNotNull(folderUrl, "Resources %s not found", path); - - if (ResourceLoaderIml.urlToUri(folderUrl).getScheme().equals("jar")) { - return ResourceLoaderIml.readFromJar(path, folderUrl); - } else { - return ResourceLoaderIml.readFromFolder(folderUrl); - } - - } - - final class ResourceLoaderIml { - - private static Set<String> readFromFolder(final URL folderUrl) { - final File folder = new File(folderUrl.getPath()); - final File[] files = checkNotNull(folder.listFiles(), "No files present on path %s", folderUrl); - return Arrays.stream(files) - .map(ResourceLoaderIml::fileToUrl) - .map(ResourceLoaderIml::urlToContentString) - .flatMap(content -> Arrays.stream(content.split(System.lineSeparator()))) - .filter(ResourceLoaderIml::filterNonEmpty) - .collect(Collectors.toSet()); - } - - private static Set<String> readFromJar(final String path, final URL url) { - final String uriString = urlToUri(url).toString(); - final String fileReference = extractJarFilePath(uriString); - try (JarFile jar = new JarFile(new File(fileReference))) { - return Collections.list(jar.entries()) - .stream() - .filter(jarEntry -> jarEntry.getName().contains(path)) - .map(jarEntry -> getJarEntryStream(jar, jarEntry)) - .map(ResourceLoaderIml::readJarEntryStream) - .flatMap(content -> Arrays.stream(content.split(System.lineSeparator()))) - .filter(ResourceLoaderIml::filterNonEmpty) - .collect(Collectors.toSet()); - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - private static String extractJarFilePath(final String uriString) { - return uriString.substring(0, uriString.indexOf("!")).replace("jar:file:", ""); - } - - private static boolean filterNonEmpty(final String line) { - return !Strings.isNullOrEmpty(line.trim()); - } - - private static String readJarEntryStream(final InputStream inputStream) { - try { - final String value = IOUtils.toString(inputStream, StandardCharsets.UTF_8); - IOUtils.closeQuietly(inputStream); - return value; - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - private static InputStream getJarEntryStream(final JarFile jar, final JarEntry jarEntry) { - try { - return jar.getInputStream(jarEntry); - } catch (IOException e) { - throw new IllegalStateException(format("Unable to get stream for entry %s | jar %s", jar, jarEntry)); - } - } - - private static URI urlToUri(final URL url) { - try { - return url.toURI(); - } catch (URISyntaxException e) { - throw new IllegalStateException(format("Unable to convert URL %s to URI", url)); - } - } - - private static String urlToContentString(final URL url) { - try { - return Resources.toString(url, Charsets.UTF_8); - } catch (IOException e) { - throw new IllegalArgumentException("Unable to read resource from: " + url, e); - } - } - - private static URL fileToUrl(final File file) { - try { - return file.toURI().toURL(); - } catch (MalformedURLException e) { - throw new IllegalStateException(e); - } - } - } -} diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SchemaModule.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SchemaModule.java deleted file mode 100644 index 0799a06f3..000000000 --- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SchemaModule.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.infra.distro.schema; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; -import org.opendaylight.controller.sal.core.api.model.SchemaService; -import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext; - -public class SchemaModule extends AbstractModule { - - protected void configure() { - bind(ModuleInfoBackedContext.class).toProvider(ModuleInfoBackedCtxProvider.class).in(Singleton.class); - bind(SchemaService.class).toProvider(SchemaServiceProvider.class).in(Singleton.class); - bind(BindingToNormalizedNodeCodec.class).toProvider(SerializerProvider.class).in(Singleton.class); - } - -} diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SchemaServiceProvider.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SchemaServiceProvider.java deleted file mode 100644 index eb3552c12..000000000 --- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SchemaServiceProvider.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.infra.distro.schema; - -import com.google.inject.Inject; -import io.fd.honeycomb.infra.distro.ProviderTrait; -import org.opendaylight.controller.sal.core.api.model.SchemaService; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; - -public final class SchemaServiceProvider extends ProviderTrait<SchemaService> { - - @Inject - private ModuleInfoBackedContext mibCtx; - - public StaticSchemaService create() { - return new StaticSchemaService(mibCtx.getSchemaContext()); - } - - /** - * Static schema context provider service. - */ - private static final class StaticSchemaService implements SchemaService { - private final SchemaContext schemaContext; - - StaticSchemaService(SchemaContext schemaContext) { - this.schemaContext = schemaContext; - } - - @Override - public void addModule(final Module module) { - throw new UnsupportedOperationException("Static service"); - } - - @Override - public void removeModule(final Module module) { - throw new UnsupportedOperationException("Static service"); - } - - @Override - public SchemaContext getSessionContext() { - return schemaContext; - } - - @Override - public SchemaContext getGlobalContext() { - return schemaContext; - } - - @Override - public ListenerRegistration<SchemaContextListener> registerSchemaContextListener( - final SchemaContextListener listener) { - listener.onGlobalContextUpdated(schemaContext); - return new ListenerRegistration<SchemaContextListener>() { - public void close() {} - - public SchemaContextListener getInstance() { - return listener; - } - - }; - } - } -} diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SerializerProvider.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SerializerProvider.java deleted file mode 100644 index 2a1963c0a..000000000 --- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/SerializerProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.infra.distro.schema; - -import com.google.inject.Inject; -import io.fd.honeycomb.infra.distro.ProviderTrait; -import javassist.ClassPool; -import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; -import org.opendaylight.yangtools.binding.data.codec.gen.impl.DataObjectSerializerGenerator; -import org.opendaylight.yangtools.binding.data.codec.gen.impl.StreamWriterGenerator; -import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry; -import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext; -import org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext; -import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils; - -public class SerializerProvider extends ProviderTrait<BindingToNormalizedNodeCodec> { - - @Inject - private ModuleInfoBackedContext mibCtx; - - @Override - protected BindingToNormalizedNodeCodec create() { - final DataObjectSerializerGenerator serializerGenerator = - StreamWriterGenerator.create(JavassistUtils.forClassPool(ClassPool.getDefault())); - BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry(serializerGenerator); - BindingRuntimeContext ctx = BindingRuntimeContext.create(mibCtx, mibCtx.getSchemaContext()); - codecRegistry.onBindingRuntimeContextUpdated(ctx); - BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(mibCtx, codecRegistry); - codec.onGlobalContextUpdated(mibCtx.getSchemaContext()); - return codec; - } -} diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangBindingProviderModule.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangBindingProviderModule.java deleted file mode 100644 index d705226bf..000000000 --- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangBindingProviderModule.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.infra.distro.schema; - -import com.google.inject.AbstractModule; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class YangBindingProviderModule extends AbstractModule { - private static final Logger LOG = LoggerFactory.getLogger(YangBindingProviderModule.class); - - protected void configure() { - LOG.info("Configuring YangBindingProviderModule"); - bind(YangModulesProvider.YangModules.class).toProvider(YangModulesProvider.class).asEagerSingleton(); - } -} diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangModuleMappingIndex.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangModuleMappingIndex.java deleted file mode 100644 index a483cfd9c..000000000 --- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangModuleMappingIndex.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.infra.distro.schema; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.LinkedListMultimap; -import com.google.common.collect.Multimap; -import java.util.Arrays; -import java.util.Set; -import java.util.stream.Stream; -import javax.annotation.Nonnull; - -/** - * Index from guice module to yang module providers - */ -class YangModuleMappingIndex implements ResourceLoader { - - private static final String G_MODULE_TOKEN = "GUICE_MODULE:"; - private static final String KEY_VALUE_SEPARATOR = "|"; - private static final String Y_MODULE_TOKEN = "YANG_MODULES:"; - private static final String Y_MODULE_SEPARATOR = ","; - - /** - * key - module class name - * value - yang module provider - */ - private final Multimap<String, String> index; - - YangModuleMappingIndex(final String indexPath) { - this.index = LinkedListMultimap.create(); - loadResourceContentsOnPath(indexPath) - .forEach(line -> { - final String moduleName = parseModuleName(line); - parseYangModules(line).forEach(yModuleProvider -> index.put(moduleName, yModuleProvider)); - }); - } - - Set<String> getByModuleName(@Nonnull final String moduleName) { - return ImmutableSet.copyOf(index.get(moduleName)); - } - - int applicationModulesCount() { - return index.keySet().size(); - } - - private static String parseModuleName(final String rawLine) { - return rawLine.substring(rawLine.indexOf(G_MODULE_TOKEN) + G_MODULE_TOKEN.length(), - rawLine.indexOf(KEY_VALUE_SEPARATOR)); - } - - private static Stream<String> parseYangModules(final String rawLine) { - return Arrays.stream(rawLine.substring(rawLine.indexOf(Y_MODULE_TOKEN) + Y_MODULE_TOKEN.length()) - .split(Y_MODULE_SEPARATOR)); - } -} diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangModulesProvider.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangModulesProvider.java deleted file mode 100644 index f6d8ea0c1..000000000 --- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/schema/YangModulesProvider.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2016 Cisco and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.honeycomb.infra.distro.schema; - - -import static java.lang.String.format; - -import com.google.common.base.Charsets; -import com.google.common.io.Resources; -import com.google.inject.Inject; -import com.google.inject.Provider; -import io.fd.honeycomb.infra.distro.activation.ActivationConfig; -import io.fd.honeycomb.infra.distro.activation.ActiveModules; -import java.io.IOException; -import java.net.URL; -import java.util.Collection; -import java.util.Set; -import java.util.stream.Collectors; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider; - -/** - * Loads active yang modules - * Relying on generate yang-module-index - */ -public class YangModulesProvider implements Provider<YangModulesProvider.YangModules> { - - @Inject - private ActiveModules activeModules; - - @Inject - private ActivationConfig config; - - @Override - public YangModules get() { - // no need to bind this, pretty big map and its needed just here - final YangModuleMappingIndex index = new YangModuleMappingIndex(config.getYangModulesIndexPath()); - - return new YangModules(activeModules.getActiveModulesClasses().stream() - .map(Class::getName) - .map(index::getByModuleName) - .flatMap(Collection::stream) - .map(YangModulesProvider::loadClass) - .map(aClass -> (Class<? extends YangModelBindingProvider>) aClass) - .collect(Collectors.toSet())); - } - - static class YangModules { - private final Set<Class<? extends YangModelBindingProvider>> yangBindings; - - YangModules(final Set<Class<? extends YangModelBindingProvider>> yangBindings) { - this.yangBindings = yangBindings; - } - - Set<YangModelBindingProvider> getYangBindings() { - return yangBindings.stream() - .map(providerClass -> { - try { - return providerClass.newInstance(); - } catch (InstantiationException | IllegalAccessException e) { - throw new IllegalStateException(format("Unable to create instance of %s", providerClass), - e); - } - }).collect(Collectors.toSet()); - } - } - - private static Class<?> loadClass(@Nonnull final String className) { - try { - return Class.forName(className); - } catch (ClassNotFoundException e) { - throw new IllegalArgumentException("Unable to load class: " + className, e); - } - } - - static String urlToString(@Nonnull final URL url) { - try { - return Resources.toString(url, Charsets.UTF_8); - } catch (IOException e) { - throw new IllegalArgumentException("Unable to read resource from: " + url, e); - } - } -} |