/** * @param value Default value to use. * @return Get a char. */ default char charValue(final char value) { return toOptional(Character.class).orElse(value); }
/** * @param value Default value to use. * @return Get a long. */ default long longValue(final long value) { return toOptional(Long.class).orElse(value); }
/** * @param value Default value to use. * @return Get an integer. */ default int intValue(final int value) { return toOptional(Integer.class).orElse(value); }
/** * Server sent event will send a Last-Event-ID header if the server goes down. * * @param type Last event id type. * @param <T> Event id type. * @return Last event id. */ @Nonnull public <T> Optional<T> lastEventId(final Class<T> type) { return lastEventId.toOptional(type); }
/** * @param value Default value to use. * @return Get a byte. */ default byte byteValue(final byte value) { return toOptional(Byte.class).orElse(value); }
/** * @return An optional string value. */ @Nonnull default Optional<String> toOptional() { return toOptional(String.class); }
/** * @param value Default value to use. * @return Get a float. */ default float floatValue(final float value) { return toOptional(Float.class).orElse(value); }
/** * @param value Default value to use. * @return Get a boolean. */ default boolean booleanValue(final boolean value) { return toOptional(Boolean.class).orElse(value); }
/** * @param value Default value to use. * @return Get a short value. */ default short shortValue(final short value) { return toOptional(Short.class).orElse(value); }
/** * @param value Default value to use. * @return Get a double. */ default double doubleValue(final double value) { return toOptional(Double.class).orElse(value); }
/** * @param value Default value to use. * @return Get a string. */ @Nonnull default String value(final String value) { return toOptional().orElse(value); }
/** * @param value Default value to use. * @param <T> Enum type. * @return Get an enum. */ @SuppressWarnings("unchecked") @Nonnull default <T extends Enum<T>> T toEnum(final T value) { Optional<T> optional = (Optional<T>) toOptional(value.getClass()); return optional.orElse(value); }
/** * @return True if the <code>X-Requested-With</code> header is set to <code>XMLHttpRequest</code>. */ default boolean xhr() { return header("X-Requested-With") .toOptional(String.class) .map("XMLHttpRequest"::equalsIgnoreCase) .orElse(Boolean.FALSE); }
@Override public Object resolve(final Object context, final String name) { Object value = null; if (context instanceof Session) { Session session = (Session) context; value = session.isDestroyed() ? null : session.get(name).toOptional().orElse(null); } return value == null ? UNRESOLVED : value; }
@Override public Object get(WebContext context, String key) { return req.ifSession() .map(session -> { String value = session.get(key).toOptional().orElse(null); return strToObject(value); }).orElse(null); }
@Override public Optional<U> get(final String id) throws Exception { Session session = this.session.get(); return get(session.get(key(id)).toOptional()); }
@Override public Optional<U> unset(final String id) throws Exception { Session session = this.session.get(); return get(session.unset(key(id)).toOptional()); }
@Override public void handle(final Request req, final Response rsp, final Chain chain) throws Throwable { Optional<String> origin = req.header("Origin").toOptional(); Cors cors = this.cors.orElseGet(() -> req.require(Cors.class)); if (cors.enabled() && origin.isPresent()) { cors(cors, req, rsp, origin.get()); } chain.next(req, rsp); }
@Override public void handle(final Request req, final Response rsp, final Route.Chain chain) throws Throwable { Optional<String> value = req.cookie(cname).toOptional(); Map<String, String> source = value.map(decoder::apply) .orElseGet(HashMap::new); FlashMap flashScope = new FlashMap(source); req.set(FlashScope.NAME, flashScope); // wrap & proceed rsp.after(finalizeFlash(source, flashScope)); chain.next(req, rsp); }
@Override public Session get(final Request req, final Response rsp) { return req.cookie(cookie.name().get()).toOptional().map(raw -> { SessionImpl.Builder session = new SessionImpl.Builder(resolver, false, Session.COOKIE_SESSION, -1); Map<String, String> attributes = attributes(raw); session.set(attributes); rsp.after(saveCookie()); return session.build(); }).orElse(null); }