/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.core.util.xa; import com.google.common.hash.HashCode; import java.util.Arrays; import javax.transaction.xa.Xid; import org.apache.commons.lang.builder.HashCodeBuilder; /** * Mule {@link javax.transaction.xa.Xid} implementation */ public class MuleXid implements Xid, Comparable<Xid> { private final int formatId; private final byte[] globalTransactionId; private final byte[] branchQualifier; public MuleXid(int formatId, byte[] globalTransactionId, byte[] branchQualifier) { this.formatId = formatId; this.globalTransactionId = globalTransactionId; this.branchQualifier = branchQualifier; } public MuleXid(Xid txId) { this.formatId = txId.getFormatId(); this.globalTransactionId = txId.getGlobalTransactionId(); this.branchQualifier = txId.getBranchQualifier(); } @Override public int getFormatId() { return formatId; } @Override public byte[] getGlobalTransactionId() { return globalTransactionId; } @Override public byte[] getBranchQualifier() { return branchQualifier; } @Override public boolean equals(Object obj) { if (!(obj instanceof Xid)) { return false; } Xid other = (Xid) obj; return Arrays.equals(getGlobalTransactionId(), other.getGlobalTransactionId()) && Arrays.equals(getBranchQualifier(), other.getBranchQualifier()) && getFormatId() == other.getFormatId(); } @Override public int hashCode() { return formatId * HashCode.fromBytes(globalTransactionId).asInt() * HashCode.fromBytes(branchQualifier).asInt() * 17; } @Override public int compareTo(Xid o) { if (formatId == o.getFormatId() && Arrays.equals(globalTransactionId, o.getGlobalTransactionId()) && Arrays.equals(branchQualifier, o.getBranchQualifier())) { return 0; } return this.hashCode() > o.hashCode() ? 1 : -1; } }