//Programa Gerador de código destinado a cumprir os requisitos da
//disciplina Laboratorio VI
//Produzido por Eduardo Pasquotto Orsolini


//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//
							//Imports
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//
			
			
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;


//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//
						//Class Gerador
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//


public class Gerador extends Frame implements ActionListener
{
	TextArea ta = new TextArea(30, 30);
	Vector classes, relacionamentos;

	//menus
	MenuBar mbar;
	Menu mArquivo, mClasse;
	
	
	Gerador()
	{
	  Toolkit tk = Toolkit.getDefaultToolkit();
	  Dimension d = tk.getScreenSize();
	  setSize(800,600); // tamanho do frame
      setTitle("Gerador versão 0.1"); // titulo do frame
	  addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}}); // fecha o frame
	  ta.setBackground(Color.black);
	  ta.setForeground(Color.red);
	  
	  //criar Arrays
	  classes = new Vector();
	  relacionamentos = new Vector();
	  
	  //criar menus
	  
	  mbar = new MenuBar();  //cria barra de menus
	  setMenuBar(mbar);		  //coloca barra de menus ao frame
	  
	  //define os submenus que serao adicionados ao menu
	  
	  mArquivo = new Menu("Arquivo");
	  mClasse = new Menu("Classe"); 
	  
	  //define menuItens de mArquivo
	  
	  mArquivo.add(new MenuItem("Abrir"));
	  mArquivo.add(new MenuItem("Salvar"));
	  mArquivo.add(new MenuItem("Fechar"));
	  mArquivo.addSeparator(); // insere separador
	  mArquivo.add(new MenuItem("Sair"));
	  
	 //define menuItem de mClasse
	 
	  mClasse.add(new MenuItem("Abrir Classe"));

	  //adiciona submenu ao menu
	  
	  mbar.add(mArquivo);	
	  mbar.add(mClasse);
	  
	  //adiciona escutadores ao menus
	  mArquivo.addActionListener(this);
	  mClasse.addActionListener(this);

	  add("Center", ta);
	  
	  setLocation((d.width - getWidth())/2,(d.height - getHeight())/2);
	}//construtora Gerador
	
	
	public void actionPerformed(ActionEvent e)
    {
	  String quemFoi = e.getActionCommand();
	  if (quemFoi.equals("Sair"))
	  { 
	  	System.out.println("O Gerador Ernest foi Fechado");
	  	System.exit(0);
	  }//if
	 
	  if(quemFoi.equals("Abrir Classe"))
	  {
	  	Frame2 frame2 = new Frame2();
	  }//if
	  
	}//void actionPerformed
	
	
	
	
	public void criarClasse(String identificador)
	{
		  Classe classe = new Classe();
		  System.out.println(identificador);
	      classe.setIdentificador(identificador);
		  ta.append("Criada classe: "+classe.getIdentificador()+"\n");
	      classes.addElement(classe);
	}//CriarClasse
	
	
	
	
	
	
	
	
	
	
	
    public static void main(String args[])
    {
	  Gerador gerador = new Gerador();
	  gerador.setVisible(true);
	}//void main
	
}//class Gerador				

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//
						//Class Frame2
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//

class Frame2 extends Frame implements ActionListener
{
  CardLayout cardLayout = new CardLayout();
  Panel cardPanel = new Panel();
  Panel p1, p2, p3, p4, p5;
  Panel p11, p12, p13;
  Panel p21, p22, p23;
  Panel p31, p32;
  Panel p41, p42;
  Panel p51, p52;
  Panel pBotao;
  Gerador gerador = new Gerador();;

  Button b01, b02, b03, b04, b05;
  
  // componentes de interface para o painel de Classes
  TextField tf1;
  Label l1,l12;
  Choice ch1;
  Button bClasse;

  // componentes de interface para o painel de Atributos
  TextField tf2;
  Label l2;

  // componentes de interface para o painel de Metodo
  Label l3;
  TextField tf3;
  Choice ch3;

  // componentes de interface para o painel de Generalizacao
  Label l4, l41;
  Choice ch4, ch41;
  
  //componentes de interface para o painel de Associacao
  Label l5;
  TextField tf5;
  
  Frame2()
  {
  	super("Construção");
    setSize(640,475);
    setResizable(false);
	Toolkit tk = Toolkit.getDefaultToolkit();
	Dimension d = tk.getScreenSize();
	setLocation((d.width - getWidth())/2,(d.height - getHeight())/2);
	
    addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){setVisible(false);}}); // fecha o frame

    setLayout(new BorderLayout());
    
    //Painel de Classe
    p1 = new Panel();
    p11 = new Panel();
    p12 = new Panel();
    p13 = new Panel();
    
    p1.setLayout(new GridLayout(3,1));
    
    l1 = new Label("Nome da Classe"); //criar label
    p11.add(l1);
    
    tf1 = new TextField(20); //criar TextField
    p11.add(tf1);
    
    l12 = new Label("Modificador"); //criar Label
    p12.add(l12);
    
    bClasse = new Button("Criar Classe");
    bClasse.addActionListener(this);
    p13.add(bClasse);
    
    ch1 = new Choice(); //criando choice
    ch1.add("abstract"); //criando opcoes
    ch1.add("public");
    ch1.add("final");
    p12.add(ch1);
    
    p1.add(p11);
    p1.add(p12);
    p1.add(p13);
    
    //Painel de Atributos
	p2 = new Panel();
	p21 = new Panel();
	p2.setLayout(new GridLayout(3,1));
	l2 = new Label("Nome do Atributo");
	p21.add(l2);
	tf2 = new TextField(20);
	p21.add(tf2);
	p2.add(p21);
	
	//painel Métodos
	
	p3 = new Panel();
	p3.setLayout(new GridLayout(4,1));
	p31 = new Panel();
	p32 = new Panel();

	l3 = new Label("Nome do Método"); //cria label
	p31.add(l3);	
	
	tf3 = new TextField(20); //criar textField
	p31.add(tf3);
	
	l3 = new Label("Visibilidade");
	p32.add(l3);
	
	ch3 = new Choice();  //cria choice
	ch3.add("public");
	ch3.add("private");
	ch3.add("protect");
	
	p32.add(ch3);
	
	p3.add(p31);
	p3.add(p32);
    
    //painel Generalizacao
	p4 = new Panel();
	p4.setLayout(new GridLayout(3,1));
	p41 = new Panel();
	p42 = new Panel();
	
	l4 = new Label("Classe 1"); //criar Label
	p41.add(l4);    
	
	ch4 = new Choice();  //criar choice
	p41.add(ch4);
	
	l41 = new Label("Classe 2"); //criar Label
	p42.add(l41);
	
	ch41 = new Choice();
	p42.add(ch41);
	
	p4.add(p41);
	p4.add(p42);
    
    //painel Associação
    
    p5 = new Panel();
    p5.setLayout(new GridLayout(5,1));
    p51 = new Panel();
    
    l5 = new Label("Nome Associação"); //criar Label
    p51.add(l5);
    
    tf5 = new TextField(20);
    p51.add(tf5);
    
    p5.add(p51);
    
    
    
    //criar Botoes
    pBotao = new Panel();
	b01 = new Button("Classe");
	b01.addActionListener(this);
	b02 = new Button("Atributo");
	b02.addActionListener(this);
	b03 = new Button("Método");
	b03.addActionListener(this);
	b04 = new Button("Generalização");
	b04.addActionListener(this);
	b05 = new Button("Associação");
	b05.addActionListener(this);
	
	pBotao.add(b01);	
	pBotao.add(b02);
	pBotao.add(b03);
	pBotao.add(b04);
	pBotao.add(b05);

    add("South",pBotao);
    
    cardPanel.setLayout(cardLayout);
    cardPanel.add("card 1", p1);
    cardPanel.add("card 2", p2);
    cardPanel.add("card 3", p3);
    cardPanel.add("card 4", p4);    
    cardPanel.add("card 5", p5);
    add(cardPanel, "Center");
    
    
    show();

  }//construtora
  
  
    public void actionPerformed(ActionEvent e)
	{
	  String quemFoi = e.getActionCommand();
	  Object quem = e.getSource();

	   if (quemFoi.equals("Classe"))
	     cardLayout.show(cardPanel, "card 1");
	   else if (quemFoi.equals("Atributo"))
	     cardLayout.show(cardPanel, "card 2");
	   else if (quemFoi.equals("Método"))
	     cardLayout.show(cardPanel, "card 3");
	   else if (quemFoi.equals("Generalização"))
         cardLayout.show(cardPanel, "card 4");
       else if (quemFoi.equals("Associação"))
         cardLayout.show(cardPanel, "card 5");
       if (quem == bClasse) 
       {
         gerador.criarClasse(tf1.getText());
       }
    }

}//class Frame2


//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//
						//Class Classe
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-//


class Classe implements Serializable
{
	 String identificador;
	 Vector atributos;
	 Vector metodos;


	Classe()
	{
		identificador = "";
		atributos = new Vector();
		metodos = new Vector();
	}//construtora

	public void setIdentificador(String identificador)
	{
		this.identificador = identificador;
	}

	public String getIdentificador()
	{
		return identificador;
	}

	public void setAtributos(Vector atributos)
	{
		this.atributos = atributos;
	}

	public Vector getAtributos()
	{
		return atributos;
	}

	public void setMetodos(Vector metodos)
	{
		this.metodos = metodos;
	}

	public Vector getMetodos()
	{
		return metodos;
	}
}//class Classe
