import org.opendaylight.yangtools.yang.common.Revision
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext
import org.opendaylight.yangtools.yang.model.api.Module
+import org.opendaylight.yangtools.yang.model.api.ModuleLike
+import org.opendaylight.yangtools.yang.model.api.Submodule
/**
* Template for {@link YangModuleInfo} implementation for a particular module. Aside from fulfilling that contract,
val Module module
val EffectiveModelContext ctx
- val Function<Module, Optional<String>> moduleFilePathResolver
+ val Function<ModuleLike, Optional<String>> moduleFilePathResolver
var importedTypes = CORE_IMPORT_STR
@Accessors
val String modelBindingProviderName
- new(Module module, EffectiveModelContext ctx, Function<Module, Optional<String>> moduleFilePathResolver) {
+ new(Module module, EffectiveModelContext ctx, Function<ModuleLike, Optional<String>> moduleFilePathResolver) {
Preconditions.checkArgument(module !== null, "Module must not be null.")
this.module = module
this.ctx = ctx
}
def String generate() {
- val Set<Module> submodules = new HashSet
+ val Set<Submodule> submodules = new HashSet
collectSubmodules(submodules, module)
val body = '''
+ /**
+ * The {@link ResourceYangModuleInfo} for {@code «module.name»} module.
+ */
+ @«JavaFileTemplate.GENERATED»("mdsal-binding-generator")
public final class «MODULE_INFO_CLASS_NAME» extends ResourceYangModuleInfo {
«val rev = module.revision»
- private static final @NonNull QName NAME = QName.create("«module.namespace.toString»", «IF rev.present»"«rev.get.toString»", «ENDIF»"«module.name»").intern();
+ private static final @NonNull QName NAME = QName.create("«module.QNameModule.namespace.toString»", «IF rev.present»"«rev.get.toString»", «ENDIF»"«module.name»").intern();
private static final @NonNull YangModuleInfo INSTANCE = new «MODULE_INFO_CLASS_NAME»();
private final @NonNull ImmutableSet<YangModuleInfo> importedModules;
+ /**
+ * Return the singleton instance of this class.
+ *
+ * @return The singleton instance
+ */
public static @NonNull YangModuleInfo getInstance() {
return INSTANCE;
}
+ /**
+ * Create an interned {@link QName} with specified {@code localName} and namespace/revision of this
+ * module.
+ *
+ * @param localName local name
+ * @return A QName
+ * @throws NullPointerException if {@code localName} is null
+ * @throws IllegalArgumentException if localName is not a valid YANG identifier
+ */
public static @NonNull QName «MODULE_INFO_QNAMEOF_METHOD_NAME»(final String localName) {
return QName.create(NAME, localName).intern();
}
package «packageName»;
import java.lang.Override;
+ import java.util.ServiceLoader;
import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider;
import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
+ /**
+ * The {@link YangModelBindingProvider} for {@code «module.name»} module. This class should not be used
+ * directly, but rather through {@link ServiceLoader}.
+ */
+ @«JavaFileTemplate.GENERATED»("mdsal-binding-generator")
public final class «MODEL_BINDING_PROVIDER_CLASS_NAME» implements YangModelBindingProvider {
+ /**
+ * Construct a new provider.
+ */
+ public «MODEL_BINDING_PROVIDER_CLASS_NAME»() {
+ // No-op
+ }
+
@Override
public YangModuleInfo getModuleInfo() {
return «MODULE_INFO_CLASS_NAME».getInstance();
}
'''
- private static def void collectSubmodules(Set<Module> dest, Module module) {
- for (Module submodule : module.submodules) {
+ private static def void collectSubmodules(Set<Submodule> dest, ModuleLike module) {
+ for (Submodule submodule : module.submodules) {
if (dest.add(submodule)) {
collectSubmodules(dest, submodule)
}
}
}
- private def CharSequence classBody(Module m, String className, Set<Module> submodules) '''
+ private def CharSequence classBody(ModuleLike m, String className, Set<Submodule> submodules) '''
private «className»() {
«IF !m.imports.empty || !submodules.empty»
«extendImports»
importedTypes = EXT_IMPORT_STR
}
- private def sourcePath(Module module) {
+ private def sourcePath(ModuleLike module) {
val opt = moduleFilePathResolver.apply(module)
Preconditions.checkState(opt.isPresent, "Module %s does not have a file path", module)
return opt.get
}
- private def generateSubInfo(Set<Module> submodules) '''
+ private def generateSubInfo(Set<Submodule> submodules) '''
«FOR submodule : submodules»
«val className = submodule.name.className»
private static final class «className»Info extends ResourceYangModuleInfo {
«val rev = submodule.revision»
- private final @NonNull QName NAME = QName.create("«submodule.namespace.toString»", «
+ private final @NonNull QName NAME = QName.create("«submodule.QNameModule.namespace.toString»", «
IF rev.present»"«rev.get.toString»", «ENDIF»"«submodule.name»").intern();
private static final @NonNull YangModuleInfo INSTANCE = new «className»Info();