package org.basex.modules; import java.util.*; import javax.servlet.http.*; import org.basex.http.*; import org.basex.query.*; import org.basex.query.value.*; import org.basex.query.value.item.*; import org.basex.query.value.seq.*; import org.basex.util.list.*; /** * This module contains functions for processing global sessions. * * @author BaseX Team 2005-17, BSD License * @author Christian Gruen */ public final class Sessions extends QueryModule { /** * Returns the ids of all registered sessions. * @return session ids */ public static Value ids() { final HashMap<String, HttpSession> http = SessionListener.sessions(); final TokenList tl = new TokenList(http.size()); for(final String s : http.keySet()) tl.add(s); return StrSeq.get(tl); } /** * Returns the creation time of the session. * @param id session id * @return creation time * @throws QueryException query exception */ @Requires(Permission.NONE) public Dtm created(final Str id) throws QueryException { return session(id).created(); } /** * Returns the last access time of the session. * @param id session id * @return creation time * @throws QueryException query exception */ @Requires(Permission.NONE) public Dtm accessed(final Str id) throws QueryException { return session(id).accessed(); } /** * Returns all attributes of a session. * @param id session id * @return session attributes * @throws QueryException query exception */ public Value names(final Str id) throws QueryException { return session(id).names(); } /** * Returns the specified session attribute of a session. * @param id session id * @param key key to be requested * @return session attribute * @throws QueryException query exception */ public Value get(final Str id, final Str key) throws QueryException { return session(id).get(key); } /** * Returns the specified session attribute of a session. * @param id session id * @param key key to be requested * @param def default item * @return session attribute * @throws QueryException query exception */ public Value get(final Str id, final Str key, final Item def) throws QueryException { return session(id).get(key, def); } /** * Updates a session attribute. * @param id session id * @param key key of the attribute * @param item item to be stored * @throws QueryException query exception */ public void set(final Str id, final Str key, final Item item) throws QueryException { session(id).set(key, item); } /** * Removes a session attribute. * @param id session id * @param key key of the attribute * @throws QueryException query exception */ public void delete(final Str id, final Str key) throws QueryException { session(id).delete(key); } /** * Closes a session. * @param id session id * @throws QueryException query exception */ public void close(final Str id) throws QueryException { session(id).close(); } /** * Returns a session instance. * @param id session id * @return request * @throws QueryException query exception */ private ASession session(final Str id) throws QueryException { if(queryContext.http == null) throw SessionErrors.noContext(); final HashMap<String, HttpSession> http = SessionListener.sessions(); final HttpSession session = id != null ? http.get(id.toJava()) : null; if(session == null) throw SessionErrors.whichSession(id); return new ASession(session, queryContext); } }