Questionnaire

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Yazmín
 */
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
class Questionnaire implements CommandListener{
    String Nombre;
    String TextoComp;
    String Texto;
    int CantPreg;
    String TextoPreg[];
    Pregunta Preguntas[];
    Command Siguiente;
    Command Atras;
    Command Terminar;
    MIDlet Principal;
    Display display;
    Displayable anteriorDisp;
    int preguntaActual=0;

    //Constructor de la clase
    public Questionnaire(String aName, String aFileLocation, MIDlet aMidlet){
        Principal=aMidlet;
        //obtener display de midlet anterior
        display=Display.getDisplay(Principal);

        Nombre= aName;
        Texto= file(aFileLocation);

        //Obtener el nombre del cuestionario
        getNombre();
        cantidadPreg();
        TextoPreg=new String[CantPreg];
        Preguntas=new Pregunta[CantPreg];
        obtenerPreg();
        llenaPreg();
        Siguiente=new Command("Next", Command.OK, 1);
        Atras=new Command("Back", Command.BACK, 1);
        Terminar=new Command("Finish", Command.OK, 2);

        for(int i=0; i<CantPreg; i++){
            Preguntas[i].addCommand(Atras);
            if (i==CantPreg-1){
            Preguntas[i].addCommand(Terminar);
            }
            else{
              Preguntas[i].addCommand(Siguiente);
            }

            //Para que se lean los comandos en ComandAction
            Preguntas[i].setCommandListener(this);
        }
    }

   //iniciar el cuestionario
   public void apply(){
       anteriorDisp=display.getCurrent();
       display.setCurrent(Preguntas[preguntaActual]);

   }

   public String getName(){
       return Nombre;
   }

  public int getNumberOfQuestions(){
      return CantPreg;
  }

  public int getNumberOfCorrectAnswers(){
      int cont=0;
      for(int i=0; i<CantPreg;i++){
          if (Preguntas[i].getResp().EsCulto()){
          cont++;
          }
      }
  return cont;
  }

    public void commandAction(Command Comando,Displayable Desplegable){
    if(Comando==Terminar){
        display.setCurrent(anteriorDisp);
    }
    else
        if(Comando==Siguiente){
            preguntaActual=preguntaActual+1;
            //agragar pregunta actual
            display.setCurrent(Preguntas[preguntaActual]);
        }
        else{
            if(preguntaActual==0){
                display.setCurrent(anteriorDisp);
            }
            else{
                preguntaActual=preguntaActual-1;
                display.setCurrent(Preguntas[preguntaActual]);
            }
        }

    }

 private String file(String Direccion){
  InputStream is = getClass().getResourceAsStream(Direccion);
  StringBuffer sb = new StringBuffer();
  try{
   int chars, i = 0;
   while ((chars = is.read()) != -1){
   sb.append((char) chars);
   }
   return sb.toString();
  }catch (Exception e){}
  return null;
 }

        private void getNombre(){
            int posInicial, posFinal;
            posInicial = Texto.indexOf('>') +1;
            posFinal = Texto.indexOf('<', posInicial);
            //trim para eliminar todos los espacios innecesarios (tabs)
            //substring para seccionar
            TextoComp = Texto.substring(posInicial, posFinal).trim();
        }

        //Obtener la cantidad de preguntas de cada cuestionario
        private void cantidadPreg(){
            int contador=0, pos=-1;
            while((pos= Texto.indexOf("<question>", pos+1))!=-1) {
                contador=contador+1;
            }
            CantPreg=contador;
        }

        //Obtener el texto de cada pregunta
        private void obtenerPreg(){
            int posIni=0, posFin=0;
            for(int i=0;i<CantPreg;i++){
                posIni=Texto.indexOf("<question>", posFin);
                posFin=Texto.indexOf("</question>", posIni);
                //Aumentar 11 espacios que implica </question> para tomar el inmediato siguiente
                posFin=posFin+11;
                //tomar pregunta por pregunta
                TextoPreg[i]=Texto.substring(posIni, posFin);
            }
      }

    // método para llenar con el texto de las preguntas
    private void llenaPreg(){
        for(int i=0; i<CantPreg;i++){
            Preguntas[i]=new Pregunta(TextoPreg[i],Nombre, i);
        }
    }
}

Comments