protected void removeExecutionContextFromUserSession(UserSession userSession, ExecutionContext context) { List<ExecutionContext> executions = userSession.getLocalAttribute(EXECUTIONS_ATTR); if (executions != null) { executions.remove(context); } }
@Override public List<String> getUrls(String selectorId) { return userSession.getLocalAttribute(getAttributeName(selectorId)); }
protected List<ExecutionContext> findExecutionContextsByKeyAndGroup(UserSession userSession, String group, String key) { List<ExecutionContext> executions = userSession.getLocalAttribute(EXECUTIONS_ATTR); List<ExecutionContext> filtered = new ArrayList<>(); if (executions != null) { executions = new ArrayList<>(executions); for (ExecutionContext context : executions) { if (Objects.equals(context.getGroup(), group) && Objects.equals(context.getKey(), key)) { filtered.add(context); } } } return filtered; }
public ExecutionContext startExecution(String key, String group) { if (ExecutionContextHolder.getCurrentContext() != null) { throw new IllegalStateException("Execution context already started"); } log.debug("Start execution context: group={}, key={}", group, key); ExecutionContextImpl context = new ExecutionContextImpl(Thread.currentThread(), key, group, timeSource.currentTimestamp()); UserSession userSession = userSessionSource.getUserSession(); CopyOnWriteArrayList<ExecutionContextImpl> executions = userSession.getLocalAttribute(EXECUTIONS_ATTR); if (executions == null) { userSession.setLocalAttributeIfAbsent(EXECUTIONS_ATTR, new CopyOnWriteArrayList<>()); executions = userSession.getLocalAttribute(EXECUTIONS_ATTR); } executions.add(context); ExecutionContextHolder.setCurrentContext(context); return context; }