Sei sulla pagina 1di 7

import java.awt.

*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.util.*;

public class moon extends JFrame


{
static int SCROLLBARS_BOTH;
File f;
String textoEtiqueta=" ";
String misatge,titul;
Hashtable misDatos=new Hashtable(1400);
Hashtable miPlantilla=new Hashtable(90);
ArrayList codigos=new ArrayList();
TextArea encontrado = new TextArea(" ",15,80,SCROLLBARS_BOTH);
JComboBox eligeCodigo=new JComboBox(); //para que el usuario seleccione un código.

public moon() // constructor


{
super("Predicción de proteínas moonlighting");
getContentPane().setLayout(null);
encontrado.setBounds(50,110,700,510);
encontrado.setBackground(Color.white);
encontrado.setEditable(false);
getContentPane().add(encontrado);
encontrado.setVisible(false);
eligeCodigo.setBounds(200,10,150,25);
eligeCodigo.setBackground(Color.white);
eligeCodigo.setEditable(false);
eligeCodigo.setMaximumRowCount(30);
getContentPane().add(eligeCodigo);
eligeCodigo.setVisible(false);
ponMenu(); // da el menú principal
} // cierra el constructor...

public static void main(String [] args){


moon tp=new moon();
tp.setSize(950,700);
tp.setBackground(Color.white);
tp.setVisible(true);
}// cierra main()

private void ponMenu(){


JMenuBar mbar=new JMenuBar();
JMenu men1=new JMenu("Leer ficheros ");
JMenu men2=new JMenu(" Búsquedas");
JMenuItem item1=new JMenuItem("Ficheros PSI-BLAST");
JMenuItem item2=new JMenuItem("Fichero Plantilla");
JMenuItem item3=new JMenuItem("Salir"); // cierra la aplicación
JMenuItem item4=new JMenuItem("Por código");

item1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
buscaFicherosPsiBlast(); // lo busca y si lo encuentra lo lee y pasa datos al hashtable <misDatos>.
} //cierro actionPerformed(ActionEvent e)
}); // cierra item1.addActionListener

item2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
leerPlantilla(); // lo busca y si lo encuentra lo lee y pasa datos al hashtable <misDatos>.
} //cierro actionPerformed(ActionEvent e)
}); // cierra item1.addActionListener

item3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
} //cierro actionPerformed(ActionEvent e)
}); // cierra item3.addActionListener

item4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
encontrado.setVisible(false);
repaint();
if(codigos.size()==0){//no se han cargado los códigos de la plantilla..
titul="¡ ATENCION !";
misatge="Primero debe leer el fichero plantilla.\n";
misatge=misatge+"Vaya al menú <Leer ficheros> opción <Fichero plantilla>";
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}else if(misDatos.size()==0){//no se han cargado ficheros psiblast...
titul="¡ ATENCION !";
misatge="Primero debe cargar los ficheros psiblast.\n";
misatge=misatge+"Vaya al menú <Leer ficheros> opción <Ficheros psi-blast>";
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}else{
seleccionarCodigo();

}
} //cierro actionPerformed(ActionEvent e)
}); // cierra item4.addActionListener

eligeCodigo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String cod=(String) eligeCodigo.getSelectedItem();
//textoEtiqueta="Código seleccionado: "+cod;
eligeCodigo.setVisible(false);
//encontrado.setText(textoEtiqueta);
// encontrado.setVisible(true);
repaint();
procesa(cod); //operaciones una vez elegido un código...
//lire();
} //cierro actionPerformed(ActionEvent e)
}); // cierra item5.addActionListener
men1.add(item1);
men1.add(item2);
men1.add(item3);
men2.add(item4);
mbar.add(men1);
mbar.add(men2);
setJMenuBar(mbar);
}// fin de ponMenu()

private class Informe {


String tipo,nom,score,evalue,fichero;
Informe(String a,String b,String c,String d,String e){ // constructor
tipo=a;
nom=b;
score=c;
evalue=d;
fichero=e;
}//fin del constructor

}//fin clase Informe

private class Plantilla {


String funcion1,funcion2;
Plantilla(String a,String b){ // constructor
funcion1=a;
funcion2=b;
}//fin del constructor

}//fin clase Plantilla

private void buscaFicherosPsiBlast(){


encontrado.setVisible(false);
repaint();
String detalle=" ";
String nomDirect=JOptionPane.showInputDialog("Dirección donde se encuentran los ficheros Psi-BLAST.(Ej: C:\\ \\
PSIBLAST)");
if(nomDirect==null||nomDirect.length()<2){
titul="¡ ATENCION !";
detalle="Debe indicar la dirección";
JOptionPane.showMessageDialog(null,detalle,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}//cierra if(nomDirect==null||nomDirect.length()<2)

File arch=new File(nomDirect);


if (arch.exists()){
if (arch.isDirectory()){
textoEtiqueta="Subdirectorio: "+nomDirect;
encontrado.setText(textoEtiqueta);
encontrado.setVisible(true);
String arr[]=arch.list(); // en el array arr están todos los ficheros del directorio indicado.
for(int j=0; j<arr.length;j++){
textoEtiqueta=textoEtiqueta+"\n Leyendo fichero: "+arr[j];
encontrado.setText(textoEtiqueta);
File f=new File(arr[j]);
if (!llegeix(f)){ // ya tengo datos en el hashtable <misDatos>.
if(misatge.length()>2){ // Error en el acceso al fichero, no se podía leer...
titul="¡ ATENCION !";
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
misatge=" ";
}else{
titul="¡ ATENCION !";
detalle="SE HA PRODUCIDO UN ERROR EN LA LECTURA DEL FICHERO";
JOptionPane.showMessageDialog(null,detalle,titul,JOptionPane.INFORMATION_MESSAGE);
misatge=" ";
}//cierra f(misatge.length()>2)

}// if (!llegeix(f))

}// cierro for(int j=0; j<arr.length;j++)


textoEtiqueta=textoEtiqueta+"\n En hashtable se han almacenado "+misDatos.size()+" anotaciones...";
encontrado.setText(textoEtiqueta);
}else{
titul="¡ ATENCION !";
detalle=nomDirect+" no es un directorio.";
JOptionPane.showMessageDialog(null,detalle,titul,JOptionPane.INFORMATION_MESSAGE);
return;
} // cierro if (arch.isDirectory()) y su else...

}else{
titul="¡ ATENCION !";
detalle="No existe el directorio indicado";
JOptionPane.showMessageDialog(null,detalle,titul,JOptionPane.INFORMATION_MESSAGE);
return;
} // cierro if (arch.exists()) con su else...
}// fin de BuscaFicherosPsiBlast()
//______________________________________________________________________________________________
_____________
boolean llegeix(File fit) { // lee el fichero <fit> y pasa parte de sus datos al hashtable <misDatos>
int fase=0; //fase=0 significa que aun no hemos llegado a la linea que contiene <Sequences producing significant
alignments>
//fase=1 significará que ya hemos llegado a la linea que contiene <sequences producing significant
alignments>
//fase=2 significará que hemos llegado a una línea donde aparece <Alignments>, luego FIN
int k,k1,k3;
int cont=0; //para ver si se añaden datos al hashtable.
String tipo,clave,nom,restos,score,evalue;
DataInputStream dis = null;
String record = null;
if (fit.canRead())
{
try
{
FileInputStream fis = new FileInputStream(fit);
BufferedInputStream bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
while ( (record=dis.readLine()) != null )
{
switch (fase) {
case 0: //estamos al principio del recorrido
if (record.indexOf("Sequences")>-1){
if (record.indexOf("alignments")>-1){
fase=1;
}
}
break;//salir del switch
case 1: //ya pasamos la línea que contiene <Sequences producing significant alignments>
//empieza la toma de datos.
if (record.indexOf("Alignments")>-1){ //hemos llegado al final de nuestra zona de lectura, luego fin...
fase=2;
if(cont==0){//la etiqueta no indica el nombre de ningún fichero.
titul="¡ ATENCION !";
misatge="No se han recogido datos del fichero: "+fit.getName();
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
}// fin de if(cont==0)
return true;
} else {
if (record.length()<1){ //línea sin información
break;
}else{

k=record.indexOf('|'); //la primera posición donde está el caracter | (línea vertical).


tipo=record.substring(0,k);
k1=record.indexOf('|',k+1); //la posición donde está el caracter | (línea vertical).
clave=record.substring(k+1,k1);
int p=clave.indexOf('.'); //si en la clave hay un punto, eliminarlo, y lo que le sigue también.
if(p>0)
clave=clave.substring(0,p);
clave=clave.trim();
nom=record.substring(k1+1,67);
restos=record.substring(68);
restos=restos.trim();
int k4=restos.indexOf(' ');
score=restos.substring(0,k4);
evalue=restos.substring(k4);
evalue=evalue.trim();
misDatos.put(clave, new Informe(tipo,nom,score,evalue,fit.getName()));
cont++; // hemos añadido datos al hashtable.

}
}
break;
case 2: //hemos llegado al final de nuestra zona de lectura, luego fin...
if(cont==0){//la etiqueta no indica el nombre de ningún fichero.
titul="¡ ATENCION !";
misatge="No se han recogido datos del fichero: "+fit.getName();
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
}// fin de if(cont==0)
return true;

}//fin del switch

} //cierro while

}
catch (IOException e)
{
misatge="Excepció IOException!" + e.getMessage();
return false;
}
finally
{
if (dis != null)
{
try
{
dis.close();
}
catch (IOException ioe)
{
misatge="Excepció IOException! al cierre " + ioe.getMessage();
return false;
}
}
}

} // del canRead
if(cont==0){//la etiqueta no indica el nombre de ningún fichero.
titul="¡ ATENCION !";
misatge="No se han recogido datos del fichero: "+fit.getName();
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
}// fin de if(cont==0)
return true;
}// fin de llegeix
//________________________________________________________________________
private void leerPlantilla (){
String detalle=" ";
int n=0;
int k1,k2,k3;
String mcodi,mf1,mf2;
textoEtiqueta=" ";
encontrado.setVisible(false);
repaint();
String nomArchiu=JOptionPane.showInputDialog("Indica el nombre y extension del fichero plantilla.");
if(nomArchiu==null||nomArchiu.length()<2){
titul="¡ ATENCION !";
detalle="Debe indicar un Archivo";
JOptionPane.showMessageDialog(null,detalle,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}//cierra if(nomArchiu==null||nomArchiu.length()<2)
f=new File(nomArchiu);
textoEtiqueta="Leyendo el archivo "+nomArchiu;
detalle=" ";
DataInputStream dis = null;
String record = null;
if (f.canRead())
{
try
{
FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
while ( (record=dis.readLine()) != null ) {
k1=record.indexOf('\t'); // busco el primer tabulador
if(k1>0){
mcodi=record.substring(0,k1);
mcodi=mcodi.trim();
}else{
continue;
}//fin de if(k1>0)
k2=record.indexOf('\t',k1+1); // busco el siguiente tabulador
if(k2>0){
mf1=record.substring(k1+1,k2);
mf1=mf1.trim();
}else{
continue;
}//fin de if(k2>0)
k3=record.lastIndexOf('\t'); //busco posición del último tabulador
if(k3>0){
mf2=record.substring(k3+1);
mf2=mf2.trim();
}else{
continue;
}//fin de if(k3>0)
miPlantilla.put(mcodi, new Plantilla(mf1,mf2));
codigos.add(mcodi); //los códigos de la plantilla se añaden al ArrayList <codigos> para luego poder
seleccionar uno.
n++; //cuenta numero de codigos añadidos al hashtable miPlantilla
textoEtiqueta=textoEtiqueta+"\n Encontrados: "+mcodi+"..."+mf1+"..."+mf2;

}// cierra while ( (record=dis.readLine()) != null )


encontrado.setVisible(true);
textoEtiqueta=textoEtiqueta+"\n En total "+n+" códigos";
encontrado.setText(textoEtiqueta);
repaint();
}
catch (IOException e)
{
misatge="Excepció IOException!" + e.getMessage();

}
finally
{
if (dis != null)
{
try
{
dis.close();
}
catch (IOException ioe)
{
misatge="Excepció IOException! al cierre " + ioe.getMessage();
}
}
}
}
}//fin de LeerPlantilla()
//_________________________________

private void seleccionarCodigo(){


encontrado.setText(" ");
encontrado.setVisible(false);
repaint();
for (int j=0; j<codigos.size(); j++){
String opc=(String)codigos.get(j); //saco un código del ArrayList <codigos>...
eligeCodigo.addItem(opc); //y lo anoto en la caja de selección JComboBox <eligecodigo>
}// cierro for (int j=0; j<codigos.size(); j++)
eligeCodigo.setVisible(true);
repaint();
}// cierra private void SeleccionaCodigo()

private void procesa(String mcod){


Plantilla p=(Plantilla) miPlantilla.get(mcod);
if (p==null){
titul="¡ ATENCION !";
misatge=mcod+" no consta en el hashtable de la plantilla.";
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}//cierro if (p==null)
String mf1=p.funcion1;
String mf2=p.funcion2;
//textoEtiqueta="codigo: "+mcod+" funcion1: "+mf1+" funcion2: "+mf2;
//encontrado.setText(textoEtiqueta);
//encontrado.setVisible(true);
//repaint();
buscar(mcod,mf1,mf2);//En todos los ficheros psiblast buscará el código mcod, y si lo encuentra en un fichero, lo
recorrerá
//para buscar las funciones mf1 y mf2
}// fin de private void procesa()
//______________________________________________________________________________________________
__________
private void buscar(String codi, String f1, String f2){
int scorf1=-100000;
int scorf2=-100000;
String evalf1=" ";
String evalf2=" ";
Informe inf=(Informe)misDatos.get(codi);
if (inf==null){
titul="¡ ATENCION !";
misatge=codi+" no consta en el hashtable psiblast.";
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}//cierro if (inf==null)
String ficher=inf.fichero; //fichero donde estaba el codigo <codi> que buscabamos.
if (ficher==null){
titul="¡ ATENCION !";
misatge=" No consta fichero en el hashtable psiblast de clave: "+codi;
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}//cierro if (ficher==null)
Enumeration lista=misDatos.elements(); //lista con todos los objetos Informe del hashtable psiblast.
while (lista.hasMoreElements()){
Informe in=(Informe) lista.nextElement(); //objeto guardado en una posición del hashtable <misDatos>.
String f=in.fichero;

if(f.equals(ficher)){//el objeto guardado es del mismo fichero donde estaba el código buscado.
String fun=in.nom; //la función indicada en ese objeto.
if(fun==null){
titul="¡ ATENCION !";
misatge=" No consta función en el hashtable psiblast.";
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}// cierra if(fun==null)
int pos=fun.indexOf(f1);
if(pos>0){ //encuentra la función <f1> correspondiente al código buscado.
if(in.score==null){
titul="¡ ATENCION !";
misatge=" No consta score en el hashtable psiblast.";
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}// cierra if(in.score==null)
int p=Integer.parseInt(in.score);
if(p>scorf1){
scorf1=p;
evalf1=in.evalue;
}//cierra if(p>scorf1)
}//cierra if(pos>0)
pos=fun.indexOf(f2);
if(pos>0){ //encuentra la función <f2> correspondiente al código buscado.
if(in.score==null){
titul="¡ ATENCION !";
misatge=" No consta score en el hashtable psiblast.";
JOptionPane.showMessageDialog(null,misatge,titul,JOptionPane.INFORMATION_MESSAGE);
return;
}// cierra if(in.score==null)
int p=Integer.parseInt(in.score);
if(p>scorf2){
scorf2=p;
evalf2=in.evalue;
}//cierra if(p>scorf2)
}//cierra if(pos>0)

}//cierra if(f.equals(ficher))
}//cierra while (lista.hasMoreElements()
textoEtiqueta="\nEn la plantilla se seleccionó el código: "+codi+", con sus funciones: "+f1+" y "+f2+"\n\n";
textoEtiqueta=textoEtiqueta+"En los ficheros PSIBLAST el código seleccionado: "+codi+" se localizó en el fichero:
"+ficher+"\n\n";
if(scorf1>0)
textoEtiqueta=textoEtiqueta+"donde la función: "+f1+" consta con SCORE="+scorf1+ " y EVALUE="+evalf1+"\n\n";
else
textoEtiqueta=textoEtiqueta+"pero no consta la función: "+f1+"\n\n";
if(scorf2>0)
textoEtiqueta=textoEtiqueta+"y la función: "+f2+" consta con SCORE="+scorf2+ " y EVALUE="+evalf2;
else
textoEtiqueta=textoEtiqueta+"pero no consta la función: "+f2;
encontrado.setText(textoEtiqueta);
encontrado.setVisible(true);
repaint();
}//fin de private void buscar(String codi, String f1, String f2)
}// fin de public class moon extends JFrame

Potrebbero piacerti anche