package com.sequenceiq.cloudbreak.cloud.model.generic; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * Generic mode to hold dynamic data, any data stored in the DynamicModel must be threadsafe in that sense that multiple threads might be * using it, but of course it is never used concurrently. In other words if you store anything in thread local then it might not be available * in a subsequent calls. * */ public class DynamicModel { private final Map<String, Object> parameters; public DynamicModel() { parameters = new HashMap<>(); } public DynamicModel(Map<String, Object> parameters) { this.parameters = parameters; } @SuppressWarnings("unchecked") public <T> T getParameter(String key, Class<T> clazz) { return (T) parameters.get(key); } @SuppressWarnings("unchecked") public <T> T getParameter(Class<T> clazz) { return (T) parameters.get(clazz.getName()); } public String getStringParameter(String key) { return getParameter(key, String.class); } public void putParameter(String key, Object value) { parameters.put(key, value); } public void putParameter(Class clazz, Object value) { putParameter(clazz.getName(), value); } public Map<String, Object> getParameters() { return Collections.unmodifiableMap(parameters); } }