package org.malagu.multitenant.service;

import java.util.List;

import org.malagu.linq.JpaUtil;
import org.malagu.multitenant.domain.Organization;
import org.malagu.multitenant.resource.ResourceAllocator;
import org.malagu.multitenant.resource.ResourceReleaser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


/**
 * @author Kevin Yang (mailto:[email protected])
 * @since 2017年11月24日
 */
@Service
@Transactional(readOnly = true)
public class OrganizationServiceImpl implements OrganizationService {

	@Autowired
	private List<ResourceAllocator> allocators;
	
	@Autowired
	private List<ResourceReleaser> releasers;
	
	@Override
	public Organization get(String id) {
		return JpaUtil.getOne(Organization.class, id);
	}

	@Override
	@Transactional
	public void register(Organization organization) {
		for (ResourceAllocator allocator : allocators) {
			allocator.allocate(organization);
		}
		JpaUtil.persist(organization);
	}
	
	@Override
	@Transactional
	public void allocteResource(Organization organization) {
		for (ResourceAllocator allocator : allocators) {
			allocator.allocate(organization);
		}
	}

	@Override
	@Transactional
	public void releaseResource(Organization organization) {
		for (ResourceReleaser releaser : releasers) {
			releaser.release(organization);
		}
	}

}