/*
*  Copyright (c) 2005-2013, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
*  WSO2 Inc. licenses this file to you under the Apache License,
*  Version 2.0 (the "License"); you may not use this file except
*  in compliance with the License.
*  You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.wso2.carbon.deployment.synchronizer.git;

import java.util.HashMap;
import java.util.Map;

public class TenantGitRepositoryContextCache {

    private Map<Integer, TenantGitRepositoryContext> tenantGitRepoContext;
    private static TenantGitRepositoryContextCache tenantGitRepositoryCtxCache;

    private TenantGitRepositoryContextCache() {
        tenantGitRepoContext = new HashMap<Integer, TenantGitRepositoryContext>();
    }

    /**
     * Access method for TenantGitRepositoryContextCache singleton instance
     *
     * @return TenantGitRepositoryContextCache instance
     */
    public static TenantGitRepositoryContextCache getTenantRepositoryContextCache ()  {

        if (tenantGitRepositoryCtxCache == null) {
            synchronized(TenantGitRepositoryContextCache.class) {

                if (tenantGitRepositoryCtxCache == null)  {
                    tenantGitRepositoryCtxCache = new TenantGitRepositoryContextCache();
                }
            }
        }
        return tenantGitRepositoryCtxCache;
    }

    /**
     * Caches the TenantGitRepositoryContext instance for the tenant
     *
     * @param tenantId tenant Id
     * @param gitRepoCtx TenantGitRepositoryContext instance
     */
    public void cacheTenantGitRepoContext(int tenantId, TenantGitRepositoryContext gitRepoCtx) {
        tenantGitRepoContext.put(tenantId, gitRepoCtx);
    }

    /**
     * Retrieve the cached TenantGitRepositoryContext instance for a tenant
     *
     * @param tenantId tenant Id
     * @return c if available, else null
     */
    public TenantGitRepositoryContext retrieveCachedTenantGitContext (int tenantId) {
        return tenantGitRepoContext.get(tenantId);
    }

    /**
     * Update the cached TenantGitRepositoryContext instance for a tenant
     *
     * @param tenantId tenant Id
     * @param gitRepoCtx the cached TenantGitRepositoryContext instance to update
     */
    public void updateTenantGitRepositoryContext (int tenantId, TenantGitRepositoryContext gitRepoCtx) {
        cacheTenantGitRepoContext(tenantId, gitRepoCtx);
    }

    /**
     * Remove the cached TenantGitRepositoryContext instance for a tenant
     *
     * @param tenantId tenant Id
     */
    public void removeCachedTenantGitContext (int tenantId) {
        tenantGitRepoContext.remove(tenantId);
    }

}
