/* -*- 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.npasw;

import netscape.npasw.*;
import java.io.*;
import java.lang.*;
//import Trace;

public class ISPDynamicData
{
    static final String         NAME_STRING = "ISPNAME";
    static final String         LANGUAGE_STRING = "LANGUAGE";
    static final String         SERVICE_TYPE_STRING = "SERVICE_TYPE";
    static final String         DYNAMIC_DATA_STRING = "DYNAMICDATA";
//  static final String         zipFilesURL = "http://seaspace.netscape.com:8080/programs/ias5/regserv/docs/ISP/";

    public NameValueSet         reggieData = null;
    protected String            name = null;
    protected String            language = null;
    protected String            serviceType = null;

    static String               lastName = null;

    protected NameValueSet      dynamicData = null;

    public ISPDynamicData()
    {
    }

    public void read( ReggieStream is ) throws Exception
    {
        // this will need to be reworked a little once we get the reggie protocol fixed
        String      name;
        String      value;
        boolean     done = false;
        boolean     haveName = false;

        reggieData = new NameValueSet();

        try
        {
			Trace.TRACE( "creating ISPDynnamicData" );
			while ( !done )
			{
				if ( lastName != null )
				{
					//Trace.TRACE( "have lastName" );
					name = lastName;
					lastName = null;
				}
				else
				{
					name = is.nextToken();
				}
			
				//Trace.TRACE( "name is: " + name );
			
				if ( name.compareTo( NAME_STRING ) == 0 )
				{
					if ( !haveName )
					{
						//Trace.TRACE( "setting haveName" );
						haveName = true;
					}
					else
					{
						//Trace.TRACE( "haveName was set, setting lastName, we're done" );
						lastName = name;
						done = true;
					}
				}
			
				if ( done == false && name.compareTo( "" ) != 0 )
				{
					value = is.nextToken();
					//Trace.TRACE( "value is: " + value );
					reggieData.setValue( name, value );
				}
			
				if ( name.compareTo( "" ) == 0 )
					throw new EOFException( "done with reggie stream" );
			}
        }
        catch ( MalformedReggieStreamException e )
        {
            lastName = null;
            throw new EOFException( "done with reggie stream" );
        }
        catch ( Exception e )
        {
            lastName = null;
            throw e;
        }
    }

    public String getName()
    {
        if ( name != null )
            return name;
        else
        {
            if ( reggieData != null )
            {
                String      temp = reggieData.getValue( NAME_STRING );
                if ( temp != null && temp.compareTo( "" ) != 0 )
                {
                    name = temp;
                    return name;
                }
            }
        }
        return "";
    }

    public String getLanguage()
    {
        if ( language != null )
        {
            //Trace.TRACE( "returning language" + language );
            return language;
        }
        else
        {
            if ( reggieData != null )
            {
                //Trace.TRACE( "looking for language" );
                String      temp = reggieData.getValue( LANGUAGE_STRING );
                if ( temp != null && temp.compareTo( "" ) != 0  )
                {
                    //Trace.TRACE( "language value found:" + temp );
                    language = temp;
                    return language;
                }
            }
        }
        return "";
    }

    public NameValueSet getDynamicData()
    {
        if ( dynamicData != null )
            return dynamicData;
        else
        {
            if ( reggieData != null )
            {
                String      temp = reggieData.getValue( DYNAMIC_DATA_STRING );
                if ( temp != null && temp.compareTo( "" ) != 0 )
                {
                    try
                    {
                        dynamicData = new NameValueSet( temp );
                        return dynamicData;
                    }
                    catch ( Throwable e )
                    {
                        return null;
                    }
                }
            }
        }
        return null;
    }

    public final void printISPDynamicData()
    {
        if ( reggieData != null )
            reggieData.printNameValueSet();
    }

}

