2 * Copyright (c) 2019 PANTHEON.tech s.r.o. 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.rfc8528.data.api;
10 import com.google.common.annotations.Beta;
11 import com.google.common.cache.CacheBuilder;
12 import com.google.common.cache.CacheLoader;
13 import com.google.common.cache.LoadingCache;
14 import java.io.DataInput;
15 import java.io.DataOutput;
16 import java.io.IOException;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
19 import org.opendaylight.yangtools.concepts.WritableObject;
20 import org.opendaylight.yangtools.util.AbstractIdentifier;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
27 public final class MountPointIdentifier extends AbstractIdentifier<QName> implements PathArgument, WritableObject {
28 private static final long serialVersionUID = 1L;
30 private static final LoadingCache<QName, MountPointIdentifier> CACHE = CacheBuilder.newBuilder().weakValues()
31 .build(new CacheLoader<QName, MountPointIdentifier>() {
33 public MountPointIdentifier load(final QName key) {
38 private MountPointIdentifier(final QName qname) {
42 public static MountPointIdentifier of(final QName qname) {
43 return new MountPointIdentifier(qname);
46 public static MountPointIdentifier create(final QName qname) {
47 final MountPointIdentifier existing = CACHE.getIfPresent(qname);
48 return existing != null ? existing : CACHE.getUnchecked(qname.intern());
51 public static MountPointIdentifier readFrom(final DataInput in) throws IOException {
52 return create(QName.readFrom(in));
55 public QName getLabel() {
60 public void writeTo(final DataOutput out) throws IOException {
61 getValue().writeTo(out);
64 private Object writeReplace() {
65 return new MPIv1(getValue());
69 @SuppressWarnings("checkstyle:parameterName")
70 public int compareTo(final @Nullable PathArgument o) {
71 if (o instanceof AugmentationIdentifier) {
72 // Augmentations are strictly more, in keeping of their compare
75 if (!(o instanceof MountPointIdentifier)) {
76 // TODO: Yeah, okay, this declaration is not quite right, but we are following AugmentationIdenfier's lead
79 return getValue().compareTo(((MountPointIdentifier) o).getLabel());
83 public QName getNodeType() {
88 public String toRelativeString(final @Nullable PathArgument previous) {