/*********************************************************************
 *
 *      Copyright (C) 2002 Andrew Khan
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 ***************************************************************************/

package org.xbib.datastructures.xslx.jxl.write.biff;

import org.xbib.datastructures.xslx.jxl.biff.FontRecord;
import org.xbib.datastructures.xslx.jxl.format.Font;
import org.xbib.datastructures.xslx.jxl.write.WriteException;

/**
 * A writable Font record.  This class intercepts any set accessor calls
 * and throws and exception if the Font is already initialized
 */
public class WritableFontRecord extends FontRecord {
    /**
     * Constructor, used when creating a new font for writing out.
     *
     * @param bold the bold indicator
     * @param ps   the point size
     * @param us   the underline style
     * @param fn   the name
     * @param it   italicised indicator
     * @param ci    the colour
     * @param ss   the script style
     */
    protected WritableFontRecord(String fn, int ps, int bold, boolean it,
                                 int us, int ci, int ss) {
        super(fn, ps, bold, it, us, ci, ss);
    }

    /**
     * Publicly available copy constructor
     *
     * @param f the font to copy
     */
    protected WritableFontRecord(Font f) {
        super(f);
    }


    /**
     * Sets the point size for this font, if the font hasn't been initialized
     *
     * @param pointSize the point size
     * @throws WriteException, if this font is already in use elsewhere
     */
    protected void setPointSize(int pointSize) throws WriteException {
        if (isInitialized()) {
            throw new JxlWriteException(JxlWriteException.formatInitialized);
        }

        super.setFontPointSize(pointSize);
    }

    /**
     * Sets the bold style for this font, if the font hasn't been initialized
     *
     * @param boldStyle the bold style
     * @throws WriteException, if this font is already in use elsewhere
     */
    protected void setBoldStyle(int boldStyle) throws WriteException {
        if (isInitialized()) {
            throw new JxlWriteException(JxlWriteException.formatInitialized);
        }

        super.setFontBoldStyle(boldStyle);
    }

    /**
     * Sets the italic indicator for this font, if the font hasn't been
     * initialized
     *
     * @param italic the italic flag
     * @throws WriteException, if this font is already in use elsewhere
     */
    protected void setItalic(boolean italic) throws WriteException {
        if (isInitialized()) {
            throw new JxlWriteException(JxlWriteException.formatInitialized);
        }

        super.setFontItalic(italic);
    }

    /**
     * Sets the underline style for this font, if the font hasn't been
     * initialized
     *
     * @param us the underline style
     * @throws WriteException, if this font is already in use elsewhere
     */
    protected void setUnderlineStyle(int us) throws WriteException {
        if (isInitialized()) {
            throw new JxlWriteException(JxlWriteException.formatInitialized);
        }

        super.setFontUnderlineStyle(us);
    }

    /**
     * Sets the colour for this font, if the font hasn't been
     * initialized
     *
     * @param colour the colour
     * @throws WriteException, if this font is already in use elsewhere
     */
    protected void setColour(int colour) throws WriteException {
        if (isInitialized()) {
            throw new JxlWriteException(JxlWriteException.formatInitialized);
        }

        super.setFontColour(colour);
    }

    /**
     * Sets the script style (eg. superscript, subscript) for this font,
     * if the font hasn't been initialized
     *
     * @param scriptStyle the colour
     * @throws WriteException, if this font is already in use elsewhere
     */
    protected void setScriptStyle(int scriptStyle) throws WriteException {
        if (isInitialized()) {
            throw new JxlWriteException(JxlWriteException.formatInitialized);
        }

        super.setFontScriptStyle(scriptStyle);
    }

    /**
     * Sets the struck out flag
     *
     * @param os TRUE if the font is struck out, false otherwise
     * @throws WriteException, if this font is already in use elsewhere
     */
    protected void setStruckout(boolean os) throws WriteException {
        if (isInitialized()) {
            throw new JxlWriteException(JxlWriteException.formatInitialized);
        }
        super.setFontStruckout(os);
    }
}
