2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.model.repo.api;
10 import com.google.common.annotations.Beta;
11 import java.util.Objects;
12 import java.util.Optional;
13 import org.eclipse.jdt.annotation.NonNull;
14 import org.eclipse.jdt.annotation.Nullable;
15 import org.opendaylight.yangtools.yang.common.Revision;
16 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
19 * YANG Schema revision source identifier.
22 * Simple transfer object represents revision identifier of source for YANG schema (module or submodule), which consists
25 * <li>YANG schema name ({@link #getName()}
26 * <li>Module revision (optional) ({link {@link #getRevision()})
30 * Revision source identifier is designated to be carry only necessary information to look-up YANG model source
31 * and to be used by various SchemaSourceProviders.
34 * <b>Note:</b>On source retrieval layer it is impossible to distinguish between YANG module and/or submodule unless
38 * (For further reference see: http://tools.ietf.org/html/rfc6020#section-5.2
39 * and http://tools.ietf.org/html/rfc6022#section-3.1 ).
42 public final class RevisionSourceIdentifier extends SourceIdentifier {
43 private static final long serialVersionUID = 1L;
46 * Creates new YANG Schema revision source identifier for sources without a revision.
48 * @param name Name of schema
50 RevisionSourceIdentifier(final String name) {
55 * Creates new YANG Schema revision source identifier.
57 * @param name Name of schema
58 * @param revision Revision of source, may be null
60 RevisionSourceIdentifier(final String name, final @Nullable Revision revision) {
61 super(name, revision);
65 * Creates new YANG Schema revision source identifier.
67 * @param name Name of schema
68 * @param formattedRevision Revision of source, potentially not present
70 private RevisionSourceIdentifier(final String name, final Optional<Revision> revision) {
71 super(name, revision);
75 * Creates new YANG Schema revision source identifier.
77 * @param moduleName Name of schema
78 * @param revision Revision of source in format YYYY-mm-dd. If not present, default value will be used.
79 * @return A RevisionSourceIdentifier
81 public static @NonNull RevisionSourceIdentifier create(final String moduleName, final Optional<Revision> revision) {
82 return new RevisionSourceIdentifier(moduleName, revision);
85 public static @NonNull RevisionSourceIdentifier create(final Unqualified moduleName,
86 final Optional<Revision> revision) {
87 return create(moduleName.getLocalName(), revision);
91 * Creates new YANG Schema revision source identifier.
93 * @param moduleName Name of schema
94 * @param revision Revision of source, may be null
95 * @return A RevisionSourceIdentifier
97 public static @NonNull RevisionSourceIdentifier create(final String moduleName, final @Nullable Revision revision) {
98 return new RevisionSourceIdentifier(moduleName, revision);
101 public static @NonNull RevisionSourceIdentifier create(final Unqualified moduleName,
102 final @Nullable Revision revision) {
103 return create(moduleName.getLocalName(), revision);
107 * Creates new YANG Schema revision source identifier for sources without
110 * @param moduleName Name of schema
111 * @return A RevisionSourceIdentifier
113 public static @NonNull RevisionSourceIdentifier create(final String moduleName) {
114 return new RevisionSourceIdentifier(moduleName);
118 public int hashCode() {
119 final int prime = 31;
121 result = prime * result + Objects.hashCode(getName());
122 result = prime * result + Objects.hashCode(getRevision());
127 public boolean equals(final Object obj) {
131 if (!(obj instanceof RevisionSourceIdentifier other)) {
134 return Objects.equals(getName(), other.getName()) && Objects.equals(getRevision(), other.getRevision());
138 public String toString() {
139 final StringBuilder sb = new StringBuilder("RevisionSourceIdentifier [name=");
140 sb.append(getName());
142 final Optional<Revision> rev = getRevision();
143 if (rev.isPresent()) {
144 sb.append('@').append(rev.get());
146 return sb.append(']').toString();