001/*
002 * Copyright (c) 2005 Einar Pehrson <einar@pehrson.nu>.
003 *
004 * This file is part of
005 * CleanSheets - a spreadsheet application for the Java platform.
006 *
007 * CleanSheets is free software; you can redistribute it and/or modify
008 * it under the terms of the GNU General Public License as published by
009 * the Free Software Foundation; either version 2 of the License, or
010 * (at your option) any later version.
011 *
012 * CleanSheets is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
015 * GNU General Public License for more details.
016 *
017 * You should have received a copy of the GNU General Public License
018 * along with CleanSheets; if not, write to the Free Software
019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
020 */
021package csheets.core.formula.util;
022
023import csheets.core.formula.Formula;
024
025/**
026 * An exception that is thrown if a formula contains a reference (directly or
027 * indirectly) to the cell in which it is contained.
028 * @author Einar Pehrson
029 */
030public class CircularReferenceException extends ExpressionVisitorException {
031
032        /** The serialVersionUID of the CircularReferenceException.java */
033        private static final long serialVersionUID = 4204972508404909370L;
034
035        /** The formula in which the circularity exists */
036        private Formula formula;
037
038        /**
039         * Creates a new circular reference exception.
040         * @param formula the formula that caused the exception
041         */
042        public CircularReferenceException(Formula formula) {
043                super("A circular reference was encountered in the formula " + formula + ".");
044                this.formula = formula;
045        }
046
047        /**
048         * Returns the formula in which the circularity exists.
049         * @return the formula in which the circularity exists
050         */
051        public Formula getFormula() {
052                return formula;
053        }
054
055        /**
056         * Returns a string representation of the exception.
057         * @return a string representation of the exception
058         */
059        public String toString() {
060                return "#CIRCLE!";
061        }
062
063        /**
064         * Returns whether the other object is an identical value .
065         * @param other the object to check for equality
066         * @return true if the objects are equal
067         */
068        public boolean equals(Object other) {
069                if (!(other instanceof CircularReferenceException) || other == null)
070                        return false;
071                CircularReferenceException e = (CircularReferenceException)other;
072                return formula.getCell().equals(e.formula.getCell());
073        }
074}