package org.opendaylight.netconf.sal.rest.doc.util;
import java.net.URI;
-import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.Optional;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-public class RestDocgenUtil {
+public final class RestDocgenUtil {
private RestDocgenUtil() {
}
- private static Map<URI, Map<Date, Module>> namespaceAndRevisionToModule = new HashMap<>();
+ private static final Map<URI, Map<Optional<Revision>, Module>> NAMESPACE_AND_REVISION_TO_MODULE = new HashMap<>();
/**
* Resolve path argument name for {@code node}.
* @return name of {@code node}
*/
public static String resolvePathArgumentsName(final SchemaNode node, final SchemaContext schemaContext) {
- Iterable<QName> schemaPath = node.getPath().getPathTowardsRoot();
- Iterator<QName> it = schemaPath.iterator();
- QName nodeQName = it.next();
+ final Iterable<QName> schemaPath = node.getPath().getPathTowardsRoot();
+ final Iterator<QName> it = schemaPath.iterator();
+ final QName nodeQName = it.next();
QName parentQName = null;
if (it.hasNext()) {
private static synchronized String resolveFullNameFromNode(final SchemaNode node,
final SchemaContext schemaContext) {
final URI namespace = node.getQName().getNamespace();
- final Date revision = node.getQName().getRevision();
+ final Optional<Revision> revision = node.getQName().getRevision();
- Map<Date, Module> revisionToModule = namespaceAndRevisionToModule.get(namespace);
- if (revisionToModule == null) {
- revisionToModule = new HashMap<>();
- namespaceAndRevisionToModule.put(namespace, revisionToModule);
- }
- Module module = revisionToModule.get(revision);
- if (module == null) {
- module = schemaContext.findModuleByNamespaceAndRevision(namespace, revision);
- revisionToModule.put(revision, module);
- }
+ Map<Optional<Revision>, Module> revisionToModule =
+ NAMESPACE_AND_REVISION_TO_MODULE.computeIfAbsent(namespace, k -> new HashMap<>());
+ Module module =
+ revisionToModule.computeIfAbsent(revision, k -> schemaContext.findModule(namespace, k).orElse(null));
if (module != null) {
return module.getName() + ":" + node.getQName().getLocalName();
}
}
}
- private static boolean isEqualNamespaceAndRevision(QName parentQName, QName nodeQName) {
+ private static boolean isEqualNamespaceAndRevision(final QName parentQName, final QName nodeQName) {
if (parentQName == null) {
- if (nodeQName == null) {
- return true;
- }
- return false;
+ return nodeQName == null;
}
return parentQName.getNamespace().equals(nodeQName.getNamespace())
&& parentQName.getRevision().equals(nodeQName.getRevision());
}
+
}