/** * Jooby https://jooby.io * Apache License Version 2.0 https://jooby.io/LICENSE.txt * Copyright 2014 Edgar Espina */ package io.jooby; import io.jooby.internal.SessionImpl; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.time.Instant; import java.util.Map; /** * HTTP session. Only basic data types can be saved into session. * * @author edgar * @since 2.0.0 */ public interface Session { /** Attribute's name. */ String NAME = "session"; /** * Session ID or null for stateless (usually signed) sessions. * * @return Session ID or null for stateless (usually signed) sessions. */ @Nullable String getId(); /** * Set Session ID. * * @param id Session ID or null * @return Session. */ @Nonnull Session setId(@Nullable String id); /** * Get a session attribute. * * @param name Attribute's name. * @return An attribute value or missing value. */ @Nonnull Value get(@Nonnull String name); /** * Put a session attribute. * * @param name Attribute's name. * @param value Attribute's value. * @return This session. */ default @Nonnull Session put(@Nonnull String name, int value) { return put(name, Integer.toString(value)); } /** * Put a session attribute. * * @param name Attribute's name. * @param value Attribute's value. * @return This session. */ default @Nonnull Session put(@Nonnull String name, long value) { return put(name, Long.toString(value)); } /** * Put a session attribute. * * @param name Attribute's name. * @param value Attribute's value. * @return This session. */ default @Nonnull Session put(@Nonnull String name, @Nonnull CharSequence value) { return put(name, value.toString()); } /** * Put a session attribute. * * @param name Attribute's name. * @param value Attribute's value. * @return This session. */ @Nonnull Session put(@Nonnull String name, @Nonnull String value); /** * Put a session attribute. * * @param name Attribute's name. * @param value Attribute's value. * @return This session. */ default @Nonnull Session put(@Nonnull String name, float value) { return put(name, Float.toString(value)); } /** * Put a session attribute. * * @param name Attribute's name. * @param value Attribute's value. * @return This session. */ default @Nonnull Session put(@Nonnull String name, double value) { return put(name, Double.toString(value)); } /** * Put a session attribute. * * @param name Attribute's name. * @param value Attribute's value. * @return This session. */ default @Nonnull Session put(@Nonnull String name, boolean value) { return put(name, Boolean.toString(value)); } /** * Put a session attribute. * * @param name Attribute's name. * @param value Attribute's value. * @return This session. */ default @Nonnull Session put(@Nonnull String name, @Nonnull Number value) { return put(name, value.toString()); } /** * Remove a session attribute. * * @param name Attribute's name. * @return Session attribute or missing value. */ @Nonnull Value remove(@Nonnull String name); /** * Read-only copy of session attributes. * * @return Read-only attributes. */ @Nonnull Map toMap(); /** * Session creation time. * * @return Session creation time. */ @Nonnull Instant getCreationTime(); /** * Set session creation time. * * @param creationTime Session creation time. * @return This session. */ @Nonnull Session setCreationTime(@Nonnull Instant creationTime); /** * Session last accessed time. * * @return Session creation time. */ @Nonnull Instant getLastAccessedTime(); /** * Set session last accessed time. * * @param lastAccessedTime Session creation time. * @return This session. */ @Nonnull Session setLastAccessedTime(@Nonnull Instant lastAccessedTime); /** * True for new sessions. * * @return True for new sessions. */ boolean isNew(); /** * Set new flag. This method is part of public API but shouldn't be use it. * * @param isNew New flag. * @return This session. */ @Nonnull Session setNew(boolean isNew); /** * True for modified/dirty sessions. * * @return True for modified/dirty sessions. */ boolean isModify(); /** * Set modify flag. This method is part of public API but shouldn't be use it. * * @param modify Modify flag. * @return This session. */ @Nonnull Session setModify(boolean modify); /** * Remove all attributes. * * @return This session. */ Session clear(); /** * Destroy/invalidates this session. */ void destroy(); /** * Assign a new ID to the existing session. * @return This session. */ Session renewId(); /** * Creates a new session. * * @param ctx Web context. * @param id Session ID or null. * @return A new session. */ static @Nonnull Session create(@Nonnull Context ctx, @Nullable String id) { return new SessionImpl(ctx, id); } /** * Creates a new session. * * @param ctx Web context. * @param id Session ID or null. * @param data Session attributes. * @return A new session. */ static @Nonnull Session create(@Nonnull Context ctx, @Nullable String id, @Nonnull Map data) { return new SessionImpl(ctx, id, data); } }