package org.lucci.madhoc.gui.runtime;

import java.awt.GridLayout;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.swing.JDesktopPane;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;

import org.lucci.madhoc.gui.SimulationRuntime;
import org.lucci.madhoc.simulation.MadhocSimulation;

/*
 * Created on May 5, 2005
 */

/**
 * @author luc.hogie
 */
public class RuntimeComponent extends JPanel
{
    private SimulationRuntime runtime;
    private Map runtimeComponentElements = new HashMap();
    
    public RuntimeComponent()
    {
        setBorder(new BevelBorder(BevelBorder.RAISED));
        setLayout(new GridLayout(1, 4));
        {
            RuntimeComponentElement a = new PlayPauseComponent();
            runtimeComponentElements.put(a.getClass(), a);
            add(a);
        }
        {
            RuntimeComponentElement a = new SimulationComponent();
            runtimeComponentElements.put(a.getClass(), a);
            add(a);
        }
        {
            RuntimeComponentElement a = new InformationComponent();
            runtimeComponentElements.put(a.getClass(), a);
            add(a);
        }
//      {
//          RuntimeComponentElement a = new JVMComponent();
//          runtimeComponentElements.put(a.getClass(), a);
//          add(a);
//      }
        {
            RuntimeComponentElement a = new WindowShorcutComponent();
            runtimeComponentElements.put(a.getClass(), a);
            add(a);
        }
    }
    
    public void setSimulation(MadhocSimulation simulation)
    {
        this.runtime = new SimulationRuntime(simulation);
        
        Iterator i = runtimeComponentElements.values().iterator();
        
        while (i.hasNext())
        {
            RuntimeComponentElement r = (RuntimeComponentElement) i.next();
            r.setRuntimeComponent(this);
        }

        getRuntime().start();
    }

    public void setDesktopPane(JDesktopPane dp)
    {
        ((WindowShorcutComponent) runtimeComponentElements.get(WindowShorcutComponent.class)).setDesktopPane(dp);
    }
    
    public SimulationRuntime getRuntime()
    {
        return runtime;
    }
    public Map getRuntimeComponentElements()
    {
        return runtimeComponentElements;
    }
}