001    /*
002     * Copyright (c) 2005 Your Corporation. All Rights Reserved.
003     */
004    package org.activemq.transport.stomp;
005    
006    import org.activemq.message.TransactionInfo;
007    import org.activemq.message.TransactionType;
008    
009    import java.io.DataInput;
010    import java.io.IOException;
011    import java.util.Properties;
012    import java.net.ProtocolException;
013    
014    public class Begin implements Command
015    {
016        private StompWireFormat format;
017        private static final HeaderParser parser = new HeaderParser();
018    
019        public Begin(StompWireFormat format)
020        {
021            this.format = format;
022        }
023    
024        public PacketEnvelope build(String commandLine, DataInput in) throws IOException
025        {
026            Properties headers = parser.parse(in);
027            while (in.readByte() != 0) {}
028    
029            TransactionInfo tx = new TransactionInfo();
030            String user_tx_id = headers.getProperty(Stomp.Headers.TRANSACTION);
031            if (!headers.containsKey(Stomp.Headers.TRANSACTION))
032            {
033                throw new ProtocolException("Must specify the transaction you are beginning");
034            }
035            String tx_id = StompWireFormat.clientIds.generateId();
036            format.registerTransactionId(user_tx_id, tx_id);
037            tx.setTransactionId(tx_id);
038            tx.setType(TransactionType.START);
039            return new PacketEnvelope(tx, headers);
040        }
041    }