1 /*
   2  * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javax.sql.rowset;
  27 
  28 import java.sql.SQLException;
  29 
  30 /**
  31  * An extension of <code>SQLException</code> that provides information
  32  * about database warnings set on <code>RowSet</code> objects.
  33  * Warnings are silently chained to the object whose method call
  34  * caused it to be reported.
  35  * This class complements the <code>SQLWarning</code> class.
  36  * <P>
  37  * Rowset warnings may be retrieved from <code>JdbcRowSet</code>,
  38  * <code>CachedRowSet</code>,
  39  * <code>WebRowSet</code>, <code>FilteredRowSet</code>, or <code>JoinRowSet</code>
  40  * implementations. To retrieve the first warning reported on any
  41  * <code>RowSet</code>
  42  * implementation,  use the method <code>getRowSetWarnings</code> defined
  43  * in the <code>JdbcRowSet</code> interface or the <code>CachedRowSet</code>
  44  * interface. To retrieve a warning chained to the first warning, use the
  45  * <code>RowSetWarning</code> method
  46  * <code>getNextWarning</code>. To retrieve subsequent warnings, call
  47  * <code>getNextWarning</code> on each <code>RowSetWarning</code> object that is
  48  * returned.
  49  * <P>
  50  * The inherited methods <code>getMessage</code>, <code>getSQLState</code>,
  51  * and <code>getErrorCode</code> retrieve information contained in a
  52  * <code>RowSetWarning</code> object.
  53  *
  54  * @since 1.5
  55  */
  56 public class RowSetWarning extends SQLException {
  57 
  58     /**
  59      * Constructs a <code>RowSetWarning</code> object
  60      * with the given value for the reason; SQLState defaults to null,
  61      * and vendorCode defaults to 0.
  62      *
  63      * @param reason a <code>String</code> object giving a description
  64      *        of the warning; if the <code>String</code> is <code>null</code>,
  65      *        this constructor behaves like the default (zero parameter)
  66      *        <code>RowSetWarning</code> constructor
  67      */
  68     public RowSetWarning(String reason) {
  69         super(reason);
  70     }
  71 
  72     /**
  73      * Constructs a default <code>RowSetWarning</code> object. The reason
  74      * defaults to <code>null</code>, SQLState defaults to null and vendorCode
  75      * defaults to 0.
  76      */
  77     public RowSetWarning() {
  78         super();
  79     }
  80 
  81     /**
  82      * Constructs a <code>RowSetWarning</code> object initialized with the
  83      * given values for the reason and SQLState. The vendor code defaults to 0.
  84      *
  85      * If the <code>reason</code> or <code>SQLState</code> parameters are <code>null</code>,
  86      * this constructor behaves like the default (zero parameter)
  87      * <code>RowSetWarning</code> constructor.
  88      *
  89      * @param reason a <code>String</code> giving a description of the
  90      *        warning;
  91      * @param SQLState an XOPEN code identifying the warning; if a non standard
  92      *        XOPEN <i>SQLState</i> is supplied, no exception is thrown.
  93      */
  94     public RowSetWarning(java.lang.String reason, java.lang.String SQLState) {
  95         super(reason, SQLState);
  96     }
  97 
  98     /**
  99      * Constructs a fully specified <code>RowSetWarning</code> object initialized
 100      * with the given values for the reason, SQLState and vendorCode.
 101      *
 102      * If the <code>reason</code>, or the  <code>SQLState</code>
 103      * parameters are <code>null</code>, this constructor behaves like the default
 104      * (zero parameter) <code>RowSetWarning</code> constructor.
 105      *
 106      * @param reason a <code>String</code> giving a description of the
 107      *        warning;
 108      * @param SQLState an XOPEN code identifying the warning; if a non standard
 109      *        XOPEN <i>SQLState</i> is supplied, no exception is thrown.
 110      * @param vendorCode a database vendor-specific warning code
 111      */
 112     public RowSetWarning(java.lang.String reason, java.lang.String SQLState, int vendorCode) {
 113         super(reason, SQLState, vendorCode);
 114     }
 115 
 116     /**
 117      * Retrieves the warning chained to this <code>RowSetWarning</code>
 118      * object.
 119      *
 120      * @return the <code>RowSetWarning</code> object chained to this one; if no
 121      *         <code>RowSetWarning</code> object is chained to this one,
 122      *         <code>null</code> is returned (default value)
 123      * @see #setNextWarning
 124      */
 125     public RowSetWarning getNextWarning() {
 126         SQLException warning = getNextException();
 127         if (  warning == null || warning instanceof RowSetWarning) {
 128             return (RowSetWarning)warning;
 129         } else {
 130             // The chained value isn't a RowSetWarning.
 131             // This is a programming error by whoever added it to
 132             // the RowSetWarning chain.  We throw a Java "Error".
 133             throw new Error("RowSetWarning chain holds value that is not a RowSetWarning: ");
 134         }
 135     }
 136 
 137     /**
 138      * Sets <i>warning</i> as the next warning, that is, the warning chained
 139      * to this <code>RowSetWarning</code> object.
 140      *
 141      * @param warning the <code>RowSetWarning</code> object to be set as the
 142      *     next warning; if the <code>RowSetWarning</code> is null, this
 143      *     represents the finish point in the warning chain
 144      * @see #getNextWarning
 145      */
 146     public void setNextWarning(RowSetWarning warning) {
 147         setNextException(warning);
 148     }
 149 
 150     static final long serialVersionUID = 6678332766434564774L;
 151 }