blob: 8d26cff8babd12fb9638bb5f3c271061ff682a0a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.accumulo.core.client.impl;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Objects.requireNonNull;
import java.io.Serializable;
import java.util.Objects;
/**
* An abstract identifier class for comparing equality of identifiers of the same type.
*/
public abstract class AbstractId implements Comparable<AbstractId>, Serializable {
private static final long serialVersionUID = -155513612834787244L;
private final String canonical;
private Integer hashCode = null;
protected AbstractId(final String canonical) {
requireNonNull(canonical, "canonical cannot be null");
this.canonical = canonical;
}
/**
* The canonical ID
*/
public final String canonicalID() {
return canonical;
}
public boolean isEmpty() {
return canonical.isEmpty();
}
/**
* AbstractID objects are considered equal if, and only if, they are of the same type and have the
* same canonical identifier.
*/
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
return obj != null && Objects.equals(getClass(), obj.getClass())
&& Objects.equals(canonicalID(), ((AbstractId) obj).canonicalID());
}
@Override
public int hashCode() {
if (hashCode == null) {
hashCode = Objects.hash(canonicalID());
}
return hashCode;
}
/**
* Returns a string of the canonical ID
*/
@Override
public String toString() {
return canonical;
}
/**
* Return a UTF_8 byte[] of the canonical ID.
*/
public final byte[] getUtf8() {
return canonical.getBytes(UTF_8);
}
@Override
public int compareTo(AbstractId id) {
requireNonNull(id, "id cannot be null");
return this.canonicalID().compareTo(id.canonicalID());
}
}