package test;

import ptolemy.actor.Director;
import ptolemy.actor.IORelation;
import ptolemy.actor.Manager;
import ptolemy.actor.TypedCompositeActor;
import ptolemy.actor.lib.Exec;
import ptolemy.actor.lib.FileWriter;
import ptolemy.kernel.util.IllegalActionException;
import ptolemy.kernel.util.KernelException;
import ptolemy.kernel.util.NameDuplicationException;

public class BowtieTest {

	public static void main(String[] args) throws KernelException {

		BowtieTest workflow= new BowtieTest();
		workflow.init();
	}

	public void init() throws IllegalActionException, NameDuplicationException {
		_top = new TypedCompositeActor();
        _top.setName("top");

        _manager = new Manager();

        _director =  new ptolemy.domains.pn.kernel.PNDirector();
        _director.initialQueueCapacity.setExpression("1");
        _director.maximumQueueCapacity.setExpression("65536");
        _top.setDirector((Director)_director);



//        _director= new SDFDirector();
//       _top.setDirector(_director);
        _top.setManager(_manager);

        Exec indexer = new Exec(_top, "Indexer");
        indexer.directory.setExpression("G:/NGS-demo/Demo/bowtie_run");
        indexer.command.setExpression("G:/NGS-demo/Demo/bowtie-0.12.7-win32/bowtie-0.12.7/bowtie-build.exe Reference.fasta Ref_index");
        indexer.firingCountLimit.setExpression("1");
        indexer.prependPlatformDependentShellCommand.setExpression("true");
        indexer.throwExceptionOnNonZeroReturn.setExpression("true");
        indexer.waitForProcess.setExpression("true");


        FileWriter bowtieOutput= new FileWriter(_top, "filewriter1");
        bowtieOutput.filename.setExpression("System.out");
        IORelation rel1=(IORelation)_top.connect(indexer.output, bowtieOutput.input);
        rel1.setWidth(1);

        Exec aligner = new Exec(_top, "aligner1");
        aligner.directory.setExpression("G:/NGS-demo/Demo/bowtie_run");
        aligner.command.setExpression("G:/NGS-demo/Demo/bowtie-0.12.7-win32/bowtie-0.12.7/bowtie.exe -S Ref_index -1 Read1.fastq -2 Read2.fastq samout.txt");
        aligner.firingCountLimit.setExpression("1");
        aligner.prependPlatformDependentShellCommand.setExpression("true");
        aligner.throwExceptionOnNonZeroReturn.setExpression("true");
        aligner.waitForProcess.setExpression("true");

        IORelation rel2=(IORelation) _top.connect(indexer.exitCode, aligner.trigger);
        rel2.setWidth(1);

        System.out.println(_top.exportMoML());
       _top.fire();

	}



	///////////////////////////////////
	private Manager _manager;
    private TypedCompositeActor _top;
    private ptolemy.domains.pn.kernel.PNDirector _director;
    //private ptolemy.domains.sdf.kernel.SDFDirector _director;
}

