import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.sound.sampled.*; import java.io.*; import java.util.Calendar; /** * Se encarga de administrar las acciones para un marco */ public class Administrator implements ActionListener { /** * Marco donde se ubican los componentes de ventana y menues */ private JPostItFrame post; /** * Nombre de archivo para hacer el attachment de correo */ private String strFilename; /** * Dialogo de grabación */ private DialogoRec dr; /** * Timer que maneja la aparición de un marco escondido */ private Timer T; /** * Genera un nuevo marco para contener obejtos Swing * Le pasa como referencia este objeto Administrator */ public Administrator() { post = new JPostItFrame(this); } /** * Este metodo escucha las acciones de los botones en el Contenedor * La idea es que esta clase Administre dichos eventos para mejor * modularidad de la solución * @param a El ActionEvent asociado */ public void actionPerformed(ActionEvent a) { if (a.getActionCommand().equals("Esconder")) { hideAndTime(); } if (a.getActionCommand().equals("Correo")) { boolean noFile = false; String[] mailData = null; try { mailData = checkInit("mailConfig.cfg"); } catch (FileNotFoundException et) { noFile = true; } catch (ClassNotFoundException et) { System.err.println("Problemas!"); } catch (IOException et) { noFile = true; } if (strFilename != null && dr.isRecorded()) { if (noFile) { String mssg = post.getPanel().getPapel().getText(); Dialogo d = new Dialogo(post.getMarco(), mssg, strFilename); } else { String mssg = post.getPanel().getPapel().getText(); Dialogo d = new Dialogo(post.getMarco(), mailData, mssg, strFilename); } } else { if (noFile) { String mssg = post.getPanel().getPapel().getText(); Dialogo d = new Dialogo(post.getMarco(), mssg); } else { String mssg = post.getPanel().getPapel().getText(); Dialogo d = new Dialogo(post.getMarco(), mailData, mssg); } } } if (a.getActionCommand().equals("Voz")) { Calendar rightNow = Calendar.getInstance(); strFilename = ""+rightNow.get(Calendar.HOUR_OF_DAY)+ rightNow.get(Calendar.MINUTE)+rightNow.get(Calendar.SECOND)+".wav"; File outputFile = new File(strFilename); AudioFormat audioFormat = new AudioFormat( AudioFormat.Encoding.PCM_UNSIGNED,22050.0F, 8, 1, 1, 22050.0F, true); DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat); TargetDataLine targetDataLine = null; try { targetDataLine = (TargetDataLine) AudioSystem.getLine(info); targetDataLine.open(audioFormat); } catch (LineUnavailableException e) { System.out.println("unable to get a recording line"); e.printStackTrace(); System.exit(1); } AudioFileFormat.Type targetType = AudioFileFormat.Type.WAVE; SimpleAudioRecorder recorder = new SimpleAudioRecorder( targetDataLine, targetType, outputFile); dr = new DialogoRec(post.getMarco(), recorder); }//end if }//end actionPerformed /** * Este método carga un archivo de configuracion con la información * de correo ya almacenada por el usuario. * @return Un arreglo de String con el servidor SMTP, el user y la password */ protected String[] checkInit(String s) throws IOException, FileNotFoundException, ClassNotFoundException { FileInputStream fstream = new FileInputStream(s); ObjectInputStream oosin = new ObjectInputStream(fstream); String[] ss = new String[3]; ss[0] = (String)oosin.readObject(); //smtp ss[1] = (String)oosin.readObject(); //user ss[2] = new String((char[])oosin.readObject()); //pass oosin.close(); return ss; } /** * Maneja la configuracion del temporizador para * esconder los marcos. Tambien tiene la informacion sobre que * se debe hacer cuando expira el Timer. */ protected void hideAndTime() { String s = (post.getPanel().getStatus()); if (s.equals("Informacion")) { post.getMarco().setVisible(true); } else { post.getMarco().setVisible(false); int i = s.indexOf(" "); String sNum = s.substring(0,i); int delay = Integer.parseInt(sNum); // (delay * 60000); T = new Timer(delay * 5000, new ActionListener() //para debug espera al menos 5 seg { public void actionPerformed(ActionEvent evnt) { post.getMarco().setVisible(true); /*Aca se toca la grabacion. Debo pasar el arraylist y leerlo*/ if (strFilename != null && dr.isRecorded()) { SimpleAudioPlayer play = new SimpleAudioPlayer(strFilename); } } } ); T.setRepeats(false); T.start(); } } /** * Retorna el objeto tipo JPostItFrame que ha creado * este Administrador * @return El obejto JPostItFrame. */ public JPostItFrame getPost() { return post; } }