/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication1;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/**
 *
 * @author legrand
 */

/*Permet de lire un allignement de sequence fasta sous la forme d'une arraylist de sequence */
public class ReadAlignement {
    String file;
    ArrayList<Sequence> sequenceArray;

    public ReadAlignement(String file) {
        this.file = file;
        sequenceArray=new ArrayList();
    }
    
    /**fichier fasta convertie en sequence **/
    void fileToSequence(){
        boolean endOfFile = false;
		try	{
			FileReader fileAlignement = new FileReader(file);
			BufferedReader fileBuffer = new BufferedReader(fileAlignement);
			while (!endOfFile) {
				String fileLine = fileBuffer.readLine();
				if (fileLine == null) {
					endOfFile = true;
				} else {
                                        String[] fileLineArray =fileLine.split("");
                                        try {//cas ou fileLineArray[1] n'existe pas
					if ((">").equals(fileLineArray[1])){
                                            String nomSequence="";
                                            for(int i=2;i<fileLineArray.length;i++){
                                               nomSequence+=fileLineArray[i];
                                            }
                                            sequenceArray.add(new Sequence(nomSequence));
                                        }
                                        else if(!" ".equals(fileLineArray[1])){
                                              for(int i=1;i<fileLineArray.length;i++){
                                                Sequence lastSequence=(Sequence) sequenceArray.get(sequenceArray.size()-1);
                                                lastSequence.AddResidu((String) (fileLineArray[i]).toUpperCase());
                                            }        
                                        }
                                          } catch (Exception e) {
                                    }
				}
			}
			fileBuffer.close();
		} catch (IOException e)	{
                    System.out.println("ERREUR");
		}
    }
    
     /**fichier msf convertie en sequence **/
    void msfToSequence(){
         boolean endOfFile = false;
 
		try	{
                   
                    //System.out.println("test");
			FileReader fileAlignement = new FileReader(file);
			BufferedReader fileBuffer = new BufferedReader(fileAlignement);
                        // System.out.println("test");
			while (!endOfFile) {
				String fileLine = fileBuffer.readLine();
                                //System.out.println(fileLine);
                              
				if (fileLine == null) {
					endOfFile = true;
				} else {
                                        String[] fileLineArray =fileLine.split(" ");
                                        for (int i=0;i<fileLineArray.length;i++){
                                            //System.out.println(fileLineArray[i]+i);
                                        }
                                        //System.out.println(" ");
                                        try{
                                        if ("Name:".equals(fileLineArray[1])){
                                            
                                            sequenceArray.add(new Sequence(fileLineArray[2]));
                                        }
                                        
                                        for (int i=0;i<sequenceArray.size();i++){
                                            if (sequenceArray.get(i).Name.equals(fileLineArray[0])){
                                                //System.out.println(fileLineArray[0]);
                                                for (int x=1;x<fileLineArray.length;x++){
                                                    String[]residu=fileLineArray[x].split("");
                                                    //System.out.println("");
                                                    for (int z=0;z<residu.length;z++){
                                                        if(residu[z].length()==1)
                                                          //  System.out.print(residu[z]);
                                                        sequenceArray.get(i).AddResidu(residu[z]);
                                                    }
                                                }
                                                
                                            }
                                        
                                       
                                        
                                          
                                    }
                                        } catch (Exception e) {
                                    }
				}
			}
			fileBuffer.close();
		} catch (IOException e)	{
                    System.out.println("ERREUR");
		}
        
    }
    void PrintSequence(){
        for (int i=0;i<sequenceArray.size();i++){
            Sequence sequence= sequenceArray.get(i);
            System.out.println(sequence.Name+" "+sequence.Seq); 
        }
    }
    

}
