View Javadoc
1   package net.secodo.jcircuitbreaker.breaker.execution.impl;
2   
3   import java.util.Collection;
4   import java.util.Collections;
5   import java.util.HashMap;
6   import java.util.Map;
7   import java.util.concurrent.ConcurrentHashMap;
8   
9   import net.secodo.jcircuitbreaker.breaker.execution.ExecutedTask;
10  import net.secodo.jcircuitbreaker.breaker.execution.ExecutionContext;
11  
12  
13  public class DefaultExecutionContextImpl<R> implements ExecutionContext<R> {
14    private final ConcurrentHashMap<String, ExecutedTask<R>> tasksInProgress;
15    private final Object userData;
16    private Map<String, Object> contextAttributes;
17  
18    public DefaultExecutionContextImpl(ConcurrentHashMap<String, ExecutedTask<R>> tasksInProgress, Object userData) {
19      this.tasksInProgress = tasksInProgress;
20      this.userData = userData;
21    }
22  
23  
24    @Override
25    public Collection<ExecutedTask<R>> getExecutionsInProgress() {
26      return Collections.unmodifiableCollection(tasksInProgress.values());
27    }
28  
29    @Override
30    @SuppressWarnings("unchecked")
31    public <U> U getUserData() {
32      return (U) userData;
33    }
34  
35    @Override
36    public <T> void setContextAttribute(String name, T value) {
37      ensureAttributesInitialized();
38      contextAttributes.put(name, value);
39    }
40  
41    @Override
42    public boolean hasContextAttribute(String name) {
43      return (contextAttributes != null) ? contextAttributes.containsKey(name) : false;
44    }
45  
46    @Override
47    @SuppressWarnings("unchecked")
48    public <T> T getContextAttribute(String name) {
49      return (contextAttributes != null) ? (T) contextAttributes.get(name) : null;
50    }
51  
52    private void ensureAttributesInitialized() {
53      if (contextAttributes == null) {
54        contextAttributes = new HashMap<String, Object>();
55      }
56    }
57  }