/**
 * 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;

public abstract class Subsequence implements CharSequence
{
        @Override
        public char charAt(int index)
        {
            String substring = getCharSequence();
            
            if (substring != null)
            {
                final int start = getStart() - 1;
                final int end = getEnd() - 1;

                if (index >= start && index <= end)
                {
                    index -= start;

                    if (index < substring.length())
                    {
                        return substring.charAt(index);
                    }
                }
            }
            
            return ' ';
            
        }

        @Override
        public CharSequence subSequence(int start, int end)
        {
            String substring = getCharSequence();
            
            if (substring == null)
            {
                return "";
            }
            
            StringBuilder sb = new StringBuilder(end - start);
            
            for (int i = start; i < end; i++)
            {
                sb.append(charAt(i));
            }

            return sb;
        }

    public abstract int getStart();
    public abstract int getEnd();

    public abstract String getCharSequence();
}
