/**
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 *
 * Copyright (C)
 * <a href="http://www.inab.org">Spanish National Institute of Bioinformatics (INB)</a>
 * <a href="http://www.bsc.es">Barcelona Supercomputing Center (BSC)</a>
 * <a href="http://inb.bsc.es">Computational Node 6</a>
 */

package org.inb.biomoby.generator.gui;

import java.awt.BorderLayout;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import org.inb.biomoby.central.gui.RegistryComboBox;
import org.inb.biomoby.central.model.DatatypesModel;
import org.inb.biomoby.generator.DatatypeGenerator;
import org.inb.swing.StatusBar;

/**
 * @author Dmitry Repchevsky
 */

public class MainPanel extends JPanel
{
    private JComboBox endpoints;
    private StatusBar statusBar;
    
    public MainPanel()
    {
        super(new BorderLayout());

        endpoints = new RegistryComboBox();
        add(endpoints, BorderLayout.NORTH);

        JTabbedPane tabPane = new JTabbedPane();

        DatatypesGeneratorPanel dtPanel = new DatatypesGeneratorPanel();
        tabPane.addTab("Datatypes generator", dtPanel);

        ServicesGeneratorPanel sPanel = new ServicesGeneratorPanel();
        tabPane.addTab("Services generator", sPanel);

        ServiceAccessorGeneratorPanel saPanel = new ServiceAccessorGeneratorPanel();
        tabPane.addTab("Service accessor generator", saPanel);

        add(tabPane, BorderLayout.CENTER);

        statusBar = new StatusBar();
        add(statusBar, BorderLayout.SOUTH);  
        
        configureDefaultLogger();
    }
    
    private void configureDefaultLogger()
    {
        StatusBarHandler statusBarHandler = new StatusBarHandler(statusBar);

        Logger logger;
        Handler[] handlers;

        logger = Logger.getLogger(DatatypeGenerator.class.getCanonicalName());
        handlers = logger.getHandlers();

        for (Handler handler : handlers)
        {
            logger.removeHandler(handler);
        }
        
        logger.addHandler(statusBarHandler);
        logger.setLevel(Level.INFO);

        // get DatatypesModel log to the StatusBar
        logger = Logger.getLogger(DatatypesModel.class.getCanonicalName());
        handlers = logger.getHandlers();

        for (Handler handler : handlers)
        {
            logger.removeHandler(handler);
        }

        logger.addHandler(statusBarHandler);
        logger.setLevel(Level.INFO);
    }
}
