public static Ctx open(WithContext context) { Ctx ctx = Ctxs.open(context.tag()); ctx.setExchange(context.exchange()); ctx.setPersister(context.persister()); ctx.setUser(context.user()); Coll.assign(ctx.extras(), U.safe(context.extras())); return ctx; }
private static boolean inValidContext(Req req) { Ctx ctx = Ctxs.get(); Req ctxReq = ctx != null ? (Req) ctx.exchange() : null; U.must(ctx == null || !ctx.isClosed(), "The context for request (%s) is closed!"); U.must(req == ctxReq, "The customization request (%s) doesn't match the context request (%s)!", req, ctxReq); return true; }
@SuppressWarnings("unchecked") public <T> T exchange() { ensureNotClosed(); return (T) exchange; }
@Override public String username() { return Contextual.username(); }
@Override public Set<String> roles() { return Contextual.roles(); }
public static WithContext user(UserInfo user) { return new WithContext().user(user); }
public static WithContext extras(Map<String, Object> extras) { return new WithContext().extras(extras); }
@Override public boolean exists() { return Contextual.hasContext(); }
public static boolean isLoggedIn() { return user().username != null; }
public void setUser(UserInfo user) { ensureNotClosed(); this.user = user; }
public UserInfo user() { ensureNotClosed(); return user; }
public Map<Object, Object> extras() { ensureNotClosed(); return extras; }
public void setExchange(Object exchange) { ensureNotClosed(); this.exchange = exchange; }