package org.argeo.api.uuid;
import java.util.UUID;
/**
* A name UUID whose binary data used for its construction is known. A new byte
* array is created and it is copied when retrieved, so this would be
* inefficient and memory consuming for big data amounts. This rather meant to
* be used for small binary data, such as certificates, etc.
*/
public class BinaryNameUuid extends BasicNameUuid {
private static final long serialVersionUID = APM.SERIAL;
protected final TypedUuid namespace;
protected final byte[] bytes;
/** Static builder (a {@link TypedUuidFactory} may be more efficient). */
public BinaryNameUuid(TypedUuid namespace, byte[] bytes, boolean sha1) {
this(sha1 ? AbstractUuidFactory.createNameUUIDv5Static(namespace.uuid, bytes)
: AbstractUuidFactory.createNameUUIDv5Static(namespace.uuid, bytes), namespace, bytes);
}
/**
* Since no check is performed, the constructor is protected so that the object
* can only be built by the default methods of {@link TypedUuidFactory} (in this
* package) or by extending the class.
*/
protected BinaryNameUuid(UUID uuid, TypedUuid namespace, byte[] bytes) {
super(uuid);
this.namespace = namespace;
this.bytes = new byte[bytes.length];
System.arraycopy(bytes, 0, this.bytes, 0, bytes.length);
}
/** The namespace used to build this UUID. */
public final TypedUuid getNamespace() {
return namespace;
}
/**
* A copy of the bytes which have been hashed. In order to
* access the byte array directly, the class must be extended.
*/
public final byte[] getBytes() {
byte[] bytes = new byte[this.bytes.length];
System.arraycopy(this.bytes, 0, bytes, 0, this.bytes.length);
return bytes;
}
/** Always returns false
since the construction value is known. */
@Override
public final boolean isOpaque() {
return false;
}
}