package myuml;

import com.borland.jbcl.layout.*;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.io.Serializable;
import com.umlet.control.Constants;
import java.util.ArrayList;
import java.awt.BasicStroke;



/**
 * <p>Title: Hola a todos</p>
 *
 * <p>Description: este es el tutorial hola a todos</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: Mi empresa</p>
 *
 * @author Mi nombre
 * @version 1.0
 */
public class MyExceptionFrame extends MyObjects implements Serializable {

    //Variable para controlar si se trata del primer Exception frame de la lista
    public boolean primero = true;

    //Variable que contiene el tipo de excepción tratada
    protected String exception = "";

    /**
     * Crea un nuevo frame
     *
     * @param c coordenadas del frame
     */
    public MyExceptionFrame(XYConstraints c) {
        super(c);
    }

    /**
     * Método que devuelve si es el prime frame de excepción
     *
     * @return primero del frame
     */
    public boolean getPrimero(){
        return primero;
    }


    /**
     * Método que establece si es el primer frame de excepción
     *
     * @param primero del frame
     */
    public void setPrimero(boolean b){
        primero = b;
    }

    public void paint(Graphics g){

          Graphics2D g2 = (Graphics2D) g;

          g2.setColor(col);

          String cad_frame;

          //Si es el primer frame debe tener otro recuadro exterior marcando
          //el comienzo del bloque de excepción
          if(primero){

              g2.drawString("Exception Block",-5,-10);

              g2.drawRect(-5,-10, xyc.getWidth() - 1, xyc.getHeight() - 1);

          }

          //Rectángulo que contiene el tipo de frame que se trata
          //Su anchura variará según la anchura total del frame
          g2.drawRect(0, 0, xyc.getWidth(), 15);
          g2.drawString("Exception"+" ["+exception+"]",5,10);



          //Si se trata de un frame loop con guard también debe mostrarse en el frame

          if(this.getName().compareTo("loop")==0 && guard.compareTo("")!=0){

              //Rectángulo que contiene el tipo de frame que se trata
              g2.drawRect(0, 0, xyc.getWidth(), 28);

              //Dibujar el repeat
              g2.drawString("guard ["+guard+"]",5,25);

          }

          else{



          }

          //Si se trata de un frame de tipo alt_else se debe pintar el else debajo del separador
          if(this.getName().compareTo("alt_else")==0){

              g2.drawString("else",5,((Integer)separadores.get(0)).intValue() + 10);

              g2.drawRect(0,((Integer)separadores.get(0)).intValue(),30, 15);

          }

          //Rectángulo con la dimensión total del frame

          if(this.getName().compareTo("alt_else")!=0){
              g2.drawRect(0, 0, xyc.getWidth() - 1, xyc.getHeight() - 1);
          }
          else{
              g2.drawRect(0, 0, xyc.getWidth() - 1, xyc.getHeight() - 1);
          }
          //Dibujar las líneas de separación dentro de los frames que sean necesarias

          float dash1[] = {15.0f};
          BasicStroke dashed = new BasicStroke(1.0f,
                                    BasicStroke.CAP_BUTT,
                                    BasicStroke.JOIN_MITER,
                                    10.0f, dash1, 0.0f);

          g2.setStroke(dashed);

          for(int i = 0; i < separadores.size(); i++){

             //Dibujar una línea de trazos discontinuos en la coordenada Y indicada
             g2.drawLine(0,((Integer)separadores.get(i)).intValue(),xyc.getWidth() - 1,((Integer)separadores.get(i)).intValue());

          }


    }

}
