Package org.andrearaso.redvernam

Source Code of org.andrearaso.redvernam.RvFrame

/*
* � This program is free software; you can redistribute it and/or modify � it
* under the terms of the GNU General Public License as published by � the Free
* Software Foundation; either version 2 of the License, or � (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, � but WITHOUT
* ANY WARRANTY; without even the implied warranty of � MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. �See the � GNU General Public License for
* more details.
*
* � You should have received a copy of the GNU General Public License � along
* with this program; if not, write to the Free Software � Foundation, Inc., 59
* Temple Place, Suite 330, Boston, MA �02111-1307 �USA
*/



package org.andrearaso.redvernam;

import java.lang.String;
import java.net.URL;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.io.*;

/**
* <p>Title: RedVernam</p>
* <p>Description: Encryption Software</p>
* <p>Copyright: Copyleft (c) 2009</p>
* <p>Company: andrearaso.org</p>
* @author Andrea Raso
* @version aplha
*/

/*-----------------------------------------------------*/
/* RvFrame */
/*-----------------------------------------------------*/
/* Questa classe rappresenta il frame vero e proprio. */
/*-----------------------------------------------------*/

public class RvFrame extends JFrame implements ActionListener // La finestra
                                // "ascolter�" I
                                // menu e i
                                // Pannelli

{ // INIZIANO ADESSO I CAMPI DELLA FINESTRA

  /*
   * Il frame � costituito da cinque pannelli diversi creati come estenzione
   * di jpanel
   */

  /**
   *
   */
  private static final long serialVersionUID = 1L;
  boolean annullaAction = false; // Booleano che serve a gestire gli errori
                  // nell'apertura di un file
 
 
  URL imageURL=RvFrame.class.getResource("images/back.png");
 
  Image backimage=new ImageIcon(imageURL).getImage();
 
  // Creo i pannelli
  public FrstPanel jPanel1 = new FrstPanel(backimage);
// Contiene solo il nome del
                        // programma e il titolo del
                        // prossimo pannello: Message
  public ScndPanel jPanel2 = new ScndPanel(backimage); // Contiene l'area del testo del
                        // messaggio, i 3 pulsanti, e il
                        // titolo del prossimo pannello:
                        // Chiave
  public ThrdPanel jPanel3 = new ThrdPanel(backimage); // Contiene l'area testo della
                        // chiave, due pulsanti e il
                        // titolo del prossimo pannello:
                        // Encrypted Message
  public FrthPanel jPanel4 = new FrthPanel(backimage); // Contiene l'area testo del
                        // messaggio cifrato e i tre
                        // bottoni.
  public FvthPanel jPanel5 = new FvthPanel(backimage);// Contiene i bottoni Cifra e
                        // Decifra, + i bottoni radio e
                        // la scritta Red And Rebel Web
                        // Site

  GridLayout gridLayout1 = new GridLayout(5, 1); // imppsto un layout

  // Creo la barra dei Menu i menu e le voci dei menu:
  JMenuBar MenuBar = new JMenuBar(); // barra dei menu
  JMenu file = new JMenu("File"); // Menu File
  JMenuItem OMsg = new JMenuItem("Open Message..."); // Apri Messaggio
  JMenuItem SMsg = new JMenuItem("Save Message..."); // Salva Messaggio
  JMenuItem OKey = new JMenuItem("Open Key..."); // Apri chiave
  JMenuItem OeMsg = new JMenuItem("Open Encrypted Message..."); // Apri
                                  // messaggio
                                  // cifrato
  JMenuItem SeMsg = new JMenuItem("Save Encrypted Message..."); // Salva
                                  // messaggio
                                  // cifrato

  JMenu help = new JMenu("Help"); // Menu Help
  JMenuItem about = new JMenuItem("About..."); // about

  public RvFrame() { // COSTRUTTORE
    setTitle("Red Vernam"); // Imposto titolo, dimenzioni e
    setSize(700, 700);
    setLocation(200, 50); // dico di chiudere l'applicazione
    setDefaultCloseOperation(EXIT_ON_CLOSE); // alla chiusura della finestra

    try {
      jbInit();
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception {

    file.add(OMsg); // Aggiungo le voci al menu File
    file.add(SMsg);
    file.add(OKey);
    file.add(OeMsg);
    file.add(SeMsg);

    help.add(about); // Aggiungo la voce al menu Help

    MenuBar.add(file); // Aggiungo il Menu File alla barra dei menu
    MenuBar.add(help); // Aggiungo il Menu help alla barra dei menu
    setJMenuBar(MenuBar); // Aggiungo la barra dei menu al frame

    /*
     * Chiedo il contenitore di pannelli e imposto come layout gridLayout1,
     * dichiarato alla riga 44
     */
    this.getContentPane().setLayout(gridLayout1);

    jPanel1.setBackground(Color.black); // Setto i colori dei panneelli
    jPanel1.setForeground(Color.white);
    jPanel2.setBackground(Color.black);
    jPanel2.setForeground(Color.white);
    jPanel3.setBackground(Color.black);
    jPanel4.setBackground(Color.black);
    jPanel5.setBackground(Color.black);
    this.setLocale(java.util.Locale.getDefault());
    this.getContentPane().add(jPanel1, null); // Aggiungo i pannelli al
                          // contenitore ricavato alla
                          // riga 91
    this.getContentPane().add(jPanel2, null);
    this.getContentPane().add(jPanel3, null);
    this.getContentPane().add(jPanel4, null);
    this.getContentPane().add(jPanel5, null);

    /* DICO ALLA FINESTRA DI ASCOLTARE : */

    jPanel2.ofButton.addActionListener(this); // Il tasto Apri del secondo
                          // pannello(Testo in chiaro)
    jPanel2.sfButton.addActionListener(this); // Il tasto Salva del secondo
                          // pannello
    jPanel2.clearScnd.addActionListener(this); // Il tasto Clear del secondo
                          // pannello

    jPanel3.okButton.addActionListener(this); // Il tasto Apri del terzo
                          // pannello (Chiave)
    jPanel3.clearThrd.addActionListener(this); // Il tasto clear del terzo
                          // pannello

    jPanel4.oEfButton.addActionListener(this); // Il tasto Apri del quarto
                          // pannello (Testo cifrato)
    jPanel4.sEfButton.addActionListener(this); // Il tasto Salva del quarto
                          // pannello
    jPanel4.clearFrth.addActionListener(this); // Il tasto clear del quarto
                          // pannello

    jPanel5.decButton.addActionListener(this); // Il tasto decifra del
                          // quinto pannello
    jPanel5.encButton.addActionListener(this); // Il tasto cifra del secondo
                          // pannello

    about.addActionListener(this); // La voce about del menu Help
    OMsg.addActionListener(this); // La voce Apri file del menu File
    SMsg.addActionListener(this); // La voce Salva file del menu File
    OKey.addActionListener(this); // La voce apri chiave file del menu File
    OeMsg.addActionListener(this); // La voce apri testo cifrato file del
                    // menu File
    SeMsg.addActionListener(this); // La voce salva file cifrato del menu
                    // File

  }

  public void actionPerformed(ActionEvent e) {

    // GESTIONE DELL'EVENTO

    Object Ob = e.getSource(); // Chi ha generato l'evento?

    // CRITTOGRAFIA

    if (Ob == jPanel5.encButton) { // Encription (l'evento � stato generato
                    // dal pannello 5 tasto cifra)
      if (jPanel2.getText().length() <= jPanel3.getText().length())
        /*
         * Controllo Se la chiave (Contenuta nel terzo pannello) sia
         * lunga almeno quanto al testo (contenuto nel secondo pannello)
         */
        if (jPanel5.intCode)
          jPanel4.setText(NumVernam.encrypt(jPanel2.getText(),
              jPanel3.getText()));
        /*
         * Se la codifica impostata � quella a interi usa i metodi
         * statici della classe NumVernam
         */
        else
          jPanel4.setText(Vernam.encrypt(jPanel2.getText(), jPanel3
              .getText()));
      /*
       * altrimenti (cio� se la codifica impostata � quella a caratteri)
       * usa i metodi statici della classe Vernam
       */
      else
        JOptionPane.showMessageDialog(this,
            "The Key Must be long as Message");
      /*
       * altrimenti (cio� la chiave � pi� corta del messaggio) dai il
       * precedente messaggio di errore
       */
    }

    if (Ob == jPanel5.decButton) { // Decription (l'evento � stato generato
                    // dal pannello 5 tasto decifra)
      if (jPanel5.intCode)
        jPanel2.setText(NumVernam.decrypt(jPanel3.getText(), jPanel4
            .getText()));
      /*
       * Se la codifica impostata � quella a interi usa i metodi statici
       * della classe NumVernam
       */
      else
        jPanel2.setText(Vernam.decrypt(jPanel3.getText(), jPanel4
            .getText()));
      /*
       * Se la codifica impostata � quella a caratteri usa i metodi
       * statici della classe Vernam
       */
    }

    if (Ob == about) { // Apre finestra di dialogo della voce Help->About...
      JOptionPane
          .showMessageDialog(
              this,
              "Title: RedVernam \n Description: Encryption Software \n Copyleft: (c) 2009 Open Source GPL\n Company: www.andrearaso.org \n @version alpha");
    }

    // Apri Messaggio da menu o da tasto:
    if (Ob == jPanel2.ofButton || Ob == OMsg) {
      String temp = new String(apri());
      if (!annullaAction)
        jPanel2.MsgTarea.setText(temp);
      annullaAction = false;
    }
    /*
     * Apre una finestra file chooser tramite un metodo privato
     * (apri())dichiarato successivamente, se il filechooser apre con
     * successo (e non setta anullaAction a true) inserisce nella finestra
     * del pannello 2 (mess in chiaro)
     */

    // Salva il Messaggio da menu o tasto
    if (Ob == jPanel2.sfButton || Ob == SMsg)
      salva(jPanel2.MsgTarea.getText());
    /*
     * Passa al metodo privato salva(String)il testo (in chiaro) che verr�
     * salvato
     */

    if (Ob == jPanel2.clearScnd)
      jPanel2.clear(); // Pulisce l'area di testo del messaggio in chiaro

    // Apri Chiave da menu o da tasto:
    if (Ob == jPanel3.okButton || Ob == OKey) {
      String temp = new String(apri());
      if (!annullaAction)
        jPanel3.keyTarea.setText(temp);
      annullaAction = false;
    }
    /*
     * Apre una finestra file chooser tramite un metodo
     * privato(apri())dichiarato successivamente, se il filechooser apre con
     * successo (e non setta anullaAction a true) inserisce nella finestra
     * del pannello 3 (chiave)
     */

    if (Ob == jPanel3.clearThrd)
      jPanel3.clear();// Pulisce l'area di testo della chiave

    // Apri Messaggio Cifrato da menu o da tasto:
    if (Ob == jPanel4.oEfButton || Ob == OeMsg) {
      String temp = new String(apri());
      if (!annullaAction)
        jPanel4.encrMsgTarea.setText(temp);
      annullaAction = false;
    }
    /*
     * Apre una finestra file chooser tramite un metodo privato dichiarato
     * (apri())successivamente, se il filechooser apre con successo (e non
     * setta anullaAction a true) inserisce nella finestra del pannello 4
     * (mess cifrato)
     */

    // Salva il Messaggio da menu o tasto
    if (Ob == jPanel4.sEfButton || Ob == SeMsg)
      salva(jPanel4.encrMsgTarea.getText());
    /*
     * Passa al metodo privato salva(String) il testo (cifrato) che verr�
     * salvato
     */

    if (Ob == jPanel4.clearFrth)
      jPanel4.clear();// Pulisce l'area di testo del messaggio cifrato

  }

  JFileChooser jfc = new JFileChooser(); // Selettore di file grafico
                      // (filechooser)

  private String apri() { // Metodo che apre un file attraverso un filechooser

    int risposta = jfc.showOpenDialog(this); // Apre la finestra di dialogo
    String txtArea;
    char c;
    txtArea = new String(""); // Stringa che conterra' il file aperto
    int chInt = 0; // carattere temporaneo
    if (risposta == JFileChooser.APPROVE_OPTION) // Se ho premuto il tasto salva...
    {
      File InFile = jfc.getSelectedFile(); // apro il file selezionato
      FileReader freader;
      try {
        freader = new FileReader(InFile); // provo a fare leggere il
                          // file a un lettore di file
        try {
          while ((chInt = freader.read()) != -1) { // finch� il file
                                // avr� elementi
                                // validi...
            c = (char) chInt; // ..inserisci quello che hai letto in
                      // c..
            txtArea = txtArea + c; // ..concatena c a txtArea
          }
        }
        // Se non riesco a leggere il file mando il msg di errore
        catch (IOException e) {
          JOptionPane.showMessageDialog(this, "Error in file reader");
        }

        // provo a chiudere il file e gestisco l'eventuale eccezione
        try {
          freader.close();
        } catch (IOException e) {
          JOptionPane
              .showMessageDialog(this, "Error in file closure");
        }

      } catch (FileNotFoundException e) // se il lettore non trova il file
                        // ...
      {
        JOptionPane.showMessageDialog(this, "Invalid file name!");
        annullaAction = true; // metto a true la variabile di controllo
      }
    } else
      annullaAction = true; // se ho scelto annulla dal filechooser metto
                  // a true la variabile di ctrl annullaAction
    return txtArea; // Ritorno ci� che ho prelevato dal file (o la stringa
            // vuota "")
  }

  private void salva(String toSave) { // Metodo che salva un file attraverso
                    // un filechooser
    int risposta = jfc.showSaveDialog(this); // apro la finestra per salvare
                          // il file...
    FileWriter writer;
    File OutFile = jfc.getSelectedFile(); // Ottengo il file selezionato
    if (risposta == JFileChooser.APPROVE_OPTION) // Se ho premuto il tasto salva...
    {
      try {
        writer = new FileWriter(OutFile); // Passo il file selezionato a
                          // uno scrittore di file
        int n = toSave.length(); // controllo la lunghezza del file da
                      // salvare
        char buf[] = new char[n]; // creo in array di char che possa
                      // contenere il file da salvare
        buf = toSave.toCharArray(); // carico la stringa da savare
                      // sull'array
        for (int i = 0; i < n; i++) {
          writer.write(buf[i]); // salvo carattere per carattere
        }
        writer.close(); // chiudo il file
      } catch (Exception e) // gestisce l'eccezione
      {
        JOptionPane.showMessageDialog(this,
            "Save file error!");
      }

    }
  }

}
TOP

Related Classes of org.andrearaso.redvernam.RvFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.