/*
 * 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.
 */


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 *
 * @author gapavlop
 */
public class Tab2Fasta {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        convert_file_to_fastafile(args[0]);
    }


    static void convert_file_to_fastafile(String filename) {
        try {
            FileReader fileReader = new FileReader(filename);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line;
            StringBuffer buf = new StringBuffer();
            int cnt = 0;
            while ((line = bufferedReader.readLine()) != null) {
                String[] str = line.split("\t");
                String protein = ">";
                protein+=(str[0]);
                buf.append(protein + "\n");
                ArrayList<String> sequence_parts = getParts(str[1].trim(), 60);
                for (int i = 0; i < sequence_parts.size(); i++) {
                    buf.append(sequence_parts.get(i) + "\n");
                }
                if (cnt != 0 && cnt % 1000000 == 0) {
                    System.out.print(buf.toString());
                    buf.setLength(0);
                }
                cnt++;
            }
            System.out.print(buf.toString());
            buf.setLength(0);
            fileReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private static ArrayList<String> getParts(String string, int partitionSize) {

        ArrayList<String> parts = new ArrayList();
        int len = string.length();
        if (len <= partitionSize) {
            parts.add(string);
        } else {
            for (int i = 0; i < len; i += partitionSize) {
                parts.add(string.substring(i, Math.min(len, i + partitionSize)));
            }
        }

        return parts;
    }

}


