private static Collection<ModuleImport> allImports(final Module mod) { if (mod.getSubmodules().isEmpty()) { return mod.getImports(); } final Collection<ModuleImport> concat = new LinkedHashSet<>(); concat.addAll(mod.getImports()); for (Module sub : mod.getSubmodules()) { concat.addAll(sub.getImports()); } return concat; }
private static Collection<ModuleImport> allImports(final Module mod) { if (mod.getSubmodules().isEmpty()) { return mod.getImports(); } final Collection<ModuleImport> concat = new LinkedHashSet<>(); concat.addAll(mod.getImports()); for (Module sub : mod.getSubmodules()) { concat.addAll(sub.getImports()); } return concat; }
private static ModuleImport getModuleImport(final Module targetModule, final String prefix) { return targetModule.getImports().stream() .filter(imp -> prefix.equals(imp.getPrefix())).findFirst().orElse(null); } }
private static ModuleImport findModuleImport(final Module module, final String prefix) { for (ModuleImport moduleImport : module.getImports()) { if (moduleImport.getPrefix().equals(prefix)) { return moduleImport; } } throw new IllegalStateException(format("Import not found with prefix %s in %s", prefix, module)); }
private void emitLinkageNodes(final Module input) { for (final ModuleImport importNode : input.getImports()) { emitImport(importNode); } /* * FIXME: BUG-2444: Emit include statements */ }
private static ModuleImport getModuleImport(final Module targetModule, final String prefix) { return targetModule.getImports().stream() .filter(imp -> prefix.equals(imp.getPrefix())).findFirst().orElse(null); } }
private static String getConfigModulePrefixFromImport(final Module currentModule) { for (ModuleImport currentImport : currentModule.getImports()) { if (currentImport.getModuleName().equals(ConfigConstants.CONFIG_MODULE)) { return currentImport.getPrefix(); } } throw new IllegalArgumentException("Cannot find import " + ConfigConstants.CONFIG_MODULE + " in " + currentModule); }
private static Map<String, URI> prefixToNamespace(final SchemaContext ctx, final Module module) { final BiMap<String, URI> prefixMap = HashBiMap.create(module.getImports().size() + 1); prefixMap.put(module.getPrefix(), module.getNamespace()); for (final ModuleImport imp : module.getImports()) { final String prefix = imp.getPrefix(); final URI namespace = getModuleNamespace(ctx, imp.getModuleName()); prefixMap.put(prefix, namespace); } return prefixMap; }
private static Map<String, URI> prefixToNamespace(final SchemaContext ctx, final Module module) { final BiMap<String, URI> prefixMap = HashBiMap.create(module.getImports().size() + 1); prefixMap.put(module.getPrefix(), module.getNamespace()); for (final ModuleImport imp : module.getImports()) { final String prefix = imp.getPrefix(); final URI namespace = getModuleNamespace(ctx, imp.getModuleName()); prefixMap.put(prefix, namespace); } return prefixMap; }
private QName createQName(final String prefix, final String localName) { final Module module = schemaContext.findModule(schemaNode.getQName().getModule()).get(); if (prefix.isEmpty() || module.getPrefix().equals(prefix)) { return QName.create(module.getQNameModule(), localName); } for (final ModuleImport moduleImport : module.getImports()) { if (prefix.equals(moduleImport.getPrefix())) { final Module importedModule = schemaContext.findModule(moduleImport.getModuleName(), moduleImport.getRevision()).get(); return QName.create(importedModule.getQNameModule(),localName); } } throw new IllegalArgumentException(String.format("Failed to lookup a module for prefix %s", prefix)); }
private QName createQName(final String prefix, final String localName) { final Module module = schemaContext.findModule(schemaNode.getQName().getModule()).get(); if (prefix.isEmpty() || module.getPrefix().equals(prefix)) { return QName.create(module.getQNameModule(), localName); } for (final ModuleImport moduleImport : module.getImports()) { if (prefix.equals(moduleImport.getPrefix())) { final Module importedModule = schemaContext.findModule(moduleImport.getModuleName(), moduleImport.getRevision()).get(); return QName.create(importedModule.getQNameModule(),localName); } } throw new IllegalArgumentException(String.format("Failed to lookup a module for prefix %s", prefix)); }
final Set<ModuleImport> imports = module.getImports(); for (final ModuleImport mi : imports) { if (prefix.equals(mi.getPrefix())) {
private static Collection<Module> getImportedModules(final Map<ModuleId, Module> allModules, final Set<Module> baseModules, final TreeMultimap<String, Module> nameToModulesAll) { List<Module> relatedModules = Lists.newLinkedList(); for (Module module : baseModules) { for (ModuleImport moduleImport : module.getImports()) { Optional<Revision> revisionDate = moduleImport.getRevision(); if (!revisionDate.isPresent()) { revisionDate = nameToModulesAll.get(moduleImport.getModuleName()).first().getRevision(); } ModuleId key = new ModuleId(moduleImport.getModuleName(), revisionDate); Module importedModule = allModules.get(key); Preconditions.checkArgument(importedModule != null, "Invalid schema, cannot find imported module: %s from module: %s, %s, modules:%s", key, module.getQNameModule(), module.getName(), allModules); relatedModules.add(importedModule); //calling imports recursive relatedModules.addAll(getImportedModules(allModules, Collections.singleton(importedModule), nameToModulesAll)); } } return relatedModules; }
private static Object qnameDomValueFromString(final Codec<Object, Object> codec, final DataSchemaNode schema, final String defaultValue, final SchemaContext schemaContext) { final int prefixEndIndex = defaultValue.indexOf(':'); if (prefixEndIndex != -1) { final String defaultValuePrefix = defaultValue.substring(0, prefixEndIndex); final Module module = schemaContext.findModule(schema.getQName().getModule()).get(); if (module.getPrefix().equals(defaultValuePrefix)) { return codec.deserialize(QName.create(module.getQNameModule(), defaultValue.substring(prefixEndIndex + 1))); } final Set<ModuleImport> imports = module.getImports(); for (final ModuleImport moduleImport : imports) { if (moduleImport.getPrefix().equals(defaultValuePrefix)) { final Module importedModule = schemaContext.findModule(moduleImport.getModuleName(), moduleImport.getRevision()).get(); return codec.deserialize(QName.create(importedModule.getQNameModule(), defaultValue.substring(prefixEndIndex + 1))); } } return null; } return codec.deserialize(QName.create(schema.getQName(), defaultValue)); }
private static Object qnameDomValueFromString(final Codec<Object, Object> codec, final DataSchemaNode schema, final String defaultValue, final SchemaContext schemaContext) { int prefixEndIndex = defaultValue.indexOf(':'); QName qname; if (prefixEndIndex != -1) { String defaultValuePrefix = defaultValue.substring(0, prefixEndIndex); Module module = schemaContext.findModule(schema.getQName().getModule()).get(); if (module.getPrefix().equals(defaultValuePrefix)) { qname = QName.create(module.getQNameModule(), defaultValue.substring(prefixEndIndex + 1)); return codec.deserialize(qname); } Set<ModuleImport> imports = module.getImports(); for (ModuleImport moduleImport : imports) { if (moduleImport.getPrefix().equals(defaultValuePrefix)) { Module importedModule = schemaContext.findModule(moduleImport.getModuleName(), moduleImport.getRevision()).get(); qname = QName.create(importedModule.getQNameModule(), defaultValue.substring(prefixEndIndex + 1)); return codec.deserialize(qname); } } return null; } qname = QName.create(schema.getQName(), defaultValue); return codec.deserialize(qname); }
private static Collection<Module> getImportedModules(final Map<ModuleId, Module> allModules, final Set<Module> baseModules, final TreeMultimap<String, Module> nameToModulesAll) { List<Module> relatedModules = Lists.newLinkedList(); for (Module module : baseModules) { for (ModuleImport moduleImport : module.getImports()) { Optional<Revision> revisionDate = moduleImport.getRevision(); if (!revisionDate.isPresent()) { revisionDate = nameToModulesAll.get(moduleImport.getModuleName()).first().getRevision(); } ModuleId key = new ModuleId(moduleImport.getModuleName(), revisionDate); Module importedModule = allModules.get(key); Preconditions.checkArgument(importedModule != null, "Invalid schema, cannot find imported module: %s from module: %s, %s, modules:%s", key, module.getQNameModule(), module.getName(), allModules); relatedModules.add(importedModule); //calling imports recursive relatedModules.addAll(getImportedModules(allModules, Collections.singleton(importedModule), nameToModulesAll)); } } return relatedModules; }
/** * Create a prefix {@link Converter} for {@link XPathExpressionException} defined in a particular YANG * {@link Module} .Instantiation requires establishing how a module's imports are mapped to actual modules * and their namespaces. This information is cached and used for improved lookups. * * @param ctx A SchemaContext * @param module Module in which the XPath is defined * @return A new Converter */ public static @Nonnull Converter<String, QNameModule> create(final SchemaContext ctx, final Module module) { // Always check for null ctx requireNonNull(ctx, "Schema context may not be null"); // Use immutable map builder for detection of duplicates (which should never occur) final Builder<String, QNameModule> b = ImmutableBiMap.builder(); b.put(module.getPrefix(), module.getQNameModule()); for (ModuleImport i : module.getImports()) { final Optional<Module> mod = ctx.findModule(i.getModuleName(), i.getRevision()); checkArgument(mod.isPresent(), "Unsatisfied import of %s by module %s", i, module); b.put(i.getPrefix(), mod.get().getQNameModule()); } return Maps.asConverter(b.build()); } }
/** * Create a prefix {@link Converter} for {@link XPathExpressionException} defined in a particular YANG * {@link Module} .Instantiation requires establishing how a module's imports are mapped to actual modules * and their namespaces. This information is cached and used for improved lookups. * * @param ctx A SchemaContext * @param module Module in which the XPath is defined * @return A new Converter */ public static @Nonnull Converter<String, QNameModule> create(final SchemaContext ctx, final Module module) { // Always check for null ctx requireNonNull(ctx, "Schema context may not be null"); // Use immutable map builder for detection of duplicates (which should never occur) final Builder<String, QNameModule> b = ImmutableBiMap.builder(); b.put(module.getPrefix(), module.getQNameModule()); for (ModuleImport i : module.getImports()) { final Optional<Module> mod = ctx.findModule(i.getModuleName(), i.getRevision()); checkArgument(mod.isPresent(), "Unsatisfied import of %s by module %s", i, module); b.put(i.getPrefix(), mod.get().getQNameModule()); } return Maps.asConverter(b.build()); } }
private boolean checkModuleDependency(final Module module, final Collection<ModuleId> rootModules) { for (ModuleId rootModule : rootModules) { if (rootModule.equals(new ModuleId(module.getName(), module.getRevision()))) { return true; } //handling/checking imports regarding root modules for (ModuleImport moduleImport : module.getImports()) { if (moduleImport.getModuleName().equals(rootModule.getName())) { return !moduleImport.getRevision().isPresent() || moduleImport.getRevision().equals(rootModule.getRev()); } } //submodules handling for (Module moduleSub : module.getSubmodules()) { return checkModuleDependency(moduleSub, rootModules); } } return false; }
private boolean checkModuleDependency(final Module module, final Collection<ModuleId> rootModules) { for (ModuleId rootModule : rootModules) { if (rootModule.equals(new ModuleId(module.getName(), module.getRevision()))) { return true; } //handling/checking imports regarding root modules for (ModuleImport moduleImport : module.getImports()) { if (moduleImport.getModuleName().equals(rootModule.getName())) { return !moduleImport.getRevision().isPresent() || moduleImport.getRevision().equals(rootModule.getRev()); } } //submodules handling for (Module moduleSub : module.getSubmodules()) { return checkModuleDependency(moduleSub, rootModules); } } return false; }