/*
 * Copyright (C) 2005-2012
 * Alfresco Software Limited.
 *
 * This file is part of Alfresco
 *
 * Alfresco is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Alfresco is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Alfresco. If not, see 
 * public class YourTestClass
 * {
 *     // Initialise the spring application context and tenant in a rule chain
 *     public static final ApplicationContextInit APP_CONTEXT_RULE = new ApplicationContextInit();
 *     public static final AlfrescoTenant TENANT_RULE = new AlfrescoTenant(APP_CONTEXT_RULE, "testtenant");
 *     
 *     @ClassRule public static RuleChain ruleChain = RuleChain.outerRule(APP_CONTEXT_INIT)
 *         		                                                .around(TENANT);
 *     
 *     // We pass the rule that creates the spring application context.
 *     // This rule will give us a user with username 'AlexM@testtenant'.
 *     @Rule public final TenantPerson namedPerson = new AlfrescoPerson(APP_CONTEXT_RULE, "AlexM@testTenant", TENANT);
 *     
 *     @Test public void aTestMethod()
 *     {
 *         	AUSTRALIAN_USER.runAsFullyAuthenticated(new TenantRunAsWork()
 *          {
 *          	@Override
 *          	public Void doWork() throws Exception
 *          	{
 *          		// Do something as the tenant user
 *          	}
 *          });
 *      }
 * }
 *  
 * 
 * @author Alex Miller
 */
public class TenantPerson extends AlfrescoPerson 
{
	private AlfrescoTenant tenant;
	/**
	 * Constructs the rule with a reference to a {@link ApplicationContextInit rule} which can be used to retrieve the ApplicationContext.
	 * 
	 * @param appContextInit a rule which can be used to retrieve the spring app context.
	 * @param userName   the username for the person to be created.
	 * @param tenant    the tenant the person should be created under.
	 */
	public TenantPerson(ApplicationContextInit appContextInit, String userName, AlfrescoTenant tenant) {
		super(appContextInit, userName + "@" + tenant.getTenantDomain());
		ParameterCheck.mandatory("tenant", tenant);
		this.tenant = tenant;
	}
	/**
	 * Create the user, in the given tenant, using the tenant system user.
	 */
    @Override protected void before()
    {
		tenant.runAsSystem(new TenantRunAsWork