package net.onrc.onos.datastore;

import net.onrc.onos.datastore.utils.ByteArrayUtil;

/**
 * Exception thrown when conditional operation failed due to version mismatch.
 */
public class WrongVersionException extends RejectRulesException {
    private static final long serialVersionUID = -1644202495890190823L;

    public WrongVersionException(final String message) {
        super(message);
    }

    public WrongVersionException(final IKVTableID tableID, final byte[] key,
            final long expectedVersion, final Throwable cause) {
        // It will be best if {@code cause} has actual version encountered, but
        // doesn't currently.
        super(ByteArrayUtil.toHexStringBuffer(key, ":") + " on table:"
                + tableID + " was expected to be version:" + expectedVersion,
                cause);
    }

    public WrongVersionException(final IKVTableID tableID, final byte[] key,
            final long expectedVersion, final long encounteredVersion) {
        super(ByteArrayUtil.toHexStringBuffer(key, ":") + " on table:"
                + tableID + " was expected to be version:" + expectedVersion
                + " but found:" + encounteredVersion);
    }

}
