package org.openxdm.xcap.server.slee.resource.appusagecache; import org.apache.log4j.Logger; import org.openxdm.xcap.common.appusage.AppUsage; import org.openxdm.xcap.common.appusage.AppUsageFactory; public class AppUsageCacheResourceAdaptorSbbInterfaceImpl implements AppUsageCacheResourceAdaptorSbbInterface { private AppUsageCacheResourceAdaptor ra; private static Logger logger = Logger.getLogger(AppUsageCacheResourceAdaptorSbbInterface.class); public AppUsageCacheResourceAdaptorSbbInterfaceImpl(AppUsageCacheResourceAdaptor ra) { this.ra = ra; } public void put(AppUsageFactory appUsageFactory) { // create new pool AppUsagePool pool = new AppUsagePool(appUsageFactory,ra.getAppUsagePoolSize()); // add to pools atomically, if not there ra.getPools().putIfAbsent(appUsageFactory.getAppUsageId(),pool); if(logger.isDebugEnabled()) { logger.debug("created pool for app usage "+appUsageFactory.getAppUsageId()); } } public AppUsage borrow(String auid) throws InterruptedException { if(logger.isDebugEnabled()) { logger.debug("borrow(auid="+auid+")"); } AppUsagePool pool = ra.getPools().get(auid); if (pool != null) { return pool.borrow(); } else { return null; } } public void release(AppUsage appUsage) { if(logger.isDebugEnabled()) { logger.debug("release(auid="+appUsage.getAUID()+")"); } AppUsagePool pool = ra.getPools().get(appUsage.getAUID()); if (pool != null) { pool.release(appUsage); } } public void remove(String auid) { if(logger.isDebugEnabled()) { logger.debug("remove(auid="+auid+")"); } ra.getPools().remove(auid); } }