/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */

package netscape.asw;

import netscape.npasw.CPGenerator;
import netscape.npasw.ServerDownload;

import java.lang.*;
//import AMDProgressBar;

public class CPGeneratorProgress extends ProgressApplet
{
    final static String DOWNLOAD_STRING = "Downloading:";
    final static String UNJAR_STRING = "Uncompressing:";
    final static String DONE_STRING = "Done...";
    final static String CONTACTING_SERVER = "Contacting registration server...";
    final static String SENDING = "Sending registration information...";
    final static String WAITING = "Waiting for response...";
    final static String RECEIVING_RESPONSE = "Receiving server data...";
    final static String ABORT = "There were problems with the server connection...";
    final static String DIALING_STRING = "Calling registration server...";

    protected int getState()
    {
        if ( ServerDownload.getState() == ServerDownload.IDLE )
            return CPGenerator.getState();
        else
            return ServerDownload.getState();
    }

	public void init()
	{
		super.init();
		progress.setText( DIALING_STRING );
	}
	
    public void run()
    {
        try
        {
            int             lastState = CPGenerator.DONE;
            int             thisState = CPGenerator.DONE;
            String          lastString = "";
            String          thisString = "";

            while ( !CPGenerator.done )
            {
                thisState = getState();
                thisString = new String( CPGenerator.currentFile );

                if ( thisState != lastState )
                {
                    String buffer = null;

                    switch ( thisState )
                    {
                        case ServerDownload.DOWNLOADING:
                            buffer = DOWNLOAD_STRING;
                        break;

                        case ServerDownload.UNJARRING:
                            buffer = UNJAR_STRING;
                        break;

                        case CPGenerator.CONTACTING_SERVER:
                            buffer = CONTACTING_SERVER;
                        break;

                        case CPGenerator.SENDING:
                            buffer = SENDING;
                        break;

                        case CPGenerator.WAITING:
                            buffer = WAITING;
                        break;

                        case CPGenerator.RECEIVING_RESPONSE:
                            buffer = RECEIVING_RESPONSE;
                        break;

                        case CPGenerator.DONE:
                            buffer = DONE_STRING;
                        break;

                        case CPGenerator.ABORT:
                            buffer = ABORT;
                        break;
                    }

                    status.setText( buffer );
                    lastState = thisState;
                }

                if ( thisString.compareTo( lastString ) != 0 )
                {
                    progress.setText( thisString );
                    lastString = thisString;
                }

                if ( ServerDownload.getBytesDownloaded() == 0 || CPGenerator.totalBytes == 0 )
                    progressBar.setPercent( 0.0 );
                else
                    progressBar.setPercent( (double)ServerDownload.getBytesDownloaded() / (double)CPGenerator.totalBytes );

                repaint();
                Thread.sleep( 100 );
            }

            progressBar.setPercent( 1.0 );
            progress.setText( "" );
            status.setText( DONE_STRING );

            repaint();
            Thread.sleep( 2000 );
        }
        catch (Exception e)
        {
            ;
        }
    }
}
