/**
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 *
 * Copyright (C)
 * <a href="http://www.inab.org">Spanish National Institute of Bioinformatics (INB)</a>
 * <a href="http://www.bsc.es">Barcelona Supercomputing Center (BSC)</a>
 * <a href="http://inb.bsc.es">Computational Node 6</a>
 */

package org.inb.biomoby.client.gui.ontology;

import javax.swing.BoxLayout;
import org.inb.biomoby.client.gui.AbstractMobyComponent;
import org.inb.biomoby.client.gui.IDynamicComponent;
import org.inb.biomoby.client.gui.ISequenceCoordinateTransformer;
import org.inb.biomoby.client.gui.ISequenceDependent;
import org.inb.biomoby.client.gui.ITransformable;
import org.inb.biomoby.client.gui.auxiliary.MultilineCommentedNASequenceDescriptionMobyComponent;
import org.inb.biomoby.client.gui.ontology.CommentedNASequenceComponent.CommentedNASequenceListener;
import org.inb.biomoby.client.gui.ontology.GenericSequenceComponent.GenericSequenceListener;
import org.inb.biomoby.shared.ontology.CommentedNASequence;

/**
 * @author Dmitry Repchevsky
 */

public class CommentedNASequenceComponent extends AbstractMobyComponent
        implements IDynamicComponent<CommentedNASequenceListener>,
                   ISequenceDependent,
                   ITransformable
{
    private GenericSequenceComponent genericSequencePanel;

    private MultilineCommentedNASequenceDescriptionMobyComponent description;
    
    private CommentedNASequenceComponent(GenericSequenceComponent genericSequencePanel)
    {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        
        add(genericSequencePanel);
        
        description = new MultilineCommentedNASequenceDescriptionMobyComponent();
        add(description);
        
        this.genericSequencePanel = genericSequencePanel;
    }

    public CommentedNASequenceComponent()
    {
        this(new GenericSequenceComponent());
    }
    
    public CommentedNASequenceComponent(CommentedNASequence sequence)
    {
        this(new GenericSequenceComponent(sequence));

        description.setCommentedAASequence(sequence);
    }    

    public CommentedNASequence getData()
    {
        return (CommentedNASequence)genericSequencePanel.getData();
    }

    @Override
    public void setPosition(int position)
    {
        genericSequencePanel.setPosition(position);
    }

    @Override
    public void setSequenceVisible(boolean isVisible)
    {
        genericSequencePanel.setVisible(isVisible);
    }
    
    @Override
    public ISequenceCoordinateTransformer getTransformer()
    {
        return genericSequencePanel.getTransformer();
    }

    @Override
    public void setTransformer(ISequenceCoordinateTransformer transformer)
    {
    }
    
    @Override
    public void addListener(MobyComponentListener listener)
    {
        genericSequencePanel.addListener(listener);
    }

    @Override
    public void removeListener(MobyComponentListener listener)
    {
        genericSequencePanel.removeListener(listener);
    }

    public static interface CommentedNASequenceListener extends GenericSequenceListener {}
}
