Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / conversations / ConversationContext.java
@vlad20012 vlad20012 on 24 Feb 2017 1 KB initial
package org.bukkit.conversations;

import org.bukkit.plugin.Plugin;

import java.util.Map;

/**
 * A ConversationContext provides continuity between nodes in the prompt graph
 * by giving the developer access to the subject of the conversation and a
 * generic map for storing values that are shared between all {@link Prompt}
 * invocations.
 */
public class ConversationContext
{
	private Conversable forWhom;
	private Map<Object, Object> sessionData;
	private Plugin plugin;

	/**
	 * @param plugin             The owning plugin.
	 * @param forWhom            The subject of the conversation.
	 * @param initialSessionData Any initial values to put in the sessionData
	 *                           map.
	 */
	public ConversationContext(Plugin plugin, Conversable forWhom, Map<Object, Object> initialSessionData)
	{
		this.plugin = plugin;
		this.forWhom = forWhom;
		this.sessionData = initialSessionData;
	}

	/**
	 * Gets the plugin that owns this conversation.
	 *
	 * @return The owning plugin.
	 */
	public Plugin getPlugin()
	{
		return plugin;
	}

	/**
	 * Gets the subject of the conversation.
	 *
	 * @return The subject of the conversation.
	 */
	public Conversable getForWhom()
	{
		return forWhom;
	}

	/**
	 * Gets session data shared between all {@link Prompt} invocations. Use
	 * this as a way to pass data through each Prompt as the conversation
	 * develops.
	 *
	 * @param key The session data key.
	 * @return The requested session data.
	 */
	public Object getSessionData(Object key)
	{
		return sessionData.get(key);
	}

	/**
	 * Sets session data shared between all {@link Prompt} invocations. Use
	 * this as a way to pass data through each prompt as the conversation
	 * develops.
	 *
	 * @param key   The session data key.
	 * @param value The session data value.
	 */
	public void setSessionData(Object key, Object value)
	{
		sessionData.put(key, value);
	}
}