@Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (!(obj instanceof QNameWithPredicateBuilder)) { return false; } final QNameWithPredicateBuilder other = (QNameWithPredicateBuilder) obj; return Objects.equals(localName, other.localName) && moduleQname.equals(other.moduleQname); }
@Override public String toString() { final StringBuilder sb = new StringBuilder(); if (moduleQname != null) { sb.append('(').append(moduleQname.getNamespace()); sb.append("?revision=").append(moduleQname.getRevision()); sb.append(')'); } sb.append(localName); for (final QNamePredicate predicate : qnamePredicates) { sb.append(predicate); } return sb.toString(); } }
SubmoduleEffectiveStatementImpl( final StmtContext<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> ctx) { super(ctx); final String belongsToModuleName = firstAttributeOf(ctx.declaredSubstatements(), BelongsToStatement.class); final QNameModule belongsToModuleQName = ctx.getFromNamespace(ModuleNameToModuleQName.class, belongsToModuleName); final Optional<Revision> submoduleRevision = findFirstEffectiveSubstatementArgument( RevisionEffectiveStatement.class); this.qnameModule = QNameModule.create(belongsToModuleQName.getNamespace(), submoduleRevision).intern(); }
Entry<String, String> prefixAndNamespaceFor(final QNameModule module) { if (YangConstants.RFC6020_YIN_MODULE.equals(module)) { return YIN_PREFIX_AND_NAMESPACE; } final String prefix = moduleToPrefix.get(module); checkArgument(prefix != null, "Module %s does not map to a prefix", module); return new SimpleImmutableEntry<>(prefix, module.getNamespace().toString()); }
public void put(final String prefix, final QNameModule module) { prefixToModuleMap.put(prefix, module); namespaceToModuleMap.put(module.getNamespace(), module); }
static Optional<String> statementPrefix(final Map<QNameModule, String> namespaces, final QName stmtName) { final QNameModule namespace = stmtName.getModule(); if (YangConstants.RFC6020_YIN_MODULE.equals(namespace)) { return Optional.empty(); if (prefix == null && !namespace.getRevision().isPresent()) { for (Entry<QNameModule, @NonNull String> entry : namespaces.entrySet()) { final QNameModule ns = entry.getKey(); if (namespace.equals(ns.withoutRevision()) && (match == null || Revision.compare(match.getKey().getRevision(), ns.getRevision()) < 0)) { match = entry;
/** * Returns the revision date for the module. If you need both namespace and * revision, please consider using {@link #getQNameModule()}. * * @return date of the module revision which is specified as argument of * YANG {@link Module <b><font color="#339900">revison</font></b>} * keyword */ @Override default Optional<Revision> getRevision() { return getQNameModule().getRevision(); }
/** * Creates new QName. * * @param namespace Namespace of QName or null if namespace is undefined. * @param revision Revision of namespace or null if revision is unspecified. * @param localName Local name part of QName. MUST NOT BE null. * @return Instance of QName */ public static @NonNull QName create(final URI namespace, final @Nullable Revision revision, final String localName) { return create(QNameModule.create(namespace, revision), localName); }
@Override public final void onPreLinkageDeclared(final Mutable<String, ModuleStatement, EffectiveStatement<String, ModuleStatement>> stmt) { final String moduleName = stmt.getStatementArgument(); final URI moduleNs = firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class); SourceException.throwIfNull(moduleNs, stmt.getStatementSourceReference(), "Namespace of the module [%s] is missing", stmt.getStatementArgument()); stmt.addToNs(ModuleNameToNamespace.class, moduleName, moduleNs); final String modulePrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class); SourceException.throwIfNull(modulePrefix, stmt.getStatementSourceReference(), "Prefix of the module [%s] is missing", stmt.getStatementArgument()); stmt.addToNs(ImpPrefixToNamespace.class, modulePrefix, moduleNs); stmt.addContext(PreLinkageModuleNamespace.class, moduleName, stmt); final Optional<Revision> revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()); final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern(); stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule); stmt.setRootIdentifier(RevisionSourceIdentifier.create(stmt.getStatementArgument(), revisionDate)); }
/** * Return an interned reference to a equivalent QName. * * @return Interned reference, or this object if it was interned. */ public @NonNull QName intern() { // We also want to make sure we keep the QNameModule cached final QNameModule cacheMod = module.intern(); // Identity comparison is here on purpose, as we are deciding whether to potentially store 'qname' into the // interner. It is important that it does not hold user-supplied reference (such a String instance from // parsing of an XML document). final QName template = cacheMod == module ? this : QName.create(cacheMod, localName.intern()); return INTERNER.intern(template); }
/** * Returns XMLNamespace assigned to the YANG module. * * @return XMLNamespace assigned to the YANG module. */ public @NonNull URI getNamespace() { return module.getNamespace(); }
Entry<String, String> prefixAndNamespaceFor(final QNameModule module) { if (YangConstants.RFC6020_YIN_MODULE.equals(module)) { return YIN_PREFIX_AND_NAMESPACE; } final String prefix = moduleToPrefix.get(module); checkArgument(prefix != null, "Module %s does not map to a prefix", module); return new SimpleImmutableEntry<>(prefix, module.getNamespace().toString()); }
static Optional<String> statementPrefix(final Map<QNameModule, String> namespaces, final QName stmtName) { final QNameModule namespace = stmtName.getModule(); if (YangConstants.RFC6020_YIN_MODULE.equals(namespace)) { return Optional.empty(); if (prefix == null && !namespace.getRevision().isPresent()) { for (Entry<QNameModule, @NonNull String> entry : namespaces.entrySet()) { final QNameModule ns = entry.getKey(); if (namespace.equals(ns.withoutRevision()) && (match == null || Revision.compare(match.getKey().getRevision(), ns.getRevision()) < 0)) { match = entry;
/** * Returns revision of the YANG module if the module has defined revision. * * @return revision of the YANG module if the module has defined revision. */ public @NonNull Optional<Revision> getRevision() { return module.getRevision(); }
/** * Creates new QName. * * @param namespace Namespace of QName or null if namespace is undefined. * @param revision Revision of namespace. * @param localName Local name part of QName. MUST NOT BE null. * @return Instance of QName */ public static @NonNull QName create(final URI namespace, final Optional<Revision> revision, final String localName) { return create(QNameModule.create(namespace, revision), localName); }
/** * Return an interned reference to a equivalent QName. * * @return Interned reference, or this object if it was interned. */ public @NonNull QName intern() { // We also want to make sure we keep the QNameModule cached final QNameModule cacheMod = module.intern(); // Identity comparison is here on purpose, as we are deciding whether to potentially store 'qname' into the // interner. It is important that it does not hold user-supplied reference (such a String instance from // parsing of an XML document). final QName template = cacheMod == module ? this : QName.create(cacheMod, localName.intern()); return INTERNER.intern(template); }
@Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (!(obj instanceof QNameWithPredicateBuilder)) { return false; } final QNameWithPredicateBuilder other = (QNameWithPredicateBuilder) obj; return Objects.equals(localName, other.localName) && moduleQname.equals(other.moduleQname); }
@Override public String toString() { final StringBuilder sb = new StringBuilder(); if (moduleQname != null) { sb.append('(').append(moduleQname.getNamespace()); sb.append("?revision=").append(moduleQname.getRevision()); sb.append(')'); } sb.append(localName); for (final QNamePredicate predicate : qnamePredicates) { sb.append(predicate); } return sb.toString(); } }
/** * Returns the namespace of the module which is specified as argument of * YANG {@link Module <b><font color="#00FF00">namespace</font></b>} * keyword. If you need both namespace and revision, please consider using * {@link #getQNameModule()}. * * @return URI format of the namespace of the module */ @Override default URI getNamespace() { return getQNameModule().getNamespace(); }
final QNameModule qNameModule = QNameModule.create(moduleNs.get(), revisionDate.orElse(null)).intern(); final StmtContext<?, ModuleStatement, EffectiveStatement<String, ModuleStatement>> possibleDuplicateModule = stmt.getFromNamespace(NamespaceToModule.class, qNameModule); if (possibleDuplicateModule != null && possibleDuplicateModule != stmt) { throw new SourceException(stmt.getStatementSourceReference(), "Module namespace collision: %s. At %s", qNameModule.getNamespace(), possibleDuplicateModule.getStatementSourceReference());