/*
* Copyright (c) 2008-2012 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.security.authorization;
import com.emc.storageos.db.client.model.*;
import java.net.URI;
import java.util.HashMap;
/**
* Class for caching objects to thread local
*/
public class QueriedObjectCache {
private static final String ROOT_TENANT_KEY = "ROOT_TENANT";
// a safety net in case the thread local cache is abused, like in CQ607847
private static final int MAX_LIMIT = 4096;
/**
* ThreadLocal - HashMap, maps URI/String to a DataObject
*/
private static final ThreadLocal QUERIED_OBJECT_MAP = new ThreadLocal() {
protected Object initialValue() {
return new HashMap<String, DataObject>();
}
};
/**
* Returns thread local map instance
*
* @return
*/
private static HashMap<String, DataObject> get() {
return (HashMap<String, DataObject>) QUERIED_OBJECT_MAP.get();
}
/**
* Add an object into the map
*
* @param object DataObject to add to map
*/
public static void setObject(DataObject object) {
if (get().size() < MAX_LIMIT) {
get().put(object.getId().toString(), object);
}
}
/**
* get an object from the map
*
* @param id URI of the object
* @clazz DataObject type
*/
public static <T extends DataObject> T getObject(URI id, Class<T> clazz) {
return (clazz.cast(get().get(id.toString())));
}
/**
* Save root tenant object into map
*
* @param tenant
*/
public static void setRootTenantObject(TenantOrg tenant) {
if (get().size() < MAX_LIMIT) {
get().put(ROOT_TENANT_KEY, tenant);
}
}
/**
* Get root tenant object
*
* @return TenantOrg object for root tenant
*/
public static TenantOrg getRootTenantOrgObject() {
return (TenantOrg) get().get(ROOT_TENANT_KEY);
}
public static void clearCache() {
get().clear();
}
}