package net.onrc.onos.core.datastore;

import net.onrc.onos.core.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.toHexStringBuilder(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.toHexStringBuilder(key, ":") + " on table:"
                + tableID + " was expected to be version:" + expectedVersion
                + " but found:" + encounteredVersion);
    }

}
