All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opendaylight.yangtools.yang.common.RevisionUnion Maven / Gradle / Ivy

There is a newer version: 14.0.5
Show newest version
/*
 * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others.  All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */
package org.opendaylight.yangtools.yang.common;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.Serializable;
import java.util.NoSuchElementException;
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.concepts.Immutable;
import org.opendaylight.yangtools.concepts.WritableObject;

/**
 * A capture of an optional {@code revision-date}. This is a replacement for {@code Optional}, with the added
 * benefit of having a non-null string representation in {@link #unionString()}, which is also conveniently returned
 * from {@link #toString()}.
 *
 * 

* This contract is exactly the same as this fragment from {@code ietf-yang-library}: *

{@code
 *   type union {
 *     type revision-identifier;
 *     type string {
 *       length "0";
 *     }
 *   }
 * }
*/ @NonNullByDefault public sealed interface RevisionUnion extends Comparable, Immutable, Serializable, WritableObject permits Revision, NotRevision { /** * Return empty {@link RevisionUnion}. * * @return empty {@link RevisionUnion} */ static NotRevision none() { return NotRevision.of(); } static RevisionUnion of(final String unionString) { return unionString.isEmpty() ? none() : Revision.of(unionString); } static RevisionUnion of(final @Nullable Revision revision) { return revision != null ? revision : none(); } /** * A {@code revision-date}-compliant date, or an empty string ({@code ""}). * * @return A revision-date or empty string */ String unionString(); /** * Return the {@link Revision}, if present. * * @return the revision, or {@code null} if not present */ @Nullable Revision revision(); default Optional findRevision() { return Optional.ofNullable(revision()); } default Revision getRevision() { final var revision = revision(); if (revision == null) { throw new NoSuchElementException(); } return revision; } @Override @SuppressWarnings("checkstyle:parameterName") default int compareTo(final RevisionUnion o) { // Since all strings conform to the format, we can use their comparable property to do the correct thing // with respect to temporal ordering. return unionString().compareTo(o.unionString()); } @Override default void writeTo(final DataOutput out) throws IOException { out.writeUTF(unionString()); } static RevisionUnion readFrom(final DataInput in) throws IOException { final var unionString = in.readUTF(); return unionString.isEmpty() ? none() : Revision.ofRead(unionString); } @Override int hashCode(); @Override boolean equals(@Nullable Object obj); /** * Returns {@link #unionString()}. * * @return {@link #unionString()} */ @Override String toString(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy