package io.github.ibuildthecloud.gdapi.context;
import io.github.ibuildthecloud.gdapi.factory.SchemaFactory;
import io.github.ibuildthecloud.gdapi.id.IdFormatter;
import io.github.ibuildthecloud.gdapi.id.IdentityFormatter;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import io.github.ibuildthecloud.gdapi.url.DefaultUrlBuilder;
import io.github.ibuildthecloud.gdapi.url.NullUrlBuilder;
import io.github.ibuildthecloud.gdapi.url.UrlBuilder;
import io.github.ibuildthecloud.gdapi.util.TransformationService;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.cloudstack.managed.threadlocal.ManagedThreadLocal;
public class ApiContext {
private static final ThreadLocal<ApiContext> TL = new ManagedThreadLocal<ApiContext>();
ApiRequest apiRequest;
IdFormatter idFormatter = new IdentityFormatter();
Object policy;
Map<Object, List<String>> dynamicCapabilities = new HashMap<>();
TransformationService transformationService;
protected ApiContext() {
super();
}
public static ApiContext getContext() {
return TL.get();
}
public static void setContext(ApiContext context) {
TL.set(context);
}
public static SchemaFactory getSchemaFactory() {
return getContext().getApiRequest().getSchemaFactory();
}
public static ApiContext newContext() {
ApiContext context = new ApiContext();
TL.set(context);
return context;
}
public static void remove() {
TL.remove();
}
public static UrlBuilder getUrlBuilder() {
ApiContext context = ApiContext.getContext();
if (context != null) {
UrlBuilder writer = context.getApiRequest().getUrlBuilder();
if (writer == null) {
DefaultUrlBuilder urlWriter = new DefaultUrlBuilder(context.getApiRequest(), ApiContext.getSchemaFactory());
String subContext = context.getApiRequest().getSubContext();
if (subContext != null) {
urlWriter.setSubContext(subContext);
}
writer = urlWriter;
context.getApiRequest().setUrlBuilder(writer);
}
return writer;
}
return new NullUrlBuilder();
}
public ApiRequest getApiRequest() {
return apiRequest;
}
public void setApiRequest(ApiRequest apiRequest) {
this.apiRequest = apiRequest;
}
public Object getPolicy() {
return policy;
}
public void setPolicy(Object policy) {
this.policy = policy;
}
public IdFormatter getIdFormatter() {
return idFormatter;
}
public void setIdFormatter(IdFormatter idFormatter) {
this.idFormatter = idFormatter;
}
public TransformationService getTransformationService() {
return this.transformationService;
}
public void setTransformationService(TransformationService transformationService) {
this.transformationService = transformationService;
}
public void addCapability(Object object, String capability) {
if (dynamicCapabilities.get(object) == null){
dynamicCapabilities.put(object, new ArrayList<String>());
}
dynamicCapabilities.get(object).add(capability);
}
public void setCapabilities(Object object, List<String> capabilities){
dynamicCapabilities.put(object, capabilities);
}
public List<String> getCapabilities(Object object){
return dynamicCapabilities.get(object);
}
}