//by deurus [oct/2012]
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.text.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.awt.event.*;
import java.awt.GridLayout;
import java.awt.Image;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
 
class Encriptar extends JFrame implements ActionListener {
 
 //carga del algoritmo
 DES clase_encript = new DES("deurus");
 JLabel etiqueta = new JLabel("  << by deurus [oct/2012] >>");
 
 //cajas de texto
 JTextArea texto_desencriptado = new JTextArea(" ");
  JScrollPane scroll_desencript=new JScrollPane(texto_desencriptado,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 JTextArea texto_encriptado = new JTextArea(" ");
  JScrollPane scroll_encript=new JScrollPane(texto_encriptado,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
 //botones
 JButton desencriptar_archivo = new JButton ("Desencriptar Archivos");
 
 
 Encriptar() {
 
  //el diseño
  setLayout(new GridLayout(0,1));
 
  //los elementos
  add(scroll_encript);
  add(desencriptar_archivo);
  add(etiqueta);
 
  //implementamos la accion
  desencriptar_archivo.addActionListener(this);
 
  //Cerrar Ventana
  addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent we) {
     System.exit(0);
    }
  });
 
  //Opciones Ventana
  	setTitle("DesEncriptador de archivos IT Txartela");
  	Image icon = new ImageIcon(getClass().getResource("icon.png")).getImage();
  	setIconImage(icon);

     setSize(500,350);
     setLocationRelativeTo(null);
     setVisible(true);
 
 }
 // listener
 public void actionPerformed(ActionEvent evt) {
  /**
	 if(evt.getSource()==encriptar)
    texto_encriptado.setText(clase_encript.encrypt(texto_desencriptado.getText()));
 
  if(evt.getSource()==desencriptar)
    texto_desencriptado.setText(clase_encript.decrypt(texto_encriptado.getText()));
  **/
  if(evt.getSource()==desencriptar_archivo)
	  try {
		  Runnable runnable = new ValidateThread();
          Thread thread = new Thread(runnable);
          thread.start();
		  //
		texto_encriptado.setText("");
  		Crypto crypto = new Crypto("nunca sin mi permiso");
  		//Selección de archivos
        String toReturn = null;
        JFileChooser Chooser = new JFileChooser();
        Chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        Chooser.setMultiSelectionEnabled(true);
        int choosen = Chooser.showOpenDialog(this);
        if (choosen == JFileChooser.APPROVE_OPTION) {  
        	File[] files = Chooser.getSelectedFiles();
        	//Bucle para procesado
        	for (int i=0; i<files.length; i++) {
        		Date fecha1 = new Date ();
        		//texto_encriptado.setText("");
        		texto_encriptado.append("Fecha: " + fecha1.toString() + "\n");
        		texto_encriptado.append("Procesando: " + files[i].getName() + "\n");
        		//Preparo los archivos
        		int alea = (int) (Math.random()*10000+1);
        		File fenc = new File (files[i] + "_" + alea);
        		File fdec = files[i];        		
        		files[i].renameTo(fenc);
        		texto_encriptado.append("Archivo encriptado: " + fenc + "\n");
        		texto_encriptado.append("Archivo desencriptado: " + fdec + "\n");
        		//
          		FileInputStream inFile = new FileInputStream(fenc);
          		java.io.InputStream stream = crypto.decrypt(inFile);
          		FileOutputStream outFile = new FileOutputStream(fdec,true);
          		//
          		texto_encriptado.append("DesEncriptando..." + "\n");
          		byte[] buf = new byte[1024];
          		int len;
          		 
          		while ((len = stream.read(buf)) > 0) {
          		  outFile.write(buf, 0, len);
          		}
          		texto_encriptado.append("DesEncriptando con exito" + "\n");
          		inFile.close();
          		outFile.close();
          		fenc = null; 
          		fdec = null;
            }
        }
        
	  } catch (Exception e) {
		  JOptionPane.showMessageDialog(this,"Error: "+e.getMessage());
	  }
 }
 
 //Refrescar controles
 class ValidateThread implements Runnable {
	    public void run() {
	        validate();
	    }
	}
 
 //la clase principal
 public static void main (String []args) {
  new Encriptar();
 }
}
