001 package org.bukkit.conversations; 002 003 import org.bukkit.plugin.Plugin; 004 005 import java.util.Map; 006 007 /** 008 * A ConversationContext provides continuity between nodes in the prompt graph 009 * by giving the developer access to the subject of the conversation and a 010 * generic map for storing values that are shared between all {@link Prompt} 011 * invocations. 012 */ 013 public class ConversationContext { 014 private Conversable forWhom; 015 private Map<Object, Object> sessionData; 016 private Plugin plugin; 017 018 /** 019 * @param plugin The owning plugin. 020 * @param forWhom The subject of the conversation. 021 * @param initialSessionData Any initial values to put in the sessionData 022 * map. 023 */ 024 public ConversationContext(Plugin plugin, Conversable forWhom, Map<Object, Object> initialSessionData) { 025 this.plugin = plugin; 026 this.forWhom = forWhom; 027 this.sessionData = initialSessionData; 028 } 029 030 /** 031 * Gets the plugin that owns this conversation. 032 * 033 * @return The owning plugin. 034 */ 035 public Plugin getPlugin() { 036 return plugin; 037 } 038 039 /** 040 * Gets the subject of the conversation. 041 * 042 * @return The subject of the conversation. 043 */ 044 public Conversable getForWhom() { 045 return forWhom; 046 } 047 048 /** 049 * Gets session data shared between all {@link Prompt} invocations. Use 050 * this as a way to pass data through each Prompt as the conversation 051 * develops. 052 * 053 * @param key The session data key. 054 * @return The requested session data. 055 */ 056 public Object getSessionData(Object key) { 057 return sessionData.get(key); 058 } 059 060 /** 061 * Sets session data shared between all {@link Prompt} invocations. Use 062 * this as a way to pass data through each prompt as the conversation 063 * develops. 064 * 065 * @param key The session data key. 066 * @param value The session data value. 067 */ 068 public void setSessionData(Object key, Object value) { 069 sessionData.put(key, value); 070 } 071 }