/*****************************************************
 Amino Acid Preference Toolkit in Java
 Pathogen Project
 Department of Computer Science and Engineering
 University of South Carolina
 Columbia, SC 29208
 Contact Email: rose@cse.sc.edu
*****************************************************/

import java.io.*;
import java.util.*;

public class ParseGenbankFile
{
	public static void main(String[] args) throws Exception
	{

		// return all CDS (coding regions) out of genbank flat file
		// args[0] = filename
		// args[1] = output filename

		BufferedReader bufferedReader = new BufferedReader(new FileReader(args[0]));
		PrintWriter printWriter = new PrintWriter(new FileWriter(args[1]));
		String line, heading, data;
		StringTokenizer tokenizer;

		System.out.println("Working on file: " + args[0]);

		while ((line = bufferedReader.readLine()) != null)
		{
			if (!(line.equals("")))
			{
				//System.out.println("Reading line: " + line);
				tokenizer = new StringTokenizer(line);
				heading = tokenizer.nextToken();
				//System.out.println(line);
				if (heading.equals("CDS"))
				{
					//System.out.println(">" + line);

					data = tokenizer.nextToken();
					


					if (data.startsWith("join"))
					{
						//System.out.println("Join");
				;
						System.out.println("Data: " + data);
			
						while (!(data.indexOf(")") > 0))
						{
							System.out.println("Incomplete CDS line: " + data);
							
							data = data + "," +  bufferedReader.readLine().trim();
						}
						System.out.println("Data: " + data);
						data = data.substring(5, data.length() - 1);
						System.out.println("Substring data: " + data);
						tokenizer = new StringTokenizer(data, ",");
						while (tokenizer.hasMoreTokens())
						{
							String token = tokenizer.nextToken();
							if (token.startsWith(">") || token.startsWith("<"))
								token = token.substring(1);
							if (tokenizer.countTokens() > 0)
							{
								printWriter.println(token + " + y");
							}
							else
							{
								if (token.indexOf(")") > 0)
								token = token.substring(0, token.length() - 1);
								printWriter.println(token + " + n");
							}
						}
					}
					else if (data.startsWith("complement"))
					{
						//System.out.println("Complement");

						data = data.substring(11,data.length() - 1);
						//System.out.println("substring data: " + data);
						if (data.startsWith("join"))
						{
							//System.out.println("Complement and Join: ");
							while (!(data.indexOf(")") > 0))
							{
								//System.out.println("Incomplete CDS line: " + data);
								data = data+ "," + bufferedReader.readLine().trim();
							}
							data = data.substring(5, data.length()-1);
							//System.out.println("substring data: " + data);
							tokenizer = new StringTokenizer(data, ",");
							while (tokenizer.hasMoreTokens())
							{
								String token = tokenizer.nextToken();
								if (token.startsWith(">") || token.startsWith("<"))
									token = token.substring(1);
								if (tokenizer.countTokens() > 0)
								{
									printWriter.println(token + " - y");
								}
								else
								{
									if (token.indexOf(")") > 0)
									token = token.substring(0, token.length() - 1);
									printWriter.println(token + " - n");
								}
							}
						}
						else
						{
							if (data.startsWith("<") || data.startsWith(">"))
								data = data.substring(1);
							printWriter.println(data + " - n");
						}
					}
					else
					{
						//System.out.println("Normal");
						if (data.startsWith("<") || data.startsWith(">"))
						{
							data = data.substring(1);
						}
						printWriter.println(data + " + n");
					}
				}
			}
		}

		bufferedReader.close();
		printWriter.flush();
		printWriter.close();
	
	}

}
