/* =========================================================== * TradeManager : An application to trade strategies for the Java(tm) platform * =========================================================== * * (C) Copyright 2011-2011, by Simon Allen and Contributors. * * Project Info: org.trade * * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Oracle, Inc. * in the United States and other countries.] * * (C) Copyright 2011-2011, by Simon Allen and Contributors. * * Original Author: Simon Allen; * Contributor(s): -; * * Changes * ------- * */ package org.trade.core.exception; import java.util.Enumeration; /** * This class is used internally to help with handling nesting of exceptions and * handling the associated messages. * * @author Simon Allen */ class Enumerator implements Enumeration<Object> { private Enumeration<?> m_mine; private Enumerator m_next = null; private Enumerator() { } /** * Constructor for Enumerator. * * @param enumeration * Enumeration<?> */ Enumerator(Enumeration<?> enumeration) { m_mine = enumeration; } /** * Method appendEnumeration. * * @param enumeration * Enumeration<?> */ void appendEnumeration(Enumeration<?> enumeration) { if (m_next == null) { m_next = new Enumerator(enumeration); } else { m_next.appendEnumeration(enumeration); } } /** * Method prependEnumeration. * * @param enumeration * Enumeration<?> */ void prependEnumeration(Enumeration<?> enumeration) { Enumerator e = new Enumerator(); e.m_mine = m_mine; e.m_next = m_next; m_next = e; m_mine = enumeration; } /** * Method nextElement. * * @return Object * @see java.util.Enumeration#nextElement() */ public Object nextElement() { if (m_mine.hasMoreElements()) { return m_mine.nextElement(); } if (m_next != null) { // Here we eliminate the next in the list m_mine = m_next.m_mine; m_next = m_next.m_next; // Recurse on this method return nextElement(); } return null; } /** * Method hasMoreElements. * * @return boolean * @see java.util.Enumeration#hasMoreElements() */ public boolean hasMoreElements() { if (m_mine.hasMoreElements()) { return true; } if (m_next != null) { return m_next.hasMoreElements(); } return false; } }