    001    /* ===========================================================
    002     * JFreeChart : a free chart library for the Java(tm) platform
    003     * ===========================================================
    004     *
    005     * (C) Copyright 2000-2011, by Object Refinery Limited and Contributors.
    006     *
    007     * Project Info:  http://www.jfree.org/jfreechart/index.html
    008     *
    009     * This library is free software; you can redistribute it and/or modify it
    010     * under the terms of the GNU Lesser General Public License as published by
    011     * the Free Software Foundation; either version 2.1 of the License, or
    012     * (at your option) any later version.
    013     *
    014     * This library is distributed in the hope that it will be useful, but
    015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    017     * License for more details.
    018     *
    019     * You should have received a copy of the GNU Lesser General Public
    020     * License along with this library; if not, write to the Free Software
    021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
    022     * USA.
    023     *
    024     * [Oracle and Java are registered trademarks of Oracle and/or its affiliates.
    025     * Other names may be trademarks of their respective owners.]
    026     *
    027     * --------------------------------
    028     * AbstractPieLabelDistributor.java
    029     * --------------------------------
    030     * (C) Copyright 2007, 2008, by Object Refinery Limited and Contributors.
    031     *
    032     * Original Author:  David Gilbert (for Object Refinery Limited);
    033     * Contributor(s):   -;
    034     *
    035     * Changes
    036     * -------
    037     * 14-Jun-2007 : Version 1 (DG);
    038     *
    039     */
    040
    041    package org.jfree.chart.plot;
    042
    043    import java.io.Serializable;
    044    import java.util.List;
    045
    046    /**
    047     * A base class for handling the distribution of pie section labels.  Create
    048     * your own subclass and set it using the
    049     * {@link PiePlot#setLabelDistributor(AbstractPieLabelDistributor)} method
    050     * if you want to customise the label distribution.
    051     */
    052    public abstract class AbstractPieLabelDistributor implements Serializable {
    053
    054        /** The label records. */
    055        protected List labels;
    056
    057        /**
    058         * Creates a new instance.
    059         */
    060        public AbstractPieLabelDistributor() {
    061            this.labels = new java.util.ArrayList();
    062        }
    063
    064        /**
    065         * Returns a label record from the list.
    066         *
    067         * @param index  the index.
    068         *
    069         * @return The label record.
    070         */
    071        public PieLabelRecord getPieLabelRecord(int index) {
    072            return (PieLabelRecord) this.labels.get(index);
    073        }
    074
    075        /**
    076         * Adds a label record.
    077         *
    078         * @param record  the label record (<code>null</code> not permitted).
    079         */
    080        public void addPieLabelRecord(PieLabelRecord record) {
    081            if (record == null) {
    082                throw new IllegalArgumentException("Null 'record' argument.");
    083            }
    084            this.labels.add(record);
    085        }
    086
    087        /**
    088         * Returns the number of items in the list.
    089         *
    090         * @return The item count.
    091         */
    092        public int getItemCount() {
    093            return this.labels.size();
    094        }
    095
    096        /**
    097         * Clears the list of labels.
    098         */
    099        public void clear() {
    100            this.labels.clear();
    101        }
    102
    103        /**
    104         * Called by the {@link PiePlot} class.  Implementations should distribute
    105         * the labels in this.labels then return.
    106         *
    107         * @param minY  the y-coordinate for the top of the label area.
    108         * @param height  the height of the label area.
    109         */
    110        public abstract void distributeLabels(double minY, double height);
    111
    112    }