import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
import java.util.*;
import org.kxmlrpc.*;

/**
 * @author  Kyle Gabhart
 * @copyright  Kyle Gabhart © 2001
 * @version 1.0
 */
public class kxmlrpc_demo extends MIDlet implements CommandListener {
    private List            list;
    private Command         exitCommand;
    private String[]        menuItems;
    private Display         display;
    private Alert           response;
    private XmlRpcClient    xmlrpc;
    private Vector          params, xmlArray; 
    
    public kxmlrpc_demo() {
        //Initialize the User Interface
        menuItems = new String[] {"Timestamp", "Randomizer", "AddressBook"};    
        list = new List( "Select a service", List.IMPLICIT, menuItems, null );
        exitCommand = new Command( "Exit", Command.EXIT, 1 );
        response = new Alert("Service Return", null, null, AlertType.INFO);
        response.setTimeout( Alert.FOREVER );
        
        //Add commands
        list.addCommand( exitCommand );
        list.setCommandListener( this );
        
        //obtain a reference to the device's UI
        display = Display.getDisplay( this );
    }//end MyMidlet()
    
    public void startApp() {
        display.setCurrent( list );
    }//end startApp()

    public void pauseApp() {
    }//end pauseApp()

    public void destroyApp( boolean unconditional ) {
        //clean up
        list = null;
        exitCommand = null;
        display = null;
    }//end destroyApp
    
    public void commandAction( Command com, Displayable dis ) {
        if ( dis == list && com == List.SELECT_COMMAND ) {
            switch( list.getSelectedIndex() )
            {
                case 0:
                    try
                    {
                        xmlrpc = new XmlRpcClient( "http://www.wsjug.org/servlet/XmlRpcServlet" );
                        params = new Vector();
                        String serverTime = (String) xmlrpc.execute( "sysTime.getSystemTime", params );
                        response.setString( serverTime.toString() );
                        display.setCurrent( response );
                    } 
                    catch ( Exception ex )
                    {
                        response.setString( ex.toString() );
                        ex.printStackTrace(); // DEBUG
                        display.setCurrent( response );
                    }//end try/catch
                    break;
                case 1:
                    try
                    {
                        xmlrpc = new XmlRpcClient( "http://www.wsjug.org/servlet/XmlRpcServlet" );
                        params = new Vector();
                        xmlArray = new Vector();
                        xmlArray.addElement( "2" );
                        xmlArray.addElement( "5" );
                        xmlArray.addElement( "7" );
                        xmlArray.addElement( "12" );
                        params.addElement( xmlArray );
                        String serverTime = (String) xmlrpc.execute( "randChoice.choose", params );
                        response.setString( serverTime.toString() );
                        display.setCurrent( response );
                    } 
                    catch ( Exception ex )
                    {
                        response.setString( ex.toString() );
                        ex.printStackTrace(); // DEBUG
                        display.setCurrent( response );
                    }//end try/catch
                    break;
                case 2:
                    response.setString( "Not implemented yet." );
                    display.setCurrent( response );
                    break;
            }//end switch( list.getSelectedIndex() )
        }
        else if ( com == exitCommand ) {
            destroyApp( true );
            notifyDestroyed();
        }//end if ( dis == list && com == List.SELECT_COMMAND )
    }//end CommandAction( Command, Displayable )
}//end MyMidlet
