/*
 * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/*
 * @test
 * @key headful
 *
 * @summary converted from VM Testbase jit/misctests/fpustack.
 * VM Testbase keywords: [jit, desktop, jdk_desktop, quick]
 *
 * @library /vmTestbase
 *          /test/lib
 * @run driver jdk.test.lib.FileInstaller . .
 * @run main/othervm jit.misctests.fpustack.GraphApplet
 */

package jit.misctests.fpustack;

import java.util.*;
import java.awt.*;
import java.applet.Applet;
import nsk.share.TestFailure;


public class GraphApplet extends Applet {
    private GraphPanel panel;
    private boolean isApplet = true;
    private boolean initialized = false;

    /**
    ** main method for testing that class
    **
    **/
    public static void main( String[] args )        {
        Frame f = new Frame("GraphApplet");
        GraphApplet app = new GraphApplet();
        app.isApplet = false;
        app.setSize(600,400);
        f.setLayout( new BorderLayout() );
        f.add("Center",app);
        f.setSize(600,400);

        app.init();
        //      f.pack();
        f.show(true);
        app.start();

        try {
            Thread.currentThread().sleep(5*1000);
        } catch (InterruptedException e) {
        }

        f.show(false);
        app.stop();
        f.dispose();
        return;
    }

    /**
    ** init-Method in applet's lifecycle.
    ** the graphic panel is build up and the date is filled.
    **/
    public synchronized void init() {
        System.out.println( "GraphApplet : init");
        setLayout(new BorderLayout());

        panel = new GraphPanel(this, new layout() );
        fill( panel );
        add("Center", panel);
        Panel p = new Panel();
        add("South", p);
        initialized = true;
    }

    public synchronized void start() {
        System.out.println( "GraphApplet : start");
        panel.formatNodes();
    }
    public synchronized void stop() {
        initialized = false;
        System.out.println( "GraphApplet : stop");
    }

    public synchronized void destroy() {
        System.out.println( "GraphApplet : destroy");
    }

    /**
    ** paint the Applet
    **/
    public synchronized void paint(Graphics g) {
        try {
            while ( ! initialized )
                Thread.currentThread().sleep(5);
        } catch (InterruptedException e) {}
        if (g instanceof PrintGraphics )
            System.out.println( "printing GraphApplet ...");
    }

    public synchronized void print(Graphics g) {
        try {
            while ( ! initialized )
                Thread.currentThread().sleep(5);
        } catch (InterruptedException e) {}
        System.out.println( "Print Applet "  + g);
        panel.print(g);
    }

    public void print() {
        // System.out.println( "Print Applet");
        Toolkit kit = getToolkit();
        try {

            PrintJob job = kit.getPrintJob( new Frame("x"), "PrintableFrame print job",
                                            null);
            // do the printing if the user didn't cancel the print job
            if (job != null) {
                Graphics g = job.getGraphics();
                printAll(g);                                    // not paint(g)
                g.dispose();                                    // finish with this page
                job.end();                                              // finish with the PrintJob
            }
        } catch (Exception ex) {
            System.out.println( "print exception " + ex);
        }
    }

    /**
    **
    ** @param      panel   the container for nodes
    **
    **/
    private void
        fill(  GraphPanel panel )       {
            panel.addNodes("Node1", "Node2", "Node3" );
    }
}
