001    package org.bukkit.conversations;
002    
003    import java.util.EventObject;
004    
005    /**
006     * ConversationAbandonedEvent contains information about an abandoned
007     * conversation.
008     */
009    public class ConversationAbandonedEvent extends EventObject {
010    
011        private ConversationContext context;
012        private ConversationCanceller canceller;
013    
014        public ConversationAbandonedEvent(Conversation conversation) {
015            this(conversation, null);
016        }
017    
018        public ConversationAbandonedEvent(Conversation conversation, ConversationCanceller canceller) {
019            super(conversation);
020            this.context = conversation.getContext();
021            this.canceller = canceller;
022        }
023    
024        /**
025         * Gets the object that caused the conversation to be abandoned.
026         *
027         * @return The object that abandoned the conversation.
028         */
029        public ConversationCanceller getCanceller() {
030            return canceller;
031        }
032    
033        /**
034         * Gets the abandoned conversation's conversation context.
035         *
036         * @return The abandoned conversation's conversation context.
037         */
038        public ConversationContext getContext() {
039            return context;
040        }
041    
042        /**
043         * Indicates how the conversation was abandoned - naturally as part of the
044         * prompt chain or prematurely via a {@link ConversationCanceller}.
045         *
046         * @return True if the conversation is abandoned gracefully by a {@link
047         *     Prompt} returning null or the next prompt. False of the
048         *     conversations is abandoned prematurely by a ConversationCanceller.
049         */
050        public boolean gracefulExit() {
051            return canceller == null;
052        }
053    }