import charite.christo.strap.StrapProtein;
import charite.christo.strap.StrapProtein;
import charite.christo.strap.ResidueAnnotation;
import charite.christo.strap.StrapProtein2BiojavaSequence;
import charite.christo.strap.BiojavaSequence2StrapProtein;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import org.biojava.bio.gui.sequence.SequenceRenderer;
import org.biojava.bio.gui.sequence.FeatureRenderer;
import org.biojava.bio.gui.sequence.BasicFeatureRenderer;
import org.biojava.bio.gui.sequence.SymbolSequenceRenderer;
import org.biojava.bio.gui.sequence.SequencePanel;
import org.biojava.bio.gui.sequence.FeatureBlockSequenceRenderer;
import org.biojava.bio.gui.sequence.MultiLineRenderer;
import org.biojava.bio.symbol.RangeLocation;
import org.biojava.bio.seq.GappedSequence;
import org.biojava.bio.seq.ProteinTools;
/*
  java   DemoStrapProtein2BiojavaSequence
  Usage of the class StrapProtein2BiojavaSequence is demonstrated.
  A STRAP protein object with a gapped sequence and a residue selection is created
  and converted into Biojava object.
*/
public class DemoStrapProtein2BiojavaSequence {
    public static void main(String argv[]) {
        /* Initiate a STRAP protein object with a gapped sequence */
        final StrapProtein p=new StrapProtein();
        p.setGappedSequence("ASD   FGHKL");
        /* Add a residue selection to the STRAP protein */
        final ResidueAnnotation annotation=new ResidueAnnotation(p);
        annotation.setSelectedAminoacids("3-5,70-79,900-1000");
        p.addResidueSelection(annotation);
        /* Convert the STRAP object to BioJava */
        final GappedSequence biojavaSequence=new StrapProtein2BiojavaSequence(p).sequence();
        /* Display using BioJava-methods */
        showWithBiojava(biojavaSequence);
    }
    /* This method displays a Biojava object. */
    /* It uses exclusively  Biojava methods. */
    /* See the examples in "Biojava in Anger" by Mark Schreiber for more details. */
    private static void showWithBiojava(GappedSequence seq) {
        try{
            final MultiLineRenderer mlr=new MultiLineRenderer();
            final FeatureRenderer featr=new BasicFeatureRenderer();
            final SequenceRenderer seqR=new SymbolSequenceRenderer();
            final SequencePanel seqPanel=new SequencePanel();
            final FeatureBlockSequenceRenderer fbr=new FeatureBlockSequenceRenderer();
            fbr.setFeatureRenderer(featr);
            mlr.addRenderer(fbr);
            mlr.addRenderer(seqR);
            seqPanel.setRenderer(mlr);
            seqPanel.setSequence(seq);
            seqPanel.setRange(new RangeLocation(1,seq.length()+1));
            final JFrame f=new JFrame();
            f.setSize(300,300);
            f.getContentPane().add(new JScrollPane(seqPanel));
            f.show();
        } catch(Exception e){System.out.println("caught: "+e);e.printStackTrace(System.out);}
    }
}