private static final String RESERVED_KEYWORD = "reserved_keyword";
private static final ListMultimap<String, String> PACKAGES_MAP = ArrayListMultimap.create();
public static final Set<String> SPECIAL_RESERVED_PATHS =
- ImmutableSet.of("org.opendaylight.yangtools.yang.common", "org.opendaylight.mdsal.binding.javav2.spec",
- "java", "com");
+ ImmutableSet.of("org.opendaylight.yangtools.yang.model","org.opendaylight.yangtools.concepts","org.opendaylight.yangtools.yang.common",
+ "org.opendaylight.mdsal.binding.javav2.spec","java", "com");
private JavaIdentifierNormalizer() {
throw new UnsupportedOperationException("Util class");
package org.opendaylight.mdsal.binding.javav2.java.api.generator.renderers;
+import static org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer.normalizeFullPackageName;
import static org.opendaylight.mdsal.binding.javav2.util.BindingMapping.MODEL_BINDING_PROVIDER_CLASS_NAME;
import static org.opendaylight.mdsal.binding.javav2.util.BindingMapping.getRootPackageName;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
import java.util.TreeMap;
import java.util.function.Function;
import org.opendaylight.mdsal.binding.javav2.model.api.WildcardType;
import org.opendaylight.mdsal.binding.javav2.spec.runtime.YangModelBindingProvider;
import org.opendaylight.mdsal.binding.javav2.spec.runtime.YangModuleInfo;
+import org.opendaylight.yangtools.concepts.SemVer;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
public class YangModuleInfoTemplateRenderer {
private final Map<String, String> importMap = new HashMap<>();
private final String packageName;
private final String modelBindingProviderName;
- private final Function<Module, Optional<String>> moduleFilePathResolver;
+ private final Function<Module, java.util.Optional<String>> moduleFilePathResolver;
-
- public YangModuleInfoTemplateRenderer(final Module module, final SchemaContext ctx, final Function<Module, Optional<String>> moduleFilePathResolver) {
+ public YangModuleInfoTemplateRenderer(final Module module, final SchemaContext ctx, final Function<Module,
+ java.util.Optional<String>> moduleFilePathResolver) {
Preconditions.checkArgument(module != null, "Module must not be null.");
this.module = module;
this.ctx = ctx;
- this.packageName = getRootPackageName(module);
+ this.packageName = normalizeFullPackageName(getRootPackageName(module));
this.moduleFilePathResolver = moduleFilePathResolver;
final StringBuilder sb = new StringBuilder();
importedNames.put("inputStream", importedName(InputStream.class));
importedNames.put("iOException", importedName(IOException.class));
importedNames.put("yangModuleInfo", importedName(YangModuleInfo.class));
+ importedNames.put("optional", importedName(Optional.class));
+ importedNames.put("semVer", importedName(SemVer.class));
+ importedNames.put("schemaSourceRepresentation", importedName(SchemaSourceRepresentation.class));
return yangModuleInfoTemplate.render(module, ctx, importedNames).body();
}
/**
- * builds template
+ * Builds template
* @return generated final template
*/
public String generateTemplate() {
final String templateBody = body();
sb.append("package ")
.append(packageName)
- .append(";\n")
+ .append(";\n\n")
.append(imports())
.append(templateBody);
return sb.toString();
}
/**
- * walks through map of imports
+ * Walks through map of imports
* @return string of imports for template
*/
private String imports() {
import org.opendaylight.yangtools.concepts.Builder;
import org.opendaylight.yangtools.yang.model.api.Module;
-public class TextTemplateUtil {
+public final class TextTemplateUtil {
public static final String DOT = ".";
public static final String PATTERN_CONSTANT_NAME = "PATTERN_CONSTANTS";
private static final Splitter NL_SPLITTER = Splitter.on(NL_MATCHER);
private TextTemplateUtil() {
- throw new AssertionError("Instantiating utility class.");
+ throw new UnsupportedOperationException("Util class");
}
/**
@import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifier.CLASS
@import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer.normalizeSpecificIdentifier
+@import org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer.normalizeFullPackageName
@import org.opendaylight.mdsal.binding.javav2.java.api.generator.util.TextTemplateUtil.getFormattedRevision
@import org.opendaylight.mdsal.binding.javav2.java.api.generator.util.TextTemplateUtil.getSourcePath
@import org.opendaylight.mdsal.binding.javav2.java.api.generator.renderers.YangModuleInfoTemplateRenderer.getSortedQName
private final @{importedNames.get("string")} name = "@{module.getName}";
private final @{importedNames.get("string")} namespace = "@{module.getNamespace.toString}";
+ private final @{importedNames.get("string")} semanticVersion = "@{module.getSemanticVersion}";
private final @{importedNames.get("string")} revision = "@{getFormattedRevision(module.getRevision)}";
private final @{importedNames.get("string")} resourcePath = "@{getSourcePath(module)}";
private final @{importedNames.get("set")}<YangModuleInfo> importedModules;
private static final @{importedNames.get("yangModuleInfo")} INSTANCE = new @{normalizeSpecificIdentifier(submodule.getName, CLASS)}Info();
private final @{importedNames.get("string")} name = "@{submodule.getName}";
+ private final @{importedNames.get("string")} semanticVersion = "@{submodule.getSemanticVersion}";
private final @{importedNames.get("string")} namespace = "@{submodule.getNamespace.toString}";
private final @{importedNames.get("string")} revision = "@{getFormattedRevision(submodule.getRevision)}";
private final @{importedNames.get("string")} resourcePath = "@{getSourcePath(submodule)}";
@if(!module.getImports.isEmpty) {
@for(moduleImport <- module.getImports) {
@if(moduleImport.getRevision == null) {
- set.add(@{getRootPackageName(getSortedQName(ctx.getModules, moduleImport.getModuleName))}.@{MODULE_INFO_CLASS_NAME}.getInstance());
+ set.add(@{normalizeFullPackageName(getRootPackageName(getSortedQName(ctx.getModules, moduleImport
+ .getModuleName)))}.@{MODULE_INFO_CLASS_NAME}.getInstance());
} else {
- set.add(@{getRootPackageName(ctx.findModuleByName(moduleImport.getModuleName, moduleImport.getRevision))}.@{MODULE_INFO_CLASS_NAME}.getInstance());
+ set.add(@{normalizeFullPackageName(getRootPackageName(ctx.findModuleByName(moduleImport
+ .getModuleName, moduleImport.getRevision)))}.@{MODULE_INFO_CLASS_NAME}.getInstance());
}
}
}
set.add(@{normalizeSpecificIdentifier(submodule.getName, CLASS)}Info.getInstance());
}
}
- @if(!module.getImports.isEmpty && !module.getSubmodules.isEmpty) {
+ @if(module.getImports.isEmpty && module.getSubmodules.isEmpty) {
importedModules = @{importedNames.get("collections")}.emptySet();
} else {
importedModules = @{importedNames.get("immutableSet")}.copyOf(set);
}
@@Override
- public @{importedNames.get("inputStream")} getModuleSourceStream() throws IOException {
- @{importedNames.get("inputStream")} stream = @{MODULE_INFO_CLASS_NAME}.class.getResourceAsStream(resourcePath);
- if (stream == null) {
- throw new @{importedNames.get("iOException")}("Resource " + resourcePath + " is missing");
- }
- return stream;
+ public @{importedNames.get("optional")}<@{importedNames.get("semVer")}> getSemanticVersion() {
+ return Optional.of(@{importedNames.get("semVer")}.valueOf(semanticVersion));
+ }
+
+ @@Override
+ public @{importedNames.get("schemaSourceRepresentation")} getModuleSourceRepresentation() {
+ //TODO implement
+ return null;
}
@@Override
- public @{importedNames.get("set")}<@{importedNames.get("YangModuleInfo")}> getImportedModules() {
+ public @{importedNames.get("set")}<@{importedNames.get("yangModuleInfo")}> getImportedModules() {
return importedModules;
}
sb.append("[");
sb.append("name = " + name);
sb.append(", namespace = " + namespace);
+ sb.append(", semanticVersion = " + semanticVersion);
sb.append(", revision = " + revision);
sb.append(", resourcePath = " + resourcePath);
sb.append(", imports = " + importedModules);
package org.opendaylight.mdsal.binding.javav2.maven.api.gen.plugin;
+import static org.opendaylight.mdsal.binding.javav2.generator.util.JavaIdentifierNormalizer.normalizeFullPackageName;
+import static org.opendaylight.mdsal.binding.javav2.util.BindingMapping.getRootPackageName;
+
import com.google.common.annotations.Beta;
import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
String providerSource = template.generateModelProvider();
final File packageDir = GeneratorJavaFile.packageToDirectory(outputBaseDir,
- BindingMapping.getRootPackageName(module));
+ normalizeFullPackageName(getRootPackageName(module)));
generatedFiles.add(writeJavaSource(packageDir, BindingMapping.MODULE_INFO_CLASS_NAME, moduleInfoSource));
generatedFiles