DomainLimitsDB.java

package sk.iway.iwcm.dmail;

import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import sk.iway.iwcm.database.JpaDB;

/**
 *  DomainLimitsDB.java
 *
 *@Title        webjet7
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2013
 *@author       $Author: jeeff mhalas $
 *@version      $Revision: 1.3 $
 *@created      Date: 24.7.2013 15:25:23
 *@modified     $Date: 2004/08/16 06:26:11 $
 */
public class DomainLimitsDB extends JpaDB<DomainLimitBean>
{

	private static DomainLimitsDB instance = null;
	private static final Object classLock = DomainLimitsDB.class;

	private static ConcurrentMap<String,DomainLimitBean> domainLimits = new ConcurrentHashMap<>();

	public static DomainLimitsDB getInstance()
	{
		return getInstance(false);
	}

	public static DomainLimitsDB getInstance(boolean forceRefresh)
	{
		//jeeff: aby sme zbytocne nemali synchronized blok
		if (forceRefresh==false && instance != null) return instance;

		synchronized (classLock)
		{
			if (instance == null || forceRefresh)
			{
				instance = new DomainLimitsDB();
				Collection<DomainLimitBean> allLimits = instance.getAll();
				if(allLimits != null) {
					//domainLimits = Lambda.index(allLimits, Lambda.on(DomainLimitBean.class).getDomain());
					domainLimits = new ConcurrentHashMap<>();
					allLimits.forEach(domainLimit -> domainLimits.put(domainLimit.getDomain(), domainLimit));
				}

			}
			return instance;
		}
	}
	public static void refresh()
	{
		instance=null;
	}

	private DomainLimitsDB()
	{
		super(DomainLimitBean.class);
	}

	/**
	 * Skontroluje ci existuje pre danu domenu nejaky limit
	 * @param domain domena
	 * @return
	 */
	public boolean existsDomainLimit(String domain)
	{
		return domainLimits.containsKey(domain);
	}

}