*/
package org.opendaylight.mdsal.binding.api;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import static java.util.Objects.requireNonNull;
-import com.google.common.base.Preconditions;
-import java.io.Serializable;
-import javax.annotation.Nonnull;
-import org.opendaylight.yangtools.concepts.Immutable;
-import org.opendaylight.yangtools.concepts.Path;
+import com.google.common.base.MoreObjects;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.yangtools.concepts.HierarchicalIdentifier;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
* A unique identifier for a particular subtree. It is composed of the logical
* data store type and the instance identifier of the root node.
*/
-public final class DataTreeIdentifier<T extends DataObject> implements Immutable, Path<DataTreeIdentifier<?>>, Serializable {
+public final class DataTreeIdentifier<T extends DataObject> implements HierarchicalIdentifier<DataTreeIdentifier<?>> {
+ @java.io.Serial
private static final long serialVersionUID = 1L;
- private final InstanceIdentifier<T> rootIdentifier;
- private final LogicalDatastoreType datastoreType;
- public DataTreeIdentifier(final LogicalDatastoreType datastoreType, final InstanceIdentifier<T> rootIdentifier) {
- this.datastoreType = Preconditions.checkNotNull(datastoreType);
- this.rootIdentifier = Preconditions.checkNotNull(rootIdentifier);
+ private final @NonNull InstanceIdentifier<T> rootIdentifier;
+ private final @NonNull LogicalDatastoreType datastoreType;
+
+ private DataTreeIdentifier(final @NonNull LogicalDatastoreType datastoreType,
+ final @NonNull InstanceIdentifier<T> rootIdentifier) {
+ this.datastoreType = requireNonNull(datastoreType);
+ this.rootIdentifier = requireNonNull(rootIdentifier);
+ }
+
+ public static <T extends DataObject> @NonNull DataTreeIdentifier<T> create(
+ final @NonNull LogicalDatastoreType datastoreType, final @NonNull InstanceIdentifier<T> rootIdentifier) {
+ return new DataTreeIdentifier<>(datastoreType, rootIdentifier);
}
/**
*
* @return Logical data store type. Guaranteed to be non-null.
*/
- public @Nonnull LogicalDatastoreType getDatastoreType() {
+ public @NonNull LogicalDatastoreType getDatastoreType() {
return datastoreType;
}
*
* @return Instance identifier corresponding to the root node.
*/
- public @Nonnull InstanceIdentifier<T> getRootIdentifier() {
+ public @NonNull InstanceIdentifier<T> getRootIdentifier() {
return rootIdentifier;
}
@Override
public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + datastoreType.hashCode();
- result = prime * result + rootIdentifier.hashCode();
- return result;
+ return datastoreType.hashCode() * 31 + rootIdentifier.hashCode();
}
@Override
public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (!(obj instanceof DataTreeIdentifier)) {
- return false;
- }
- final DataTreeIdentifier<?> other = (DataTreeIdentifier<?>) obj;
- if (datastoreType != other.datastoreType) {
- return false;
- }
- return rootIdentifier.equals(other.rootIdentifier);
+ return this == obj || obj instanceof DataTreeIdentifier<?> other && datastoreType == other.datastoreType
+ && rootIdentifier.equals(other.rootIdentifier);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this).add("datastore", datastoreType).add("root", rootIdentifier).toString();
}
}
\ No newline at end of file