/*
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 1999, 2000 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution, if
 *    any, must include the following acknowlegement:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowlegement may appear in the software itself,
 *    if and wherever such third-party acknowlegements normally appear.
 *
 * 4. The names "The Jakarta Project", "Ant", and "Apache Software
 *    Foundation" must not be used to endorse or promote products derived
 *    from this software without prior written permission. For written
 *    permission, please contact apache@apache.org.
 *
 * 5. Products derived from this software may not be called "Apache"
 *    nor may "Apache" appear in their names without prior written
 *    permission of the Apache Group.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 */
package org.apache.tools.ant.gui;
import org.apache.tools.ant.gui.core.*;
import org.apache.tools.ant.gui.util.XMLHelper;
import org.apache.tools.ant.gui.wizard.Wizard;
import org.apache.tools.ant.gui.wizard.build.BuildData;
import org.apache.tools.ant.gui.wizard.WizardListener;
import org.apache.tools.ant.gui.command.LoadFileCmd;
import org.apache.tools.ant.gui.event.EventBus;
import org.apache.tools.ant.gui.acs.ACSFactory;
import javax.swing.*;
import java.awt.BorderLayout;
import java.io.File;

/**
 * Launch point for the Antidote GUI. Configurs it as an application.
 * 
 * @version $Revision$ 
 * @author Simeon Fitch 
 */
public class Main {
	/** 
	 * Application start.
	 * 
	 * @param args TBD
	 */
    public static void main(String[] args) {
        XMLHelper.init();

        Args settings = new Args(args);


        try {
            JFrame f = new JFrame("Antidote");
            f.setDefaultCloseOperation(3 /*JFrame.EXIT_ON_CLOSE*/);
            AppContext context = new AppContext(f);

            if(!settings.isWizardMode()) {
                EventResponder resp = new EventResponder(context);
                Antidote gui = new Antidote(context);

                JMenuBar menu = context.getActions().createMenuBar();
                f.setJMenuBar(menu);
                f.getContentPane().add(BorderLayout.CENTER, gui);
                f.getContentPane().add(BorderLayout.NORTH, 
                                       context.getActions().createToolBar());
                
                // Add the project selection menu.
                ProjectSelectionMenu ps = new ProjectSelectionMenu(context);
                ps.insertInto(menu);
                
                // Add debugging items.
                if(settings.isDebugMode()) {
                    context.getEventBus().addMember(
                        EventBus.VETOING, new EventDebugMonitor());
                }

                // Load a build file if one is provided.
                if(settings.getBuildFile() != null) {
                    LoadFileCmd load = new LoadFileCmd(context);
                    load.setFile(new File(settings.getBuildFile()));
                    load.run();
                }
            }
            else {
                // We are in wizard mode. Create it.
                Wizard wiz = new Wizard(new BuildData());
                // XXX this is temporary for testing. Eventually
                // it will launch the regular antidote screen with the
                // results of the wizard.
                wiz.addWizardListener(new WizardListener() {
                        public void finished(Object model) {
                            BuildData data = (BuildData) model;
                            System.out.println(data.createProject());
                            System.exit(0);
                        }
                        public void canceled() {
                            System.exit(0);
                        }

                    });

                f.getContentPane().add(BorderLayout.CENTER, wiz);
            }

            ImageIcon icon = 
                context.getResources().loadImageIcon("icon-small.gif");
            if(icon != null) {
                f.setIconImage(icon.getImage());
            }
            else {
                System.out.println("Application icon not found.");
            }

            f.pack();
            f.setVisible(true);

        }
        catch(Exception ex) {
            ex.printStackTrace();
        }
    }
}
