/*
 *                    BioJava development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 */
package symbol;

import java.util.*;

import org.biojava.bio.symbol.*;
import org.biojava.bio.seq.DNATools;
import org.biojava.bio.seq.ProteinTools;
import org.biojava.bio.seq.io.*;

/**
 * This demonstrates building an alignment from a set of sequences of the same
 * length.
 */
public class TestAmbiguity {

  public static void main(String [] args) {

    try {
      
      {
        final String dnaText = "agctrymkswhbvdn-AGCTRYMKSWHBVDN";
        final FiniteAlphabet dna = DNATools.getDNA(); 	
        
        final SymbolParser sParser = dna.getParser("token");
        final SymbolList dnaList = sParser.parse(dnaText);
        
        for(int i = 1; i <= dnaList.length(); i++) {
          final Symbol s = dnaList.symbolAt(i);
          System.out.print(s.getName() + " -> {");
            Iterator j = ((FiniteAlphabet) s.getMatches()).iterator();
            if(j.hasNext()) {
              System.out.print(((Symbol) j.next()).getName());
            }
            while(j.hasNext()) {
              System.out.print(", " + ((Symbol) j.next()).getName());
            }
          System.out.println("}");
        }
      }
  	

      {
        System.out.println("Now Testing Prot"); 
        final String protText = "agctrymkswhvdn-AGCTRYMKSWHVDN";
        final FiniteAlphabet protein = ProteinTools.getAlphabet(); 
        //dna.addSymbol(AlphabetManager.getGapSymbol());//problem here, even when explicitly adding the gap symbol it doesn't parse
        final SymbolParser protParser = protein.getParser("token");
        final SymbolList protList = protParser.parse(protText);
        
        for(int i = 1; i <= protList.length(); i++) {
          final Symbol s = protList.symbolAt(i);
          System.out.print(s.getName() + " -> {");
            Iterator j = ((FiniteAlphabet) s.getMatches()).iterator();
            if(j.hasNext()) {
              System.out.print(((Symbol) j.next()).getName());
            }
            while(j.hasNext()) {
              System.out.print(", " + ((Symbol) j.next()).getName());
            }
          System.out.println("}");
        }
      }

      {
        System.out.println("Now Testing Prot-Term"); 
        final String protTText = "agctrymkswhvdn-AGCTRYMKSWHVDN*";
        final FiniteAlphabet proteinT = ProteinTools.getTAlphabet(); 
        //dna.addSymbol(AlphabetManager.getGapSymbol());//problem here, even when explicitly adding the gap symbol it doesn't parse
        final SymbolParser protTParser = proteinT.getParser("token");
        final SymbolList protTList = protTParser.parse(protTText);
        
        for(int i = 1; i <= protTList.length(); i++) {
          final Symbol s = protTList.symbolAt(i);
          System.out.print(s.getName() + " -> {");
            Iterator j = ((FiniteAlphabet) s.getMatches()).iterator();
            if(j.hasNext()) {
              System.out.print(((Symbol) j.next()).getName());
            }
            while(j.hasNext()) {
              System.out.print(", " + ((Symbol) j.next()).getName());
            }
          System.out.println("}");
        }
      }
    } catch (Throwable t) {
      t.printStackTrace();
      System.exit(1);
    }
  }
}
