/*
 * Entity - Entity is an object-relational mapping tool for the D programming language. Referring to the design idea of JPA.
 *
 * Copyright (C) 2015-2018  Shanghai Putao Technology Co., Ltd
 *
 * Developer: HuntLabs.cn
 *
 * Licensed under the Apache-2.0 License.
 *
 */

module hunt.entity.Persistence;

import hunt.entity;

import hunt.entity.DefaultEntityManagerFactory;
import hunt.entity.EntityOption;

private __gshared EntityManagerFactory[string] _factories;

class Persistence
{

    public static EntityManagerFactory createEntityManagerFactory(EntityOption option)
	{
		return createEntityManagerFactory(defaultEntityManagerFactoryName(), option);
	}

    public static EntityManagerFactory createEntityManagerFactory(string name, EntityOption option)
	{
		if (name in _factories)
			return _factories[name];
		
		auto factory = new EntityManagerFactory(name, option);
		_factories[name] = factory;
		if (defaultEntityManagerFactoryName() == name)
		{
			setDefaultEntityManagerFactory(factory);
		}
		return factory;
	}

    public static EntityManagerFactory getEntityManagerFactory(string name = defaultEntityManagerFactoryName())
	{
		return _factories[name];
	}
}