/*
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:  
 *
 */

package com.nokia.helium.sbs.ant;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;

import com.nokia.helium.sbs.ant.types.SBSBuild;
import com.nokia.helium.sbs.ant.types.SBSInput;

/**
 * This is the final class to store the sbs build list across the ant configurations.
 */
public final class SBSBuildList {

    private static HashMap<Object, SBSBuild> sbsBuildMap;

    private static Logger log = Logger.getLogger(SBSBuildList.class);
    
    private SBSBuildList() {
    }
    
    /**
     *  Provides the list of sbsinput for the given configuration name. Process
     *  all the sbs input and returns the sbsinputlist for matchin configuration name
     *  from the ant xml file.
     * @param project, ant project for whcih the sbs config needs to be searched for.
     * @param buildName - name of the configuration for which the sbs input list needs
     * to be obtained.
     * @return list of sbs input for which the raptor needs to be executed one after another.
     */
    public static List<SBSInput> getSBSInputList(Project project, String buildName) {
        if (sbsBuildMap == null) {
            initialize(project);
        }
        SBSBuild sbsBuild = sbsBuildMap.get(buildName);
        if (sbsBuild == null) {
            throw new BuildException("Config name : " + buildName + " is not valid");
        }
        List<SBSInput> retList = null;
        if (sbsBuild != null) {
            retList = sbsBuild.getSBSInputList();
        }
        return retList;
    }

    /**
     *  Internal function to initialize the sbsbuild configuration to the hashmap.
     * @param project, ant project for whcih the sbs config needs to be searched for.
     */
    private static void initialize(Project project) {
        Hashtable references = project.getReferences();
        sbsBuildMap = new HashMap<Object, SBSBuild>();
        for (Object key : references.keySet()) {
            Object sbsBuildObject = references.get(key);
            if ( sbsBuildObject != null && sbsBuildObject instanceof SBSBuild) {
                sbsBuildMap.put(key, (SBSBuild)sbsBuildObject);
            }
        }
    }
}