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 }