package com.maplesoft.maplenet.tutorial;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.URL;

import javax.swing.*;

import com.maplesoft.client.MapleStatement;

public class ConnectToServer extends Applet {
   boolean      isStandalone = false;
   JTextField   inputString = new JTextField();
   JButton      jButton1 = new JButton();

   String sUser     = "";
   String sPassword = "";
   String sHost     = "";
   int    iPort     = 14444;

   JScrollPane resultPane = new JScrollPane();
   JTextArea resultWindow = new JTextArea();
   JLabel jLabel1 = new JLabel();
   JLabel jLabel2 = new JLabel();

   //Get a parameter value
   public String getParameter(String key, String def) {
      return isStandalone ? System.getProperty(key, def) :
         (getParameter(key) != null ? getParameter(key) : def);
   }

   //Construct the applet
   public ConnectToServer() {
   }

   //Initialize the applet
   public void init() {
      try {
         jbInit();

         String sTmp;

         sUser = getParameter( "usuário" );
         sPassword = getParameter( "senha");

         // Use this document to determine Server name
         URL url = getDocumentBase();
         String sDocHost = url.getHost();

         // See if Server name is over-ridden by 'host' <PARAM> tag
         sHost = getParameter( "host", sDocHost);
         sTmp = getParameter( "port", "14444" );
         iPort = Integer.parseInt( sTmp );

         sizecheck();
      }
      catch(Exception e) {
         e.printStackTrace();
      }
   }

   private void sizecheck() {

      int w = getWidth();
      int h = getHeight();
      int x1;
      int y1;
      int w1;
      int h1;
      x1= inputString.getX();
      y1= inputString.getY();
      h1 = inputString.getHeight();
      w1 = (w-2*x1);
      if(w1 < 20) w1 = 20;
      inputString.setSize( w1, h1 );

      h1 = resultPane.getHeight();
      resultPane.setSize(w1, h1);

      x1= jButton1.getX();
      w1 = (w-2*x1);
      if(w1 < 20) w1 = 20;
      h1 = jButton1.getHeight();
      jButton1.setSize( w1, h1 );
   }
   //Component initialization
   private void jbInit() throws Exception {
      this.setLayout(null);
      jButton1.setNextFocusableComponent(inputString);
      jButton1.setText("Enviar");
      jButton1.setBounds(new Rectangle(147, 249, 107, 33));
      jButton1.addActionListener(new ConnectToServer_jButton1_actionAdapter(this));
      resultPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
      resultPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
      resultPane.getViewport().setBackground(SystemColor.info);
      resultPane.setOpaque(true);
      resultPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
      resultPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
      resultPane.getViewport().setBackground(SystemColor.info);
      resultPane.setAutoscrolls(true);
      resultPane.setDoubleBuffered(true);
      resultPane.setOpaque(true);
      resultPane.setBounds(new Rectangle(25, 95, 350, 140));
      resultWindow.setToolTipText("Resultados do Maple");
      resultWindow.setBackground(SystemColor.info);
      inputString.setNextFocusableComponent(jButton1);
      inputString.setToolTipText("Enter a Maple Text String");
      inputString.setBounds(new Rectangle(26, 33, 350, 30));
      jLabel1.setText("Enter a Maple String");
      jLabel1.setBounds(new Rectangle(26, 7, 186, 22));
      jLabel2.setText("Resultado");
      jLabel2.setBounds(new Rectangle(26, 72, 121, 18));
      this.addComponentListener(new ConnectToServer_this_componentAdapter(this));
      this.add(jButton1, null);
      this.add(inputString, null);
      this.add(resultPane, null);
      this.add(jLabel1, null);
      this.add(jLabel2, null);
      resultPane.getViewport().add(resultWindow, null);
   }

   //Get Applet information
   public String getAppletInfo() {
      return "Applet Informação";
   }

   //Get parameter info
   public String[][] getParameterInfo() {
      return null;
   }

   void Semd_actionPerformed(ActionEvent e) {

      try {

         // ************************************************************************
         // Here is where the Work is done
         //  1. Extract the Maple command from the inputString EntryField
         //  2. Create a MapleStatement object using host, port, user and password
         //  3. Pass the maple command to the execute() method
         //  4. retrieve the result from the getResponse() method.
         // ************************************************************************

         String sQuestion;
         String sAnswer;
         sQuestion = inputString.getText();
         MapleStatement statement = new MapleStatement( sHost, iPort, sUser, sPassword );
         statement.execute( sQuestion );

         sAnswer = inputString.getText() + " = " + statement.getResponse() + "\n" ;
         resultWindow.append( sAnswer );

      }catch( Exception ex ) {
         System.out.println( "Erro ao enviar: " + ex.toString() );
      }

   }

   void Applet_componentResized(ComponentEvent e) {
      sizecheck();
   }
}

class ConnectToServer_jButton1_actionAdapter implements java.awt.event.ActionListener {
   ConnectToServer adaptee;

   ConnectToServer_jButton1_actionAdapter(ConnectToServer adaptee) {
      this.adaptee = adaptee;
   }

   public void actionPerformed(ActionEvent e) {
      adaptee.Semd_actionPerformed(e);
   }
}

class ConnectToServer_this_componentAdapter extends java.awt.event.ComponentAdapter {
   ConnectToServer adaptee;

   ConnectToServer_this_componentAdapter(ConnectToServer adaptee) {
      this.adaptee = adaptee;
   }

   public void componentResized(ComponentEvent e) {
      adaptee.Applet_componentResized(e);
   }
}
