/**
*
*/
package org.minnal.core;
import org.minnal.core.config.ApplicationConfiguration;
import org.minnal.core.config.ResourceConfiguration;
import org.minnal.core.config.RouteConfiguration;
/**
* Application context specific to the current thread
*
* @author ganeshs
*
*/
public class ApplicationContext {
private static final ThreadLocal<Context> context = new ThreadLocal<ApplicationContext.Context>();
private static ApplicationContext applicationContext = new ApplicationContext();
/**
* Single instance
*
* @return
*/
public static ApplicationContext instance() {
return applicationContext;
}
/**
* Returns the application configuration for the current request
*
* @return
*/
public ApplicationConfiguration getApplicationConfiguration() {
return getContext().getApplicationConfiguration();
}
/**
* Returns the resource configuration for the current request
*
* @return
*/
public ResourceConfiguration getResourceConfiguration() {
return getContext().getResourceConfiguration();
}
/**
* Returns the route configuration for the current request
*
* @return
*/
public RouteConfiguration getRouteConfiguration() {
return getContext().getRouteConfiguration();
}
/**
* Sets the application configuration for the current request
*
* @param configuration
*/
void setApplicationConfiguration(ApplicationConfiguration configuration) {
getContext().setApplicationConfiguration(configuration);
}
/**
* Sets the resource configuration for the current request
*
* @param configuration
*/
void setResourceConfiguration(ResourceConfiguration configuration) {
getContext().setResourceConfiguration(configuration);
}
/**
* Sets the route configuration for the current request
*
* @param configuration
*/
void setRouteConfiguration(RouteConfiguration configuration) {
getContext().setRouteConfiguration(configuration);
}
/**
* Returns the context
*
* @return
*/
private Context getContext() {
Context cxt = context.get();
if (cxt == null) {
cxt = new Context();
context.set(cxt);
}
return cxt;
}
/**
* Clears the context;
*/
public void clear() {
context.remove();
}
/**
* @author ganeshs
*
*/
private static class Context {
private ApplicationConfiguration applicationConfiguration;
private RouteConfiguration routeConfiguration;
private ResourceConfiguration resourceConfiguration;
/**
* @return the applicationConfiguration
*/
public ApplicationConfiguration getApplicationConfiguration() {
return applicationConfiguration;
}
/**
* @param applicationConfiguration the applicationConfiguration to set
*/
public void setApplicationConfiguration(
ApplicationConfiguration applicationConfiguration) {
this.applicationConfiguration = applicationConfiguration;
}
/**
* @return the routeConfiguration
*/
public RouteConfiguration getRouteConfiguration() {
return routeConfiguration;
}
/**
* @param routeConfiguration the routeConfiguration to set
*/
public void setRouteConfiguration(RouteConfiguration routeConfiguration) {
this.routeConfiguration = routeConfiguration;
}
/**
* @return the resourceConfiguration
*/
public ResourceConfiguration getResourceConfiguration() {
return resourceConfiguration;
}
/**
* @param resourceConfiguration the resourceConfiguration to set
*/
public void setResourceConfiguration(ResourceConfiguration resourceConfiguration) {
this.resourceConfiguration = resourceConfiguration;
}
}
}