/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal; import java.util.Date; /** * Base portal exception class. Information contained in this class allows ErrorChannel to handle * errors gracefully. This class also reports itself to the ProblemsTable whenever it is * instantiated. The Problems servlet displays recently reported PortalExceptions. * */ public class PortalException extends RuntimeException { private static final long serialVersionUID = 1L; /** should the user be given an option to reinstantiate the channel in a given session */ boolean reinstantiable = true; /** should the user be given an option to retry rendering that same channel instance */ boolean refreshable = true; /** * True if logging is pending on this exception instance (has not yet been logged but * potentially will be). True if all the logging that ought to happen has happened. */ boolean logPending = true; /** Parameter to the ErrorID's template message. */ String parameter = null; /** The time at which this PortalException instance was instantiated. */ Date timestamp = new Date(); /** * Instantiate a generic PortalException. Instantiating a bare, no-message, no ErrorID, no * frills PortalException is pretty anti-social. Wouldn't you rather use a constructor that * provides more information? */ public PortalException() {} /** * Construct a new portal exception, recording an underlying cause. * * @param cause a <code>Throwable</code> causing this exception */ public PortalException(Throwable cause) { super(cause); } /** * Creates a new <code>PortalException</code> instance, with a contained text message. * * @param msg describes exceptional condition */ public PortalException(String msg) { super(msg); } /** * Instantiate a PortalException with the given message and underlying cause. * * @param msg - message describing the error * @param cause - underlying cause of the error */ public PortalException(String msg, Throwable cause) { super(msg, cause); } /** * Check if user-mediated referesh is allowed. * * @return true if refresh allowed, false otherwise. */ public boolean isRefreshable() { return this.refreshable; } /** * Check if user-mediated reinstantiation is allowed. * * @return true if reinstantiation allowed, false otherwise */ public boolean isReinstantiable() { return this.reinstantiable; } /** * Set if the user should be presented with an option to retry the same operation on the * component that has generated the error. * * @param refresh a <code>boolean</code> value */ public void setRefreshable(boolean refresh) { this.refreshable = refresh; } /** * Set if the user should be presented with an option to reinstantiate the component (channel) * that generated the error. * * @param reinstantiate a <code>boolean</code> value */ public void setReinstantiable(boolean reinstantiate) { this.reinstantiable = reinstantiate; } /** * Determine whether logging is pending on this PortalException. * * @return <code>true</code> if the log is pending, otherwise <code>false</code> */ public boolean isLogPending() { return this.logPending; } /** * Set whether logging is pending on this PortalException. * * @param b true if logging is pending */ public void setLogPending(boolean b) { this.logPending = b; } /** * Get the parameter to the ErrorID template message. * * @return the parameter */ public String getParameter() { return this.parameter; } /** * Set the parameter to the ErrorID template message. * * @param string - parameter to ErrorID template message. */ public void setParameter(String string) { this.parameter = string; } /** * Instantiate a PortalException with the given message and refresh, reinstantiate state. * * @param msg - message describing the problem * @param refresh - whether refresh is appropriate response * @param reinstantiate - whether reinstantiate is appropriate response */ public PortalException(String msg, boolean refresh, boolean reinstantiate) { super(msg); this.setReinstantiable(reinstantiate); this.setRefreshable(refresh); } /** * Instantiate a PortalException with the given message, underlying cause, refresh, and * reinstantiate state. * * @param msg - message describing the problem * @param cause - underlying cause of problem * @param refresh - true if refresh is an appropriate response * @param reinstantiate - true if reinstantiate is an appropriate response */ public PortalException(String msg, Throwable cause, boolean refresh, boolean reinstantiate) { super(msg, cause); this.setReinstantiable(reinstantiate); this.setRefreshable(refresh); } /** * Get the Date at which this PortalException instance was instantiated. * * @return Returns the timestamp. */ public Date getTimestamp() { return this.timestamp; } }