// This file is part of PleoCommand: // Interactively control Pleo with psychobiological parameters // // Copyright (C) 2010 Oliver Hoffmann - Hoffmann_Oliver@gmx.de // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Boston, USA. package pleocmd.exc; import pleocmd.pipe.PipePart; /** * This is the central {@link Exception} class for all classes in the * <b>pleocmd.pipe</b> package. * * @author oliver */ public class PipeException extends Exception { private static final long serialVersionUID = -1800715731102540337L; private final Object sender; private final boolean permanent; /** * Constructs a new {@link PipeException}. * * @param sender * the source of the exception or <b>null</b> * @param permanent * if true the sender will be ignored during all further pipe * processing (until {@link pleocmd.pipe.Pipe#close()} has been * called). * @param message * a message associated with this {@link Exception}. If arguments * are available, it will be interpreted as a format String like * in {@link String#format(String, Object...)}. * @param args * arguments for the message */ public PipeException(final Object sender, final boolean permanent, final String message, final Object... args) { super(args.length == 0 ? message : String.format(message, args)); this.sender = sender; this.permanent = permanent; } /** * Constructs a new {@link PipeException}. * * @param sender * the source of the exception or <b>null</b> * @param permanent * if true the sender will be ignored during all further pipe * processing (until {@link pleocmd.pipe.Pipe#close()} has been * called). * @param cause * another {@link Exception} which caused this one * @param message * a message associated with this {@link Exception}. If arguments * are available, it will be interpreted as a format String like * in {@link String#format(String, Object...)}. * @param args * arguments for the message */ public PipeException(final Object sender, final boolean permanent, final Throwable cause, final String message, final Object... args) { super(args.length == 0 ? message : String.format(message, args), cause); this.sender = sender; this.permanent = permanent; } /** * The source instance which caused this exception or <b>null</b> if the * source was not a subclass of {@link PipePart}. * * @return source or <b>null</b> */ public final Object getSender() { return sender; } /** * @return true if the cause for this {@link Exception} has a permanent * reason. The sender then will never be called again during pipe * processing (until {@link pleocmd.pipe.Pipe#close()} has been * called). */ public final boolean isPermanent() { return permanent; } }