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    package org.apache.activemq.command;
018    
019    import org.apache.activemq.state.CommandVisitor;
020    
021    /**
022     * 
023     * @openwire:marshaller code="6"
024     * 
025     */
026    public class ProducerInfo extends BaseCommand {
027    
028        public static final byte DATA_STRUCTURE_TYPE = CommandTypes.PRODUCER_INFO;
029    
030        protected ProducerId producerId;
031        protected ActiveMQDestination destination;
032        protected BrokerId[] brokerPath;
033        protected boolean dispatchAsync;
034        protected int windowSize;
035    
036        public ProducerInfo() {
037        }
038    
039        public ProducerInfo(ProducerId producerId) {
040            this.producerId = producerId;
041        }
042    
043        public ProducerInfo(SessionInfo sessionInfo, long producerId) {
044            this.producerId = new ProducerId(sessionInfo.getSessionId(), producerId);
045        }
046    
047        public ProducerInfo copy() {
048            ProducerInfo info = new ProducerInfo();
049            copy(info);
050            return info;
051        }
052    
053        public void copy(ProducerInfo info) {
054            super.copy(info);
055            info.producerId = producerId;
056            info.destination = destination;
057        }
058    
059        public byte getDataStructureType() {
060            return DATA_STRUCTURE_TYPE;
061        }
062    
063        /**
064         * @openwire:property version=1 cache=true
065         */
066        public ProducerId getProducerId() {
067            return producerId;
068        }
069    
070        public void setProducerId(ProducerId producerId) {
071            this.producerId = producerId;
072        }
073    
074        /**
075         * @openwire:property version=1 cache=true
076         */
077        public ActiveMQDestination getDestination() {
078            return destination;
079        }
080    
081        public void setDestination(ActiveMQDestination destination) {
082            this.destination = destination;
083        }
084    
085        public RemoveInfo createRemoveCommand() {
086            RemoveInfo command = new RemoveInfo(getProducerId());
087            command.setResponseRequired(isResponseRequired());
088            return command;
089        }
090    
091        /**
092         * The route of brokers the command has moved through.
093         * 
094         * @openwire:property version=1 cache=true
095         */
096        public BrokerId[] getBrokerPath() {
097            return brokerPath;
098        }
099    
100        public void setBrokerPath(BrokerId[] brokerPath) {
101            this.brokerPath = brokerPath;
102        }
103    
104        public Response visit(CommandVisitor visitor) throws Exception {
105            return visitor.processAddProducer(this);
106        }
107    
108        /**
109         * If the broker should dispatch messages from this producer async. Since
110         * sync dispatch could potentally block the producer thread, this could be
111         * an important setting for the producer.
112         * 
113         * @openwire:property version=2
114         */
115        public boolean isDispatchAsync() {
116            return dispatchAsync;
117        }
118    
119        public void setDispatchAsync(boolean dispatchAsync) {
120            this.dispatchAsync = dispatchAsync;
121        }
122    
123        /**
124         * Used to configure the producer window size. A producer will send up to
125         * the configured window size worth of payload data to the broker before
126         * waiting for an Ack that allows him to send more.
127         * 
128         * @openwire:property version=3
129         */
130        public int getWindowSize() {
131            return windowSize;
132        }
133    
134        public void setWindowSize(int windowSize) {
135            this.windowSize = windowSize;
136        }
137    
138    }