Search in sources :

Example 1 with PackageTranslator

use of org.opendaylight.controller.config.yangjmxgenerator.PackageTranslator in project controller by opendaylight.

the class JMXGenerator method generateSources.

@Override
public Collection<File> generateSources(final SchemaContext context, final File outputBaseDir, final Set<Module> currentModules, final Function<Module, Optional<String>> moduleResourcePathResolver) {
    Preconditions.checkArgument(context != null, "Null context received");
    Preconditions.checkArgument(outputBaseDir != null, "Null outputBaseDir received");
    Preconditions.checkArgument(this.namespaceToPackageMapping != null && !this.namespaceToPackageMapping.isEmpty(), "No namespace to package mapping provided in additionalConfiguration");
    final PackageTranslator packageTranslator = new PackageTranslator(this.namespaceToPackageMapping);
    if (!outputBaseDir.exists()) {
        outputBaseDir.mkdirs();
    }
    final GeneratedFilesTracker generatedFiles = new GeneratedFilesTracker();
    // create SIE structure qNamesToSIEs
    final Map<QName, ServiceInterfaceEntry> qNamesToSIEs = new HashMap<>();
    final Map<IdentitySchemaNode, ServiceInterfaceEntry> knownSEITracker = new HashMap<>();
    for (final Module module : context.getModules()) {
        final String packageName = packageTranslator.getPackageName(module);
        final Map<QName, ServiceInterfaceEntry> namesToSIEntries = ServiceInterfaceEntry.create(module, packageName, knownSEITracker);
        for (final Entry<QName, ServiceInterfaceEntry> sieEntry : namesToSIEntries.entrySet()) {
            // merge value into qNamesToSIEs
            if (qNamesToSIEs.put(sieEntry.getKey(), sieEntry.getValue()) != null) {
                throw new IllegalStateException("Cannot add two SIE with same qname " + sieEntry.getValue());
            }
        }
        if (currentModules.contains(module)) {
            // write this sie to disk
            for (final ServiceInterfaceEntry sie : namesToSIEntries.values()) {
                try {
                    generatedFiles.addFile(this.codeWriter.writeSie(sie, outputBaseDir));
                } catch (final Exception e) {
                    throw new RuntimeException("Error occurred during SIE source generate phase", e);
                }
            }
        }
    }
    final File mainBaseDir = concatFolders(this.projectBaseDir, "src", "main", "java");
    Preconditions.checkNotNull(this.resourceBaseDir, "resource base dir attribute was null");
    final StringBuilder fullyQualifiedNamesOfFactories = new StringBuilder();
    // create MBEs
    for (final Module module : currentModules) {
        final String packageName = packageTranslator.getPackageName(module);
        final Map<String, ModuleMXBeanEntry> /* MB identity local name */
        namesToMBEs = ModuleMXBeanEntry.create(module, qNamesToSIEs, context, new TypeProviderWrapper(new TypeProviderImpl(context)), packageName);
        for (final Entry<String, ModuleMXBeanEntry> mbeEntry : namesToMBEs.entrySet()) {
            final ModuleMXBeanEntry mbe = mbeEntry.getValue();
            try {
                final List<File> files1 = this.codeWriter.writeMbe(mbe, outputBaseDir, mainBaseDir);
                generatedFiles.addFile(files1);
            } catch (final Exception e) {
                throw new RuntimeException("Error occurred during MBE source generate phase", e);
            }
            fullyQualifiedNamesOfFactories.append(mbe.getFullyQualifiedName(mbe.getStubFactoryName()));
            fullyQualifiedNamesOfFactories.append("\n");
        }
    }
    // create ModuleFactory file if needed
    if (fullyQualifiedNamesOfFactories.length() > 0 && this.generateModuleFactoryFile) {
        final File serviceLoaderFile = JMXGenerator.concatFolders(this.resourceBaseDir, "META-INF", "services", ModuleFactory.class.getName());
        // if this file does not exist, create empty file
        serviceLoaderFile.getParentFile().mkdirs();
        try {
            serviceLoaderFile.createNewFile();
            Files.asCharSink(serviceLoaderFile, StandardCharsets.UTF_8).write(fullyQualifiedNamesOfFactories.toString());
        } catch (final IOException e) {
            final String message = "Cannot write to " + serviceLoaderFile;
            LOG.error(message, e);
            throw new RuntimeException(message, e);
        }
    }
    return generatedFiles.getFiles();
}
Also used : HashMap(java.util.HashMap) QName(org.opendaylight.yangtools.yang.common.QName) ServiceInterfaceEntry(org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry) IOException(java.io.IOException) IdentitySchemaNode(org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode) IOException(java.io.IOException) PackageTranslator(org.opendaylight.controller.config.yangjmxgenerator.PackageTranslator) ModuleFactory(org.opendaylight.controller.config.spi.ModuleFactory) ModuleMXBeanEntry(org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry) Module(org.opendaylight.yangtools.yang.model.api.Module) TypeProviderImpl(org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl) File(java.io.File) TypeProviderWrapper(org.opendaylight.controller.config.yangjmxgenerator.TypeProviderWrapper)

Aggregations

File (java.io.File)1 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 ModuleFactory (org.opendaylight.controller.config.spi.ModuleFactory)1 ModuleMXBeanEntry (org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry)1 PackageTranslator (org.opendaylight.controller.config.yangjmxgenerator.PackageTranslator)1 ServiceInterfaceEntry (org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry)1 TypeProviderWrapper (org.opendaylight.controller.config.yangjmxgenerator.TypeProviderWrapper)1 TypeProviderImpl (org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl)1 QName (org.opendaylight.yangtools.yang.common.QName)1 IdentitySchemaNode (org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode)1 Module (org.opendaylight.yangtools.yang.model.api.Module)1