001/**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package org.apache.activemq.store.kahadb;
019
020import org.apache.activemq.command.ConnectionId;
021import org.apache.activemq.command.LocalTransactionId;
022import org.apache.activemq.command.TransactionId;
023import org.apache.activemq.command.XATransactionId;
024import org.apache.activemq.protobuf.Buffer;
025import org.apache.activemq.store.kahadb.data.KahaLocalTransactionId;
026import org.apache.activemq.store.kahadb.data.KahaTransactionInfo;
027import org.apache.activemq.store.kahadb.data.KahaXATransactionId;
028
029public class TransactionIdConversion {
030
031    static KahaTransactionInfo convertToLocal(TransactionId tx) {
032        KahaTransactionInfo rc = new KahaTransactionInfo();
033        LocalTransactionId t = (LocalTransactionId) tx;
034        KahaLocalTransactionId kahaTxId = new KahaLocalTransactionId();
035        kahaTxId.setConnectionId(t.getConnectionId().getValue());
036        kahaTxId.setTransacitonId(t.getValue());
037        rc.setLocalTransacitonId(kahaTxId);
038        return rc;
039    }
040
041    static KahaTransactionInfo convert(TransactionId txid) {
042        if (txid == null) {
043            return null;
044        }
045        KahaTransactionInfo rc;
046
047        if (txid.isLocalTransaction()) {
048            rc = convertToLocal(txid);
049        } else {
050            rc = new KahaTransactionInfo();
051            XATransactionId t = (XATransactionId) txid;
052            KahaXATransactionId kahaTxId = new KahaXATransactionId();
053            kahaTxId.setBranchQualifier(new Buffer(t.getBranchQualifier()));
054            kahaTxId.setGlobalTransactionId(new Buffer(t.getGlobalTransactionId()));
055            kahaTxId.setFormatId(t.getFormatId());
056            rc.setXaTransacitonId(kahaTxId);
057        }
058        return rc;
059    }
060
061    static TransactionId convert(KahaTransactionInfo transactionInfo) {
062        if (transactionInfo.hasLocalTransacitonId()) {
063            KahaLocalTransactionId tx = transactionInfo.getLocalTransacitonId();
064            LocalTransactionId rc = new LocalTransactionId();
065            rc.setConnectionId(new ConnectionId(tx.getConnectionId()));
066            rc.setValue(tx.getTransacitonId());
067            return rc;
068        } else {
069            KahaXATransactionId tx = transactionInfo.getXaTransacitonId();
070            XATransactionId rc = new XATransactionId();
071            rc.setBranchQualifier(tx.getBranchQualifier().toByteArray());
072            rc.setGlobalTransactionId(tx.getGlobalTransactionId().toByteArray());
073            rc.setFormatId(tx.getFormatId());
074            return rc;
075        }
076    }
077}