/*
* � 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!");
}
}
}
}