Uso de la sesión en un paquete personalizado
Las acciones deben extraer la sesión requerida del SessionsMap según el nombre de sesión.
La instancia de SessionsMap puede recibirse mediante el atributo Sessions. La anotación puede aplicarse únicamente al campo de la clase y se espera que exista el método setter público correspondiente. La variable debe ser de tipo Map<String,Object>.
@BotCommand
@CommandPkg(label = "Start session", name = "startSession", description = "Start new session",
icon = "pkg.svg", node_label = "start session {{sessionName}}|") public class Start {
@Sessions
private Map<String, Object> sessions;
@Execute
public void start(@Idx(index = "1", type = TEXT) @Pkg(label = "Session name",
default_value_type = STRING, default_value = "Default") @NotEmpty String sessionName) {
// Check for existing session
if (sessions.containsKey(sessionName))
throw new BotCommandException(MESSAGES.getString("xml.SessionNameInUse", sessionName));
// Do some operation
// Create new session
sessions.put(sessionName, new Session(operation));
}
public void setSessions(Map<String, Object> sessions) {
this.sessions = sessions;
}
}
@BotCommand
@CommandPkg(label = "End session", name = "endSession", description = "End session", icon =
"pkg.svg", node_label = "End session {{sessionName}}|")
public class EndSession {
@Sessions
private Map<String, Object> sessions;
@Execute
public void end(
@Idx(index = "1", type = TEXT) @Pkg(label = "Session name", default_value_type = STRING,
default_value = "Default") @NotEmpty String sessionName) {
sessions.remove(sessionName);
}
public void setSessions(Map<String, Object> sessions) {
this.sessions = sessions;
}
}