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 */
017package org.apache.activemq.command;
018
019import java.io.IOException;
020
021import org.apache.activemq.state.CommandVisitor;
022
023/**
024 * Removes a consumer, producer, session or connection.
025 * 
026 * @openwire:marshaller code="12"
027 * 
028 */
029public class RemoveInfo extends BaseCommand {
030
031    public static final byte DATA_STRUCTURE_TYPE = CommandTypes.REMOVE_INFO;
032
033    protected DataStructure objectId;
034    protected long lastDeliveredSequenceId;
035
036    public RemoveInfo() {
037    }
038
039    public RemoveInfo(DataStructure objectId) {
040        this.objectId = objectId;
041    }
042
043    public byte getDataStructureType() {
044        return DATA_STRUCTURE_TYPE;
045    }
046
047    /**
048     * @openwire:property version=1 cache=true
049     */
050    public DataStructure getObjectId() {
051        return objectId;
052    }
053
054    public void setObjectId(DataStructure objectId) {
055        this.objectId = objectId;
056    }
057
058    /**
059     * @openwire:property version=5 cache=false
060     */
061    public long getLastDeliveredSequenceId() {
062        return lastDeliveredSequenceId;
063    }
064
065    public void setLastDeliveredSequenceId(long lastDeliveredSequenceId) {
066        this.lastDeliveredSequenceId = lastDeliveredSequenceId;
067    }
068
069    public Response visit(CommandVisitor visitor) throws Exception {
070        switch (objectId.getDataStructureType()) {
071        case ConnectionId.DATA_STRUCTURE_TYPE:
072            return visitor.processRemoveConnection((ConnectionId)objectId, lastDeliveredSequenceId);
073        case SessionId.DATA_STRUCTURE_TYPE:
074            return visitor.processRemoveSession((SessionId)objectId, lastDeliveredSequenceId);
075        case ConsumerId.DATA_STRUCTURE_TYPE:
076            return visitor.processRemoveConsumer((ConsumerId)objectId, lastDeliveredSequenceId);
077        case ProducerId.DATA_STRUCTURE_TYPE:
078            return visitor.processRemoveProducer((ProducerId)objectId);
079        default:
080            throw new IOException("Unknown remove command type: " + objectId.getDataStructureType());
081        }
082    }
083
084    /**
085     * Returns true if this event is for a removed connection
086     */
087    public boolean isConnectionRemove() {
088        return objectId.getDataStructureType() == ConnectionId.DATA_STRUCTURE_TYPE;
089    }
090
091    /**
092     * Returns true if this event is for a removed session
093     */
094    public boolean isSessionRemove() {
095        return objectId.getDataStructureType() == SessionId.DATA_STRUCTURE_TYPE;
096    }
097
098    /**
099     * Returns true if this event is for a removed consumer
100     */
101    public boolean isConsumerRemove() {
102        return objectId.getDataStructureType() == ConsumerId.DATA_STRUCTURE_TYPE;
103    }
104
105    /**
106     * Returns true if this event is for a removed producer
107     */
108    public boolean isProducerRemove() {
109        return objectId.getDataStructureType() == ProducerId.DATA_STRUCTURE_TYPE;
110    }
111
112}