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.rfc8528.model.api.MountPointLabel;
21 import org.opendaylight.yangtools.util.AbstractIdentifier;
22 import org.opendaylight.yangtools.yang.common.QName;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
24 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
28 public final class MountPointIdentifier extends AbstractIdentifier<MountPointLabel>
29 implements PathArgument, WritableObject {
31 private static final long serialVersionUID = 1L;
33 private static final LoadingCache<QName, MountPointIdentifier> CACHE = CacheBuilder.newBuilder().weakValues()
34 .build(new CacheLoader<QName, MountPointIdentifier>() {
36 public MountPointIdentifier load(final QName key) {
37 return new MountPointIdentifier(MountPointLabel.create(key));
41 public MountPointIdentifier(final MountPointLabel label) {
45 public static MountPointIdentifier of(final QName qname) {
46 return new MountPointIdentifier(new MountPointLabel(qname));
49 public static MountPointIdentifier create(final QName qname) {
50 final MountPointIdentifier existing = CACHE.getIfPresent(qname);
51 return existing != null ? existing : CACHE.getUnchecked(qname.intern());
54 public static MountPointIdentifier readFrom(final DataInput in) throws IOException {
55 return create(QName.readFrom(in));
58 public MountPointLabel getLabel() {
63 public void writeTo(final DataOutput out) throws IOException {
64 getValue().writeTo(out);
68 private Object writeReplace() {
69 return new MPIv1(getLabel().qname());
73 @SuppressWarnings("checkstyle:parameterName")
74 public int compareTo(final @Nullable PathArgument o) {
75 if (o instanceof AugmentationIdentifier) {
76 // Augmentations are strictly more, in keeping of their compare
79 if (!(o instanceof MountPointIdentifier other)) {
80 // TODO: Yeah, okay, this declaration is not quite right, but we are following AugmentationIdenfier's lead
83 return getNodeType().compareTo(other.getNodeType());
87 public QName getNodeType() {
88 return getLabel().qname();
92 public String toRelativeString(final @Nullable PathArgument previous) {