/*--------------------------------------------------
* Contatos.java
*
* Marlon Luz - 24/02/2003
*-------------------------------------------------*/

import java.io.*;
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.rms.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;

public class Contatos extends MIDlet implements CommandListener
{
  private RecordStore rs = null;    
  private String RECORD_STORE = "contatos"; 
  private Display display = null;
  
  // Menu principal
  private List mainMenu = null;
  private Command cmdNovo = new Command("Novo", Command.ITEM, 1);
  private Command cmdSair = new Command("Sair", Command.ITEM, 2);
  private Command cmdEnviar = new Command("Enviar", Command.ITEM, 3);

  
  // Formulario Contato
  private Form formulario = null;
  private TextField editNome = null;
  private TextField editFone = null;
  private ChoiceGroup chcgrpCategoria = null; 
  private String[] categorias = {"Trabalho", "Amigo", "Faculdade", "Família"};
  private Command cmdCancelar = new Command("Cancelar", Command.ITEM, 1);
  private Command cmdOk = new Command("OK", Command.ITEM, 2);

  // Comunicação
  private StreamConnection c = null;  
  private String dados = null;

  public Contatos()
  {
    display = Display.getDisplay(this);
    
    mainMenu = new List("Lista", Choice.IMPLICIT);
    mainMenu.addCommand(cmdSair);
    mainMenu.addCommand(cmdNovo);    
    mainMenu.addCommand(cmdEnviar);
    mainMenu.setCommandListener(this);
    carregaLista();
  }// Construtor	

  
  private void showFormulario(){
	
	formulario = new Form("Cadastro");
	editNome = new TextField("Nome:", null, 10, TextField.ANY);
	editFone = new TextField("Fone:", null, 10, TextField.ANY);
	chcgrpCategoria = new ChoiceGroup("Categoria: ", ChoiceGroup.EXCLUSIVE, categorias, null);
	
	formulario.append(editNome);
	formulario.append(editFone);
	formulario.append(chcgrpCategoria);
	formulario.addCommand(cmdCancelar);
	formulario.addCommand(cmdOk);
	formulario.setCommandListener(this);
	display.setCurrent(formulario);
  }
  
  public void commandAction(Command c, Displayable d){
	  if (d==mainMenu){

      if (c==cmdSair) { destroyApp(true);}
	    if (c==cmdNovo) { showFormulario();}
      if (c==cmdEnviar) { enviarContatos(); }
	  }//mainMenu
	  if (d==formulario){
		  if (c==cmdCancelar){
			 display.setCurrent(mainMenu); 
		  }
		  if (c==cmdOk){
			salvaDados();
			display.setCurrent(mainMenu);
		  }
	  }//formulario
  }//  commandAction

  private void salvaDados(){
 	  String reg = null;
    openRMS();          
	  write(editNome.getString(),editFone.getString(),chcgrpCategoria.getString(chcgrpCategoria.getSelectedIndex()));
    reg = "" + editNome.getString() + " - " + editFone.getString() + " - " +  chcgrpCategoria.getString(chcgrpCategoria.getSelectedIndex()); 
	  mainMenu.append(reg,null);
    dados += reg + "&";
 	  closeRMS();	  
  }
  
//-------------- RMS -----------------------------------------------
  private void carregaLista()
  {
      String reg = "";
      dados = "";
      openRMS();
      try {
      byte bb[] = new byte[300];
      ByteArrayInputStream arrB = new ByteArrayInputStream(bb);
      DataInputStream dIn = new DataInputStream(arrB);
      
      for (int idx = 1; idx <= rs.getNumRecords() ; idx++){
        rs.getRecord(idx, bb, 0);
       
        reg = "" + dIn.readUTF() + " - " + dIn.readUTF() + " - " + dIn.readUTF(); 
        mainMenu.append (reg,null);
        dados += reg + "&";

        arrB.reset();
		 
      }//for
      arrB.close();
      dIn.close();
      closeRMS();
      }
      catch (Exception e){}
     
  }
	
  public void closeRMS()
  {
    try
    {
      rs.closeRecordStore();
    }
    catch (Exception e)    {    }
  }

  public void openRMS()
  {
    try
    {
      rs = RecordStore.openRecordStore(RECORD_STORE, true );
    }
    catch (Exception e)   {    }
  }    

  
  public void write(String pNome, String pFone, String pCategoria)
  {
    try
    {
      ByteArrayOutputStream strmBytes = new ByteArrayOutputStream();
      DataOutputStream strmDataType = new DataOutputStream(strmBytes);
      
      byte[] record;

      strmDataType.writeUTF(pNome);
      strmDataType.writeUTF(pFone);
      strmDataType.writeUTF(pCategoria);
      strmDataType.flush();

      record = strmBytes.toByteArray();
      rs.addRecord(record, 0, record.length);      

      strmBytes.reset();
      
      strmBytes.close();
      strmDataType.close();
     
    }
    catch (Exception e)    {    }
  }

// ------------------------ Connection ------------------------------------
private void enviarContatos()
{
    try {
          c = (StreamConnection) Connector.open("http://bolivia:8080/examples/servlet/Synchronize");
          OutputStream out = c.openOutputStream();
          out.write(dados.getBytes());
          out.flush();
          out.close();
          c.close();
    } catch(Exception ex){}

}
// ------------------------MIDLET------------------------------------
  public void destroyApp( boolean unconditional )
  {
	  notifyDestroyed();
  }

  public void startApp()
  {
    display.setCurrent(mainMenu);
  }

  public void pauseApp()
  {
  }
	
}
