001: /**
002: * Copyright 2003 IBM Corporation and Sun Microsystems, Inc.
003: * All rights reserved.
004: * Use is subject to license terms.
005: */package javax.portlet;
006:
007: /**
008: * The portlet should throw the <CODE>UnavailableException</CODE> when
009: * the portlet is either temporarily or permanently unavailable to handle requests.
010: */
011:
012: public class UnavailableException extends PortletException {
013:
014: private boolean permanent; // needs admin action?
015: private int seconds; // unavailability estimate
016:
017: /**
018: * Constructs a new exception with a descriptive
019: * message indicating that the portlet is permanently
020: * unavailable.
021: *
022: * @param text a <code>String</code> specifying the
023: * descriptive message
024: */
025:
026: public UnavailableException(String text) {
027: super (text);
028:
029: permanent = true;
030: }
031:
032: /**
033: * Constructs a new exception with a descriptive message
034: * indicating that the portlet is temporarily unavailable
035: * and giving an estimate of how long it will be unavailable.
036: * <p/>
037: * <p>In some cases, the portlet cannot make an estimate. For
038: * example, the portlet might know that a server it needs is
039: * not running, but it might not be able to report how long it will take
040: * to be restored to functionality. This can be indicated with
041: * a negative or zero value for the <code>seconds</code> argument.
042: *
043: * @param text a <code>String</code> specifying the
044: * descriptive message. This message can be written
045: * to a log file or displayed for the user.
046: * @param seconds an integer specifying the number of seconds
047: * for which the portlet expects to be unavailable; if
048: * this is zero or negative, it indicates that the portlet
049: * cannot make an estimate.
050: */
051:
052: public UnavailableException(String text, int seconds) {
053: super (text);
054:
055: if (seconds <= 0)
056: this .seconds = -1;
057: else
058: this .seconds = seconds;
059:
060: permanent = false;
061: }
062:
063: /**
064: * Returns a <code>boolean</code> indicating
065: * whether the portlet is permanently unavailable.
066: * If so, something is wrong with the portlet, and the
067: * system administrator must take some corrective action.
068: *
069: * @return <code>true</code> if the portlet is
070: * permanently unavailable; <code>false</code>
071: * if the portlet is temporarily
072: * unavailable.
073: */
074:
075: public boolean isPermanent() {
076: return permanent;
077: }
078:
079: /**
080: * Returns the time in seconds for which the portlet can be expected to
081: * be unavailable.
082: * <p/>
083: * If the portlet is called again while it is still unavailable, it
084: * indicates the same time estimate. No effort is
085: * made to correct for the time elapsed since the exception was
086: * first reported.
087: * <p/>
088: * If this method returns zero or a negative number, the portlet
089: * is permanently unavailable or cannot provide an estimate of
090: * how long it will be unavailable.
091: *
092: * @return an integer specifying the number of seconds
093: * the portlet will be temporarily unavailable,
094: * or zero or a negative number if the portlet is permanently
095: * unavailable or cannot make an estimate.
096: */
097:
098: public int getUnavailableSeconds() {
099: return permanent ? -1 : seconds;
100: }
101:
102: }
|