All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.commons.beanutils.ResultSetIterator Maven / Gradle / Ivy

Go to download

This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up with different versions on classes on the class path).

There is a newer version: 32.0.0.Final
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF 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
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.apache.commons.beanutils;


import java.sql.SQLException;
import java.util.Iterator;
import java.util.NoSuchElementException;


/**
 * 

Implementation of java.util.Iterator returned by the * iterator() method of {@link ResultSetDynaClass}. Each * object returned by this iterator will be a {@link DynaBean} that * represents a single row from the result set being wrapped.

* * @version $Id: ResultSetIterator.java 1540186 2013-11-08 21:08:30Z oheger $ */ public class ResultSetIterator implements DynaBean, Iterator { // ------------------------------------------------------------ Constructor /** *

Construct an Iterator for the result set being wrapped * by the specified {@link ResultSetDynaClass}.

* * @param dynaClass The {@link ResultSetDynaClass} wrapping the * result set we will iterate over */ ResultSetIterator(ResultSetDynaClass dynaClass) { this.dynaClass = dynaClass; } // ----------------------------------------------------- Instance Variables /** *

Flag indicating whether the result set is currently positioned at a * row for which we have not yet returned an element in the iteration.

*/ protected boolean current = false; /** *

The {@link ResultSetDynaClass} we are associated with.

*/ protected ResultSetDynaClass dynaClass = null; /** *

Flag indicating whether the result set has indicated that there are * no further rows.

*/ protected boolean eof = false; // ------------------------------------------------------- DynaBean Methods /** * Does the specified mapped property contain a value for the specified * key value? * * @param name Name of the property to check * @param key Name of the key to check * @return true if the mapped property contains a value for * the specified key, otherwise false * * @exception IllegalArgumentException if there is no property * of the specified name */ public boolean contains(String name, String key) { throw new UnsupportedOperationException ("FIXME - mapped properties not currently supported"); } /** * Return the value of a simple property with the specified name. * * @param name Name of the property whose value is to be retrieved * @return The property's value * * @exception IllegalArgumentException if there is no property * of the specified name */ public Object get(String name) { if (dynaClass.getDynaProperty(name) == null) { throw new IllegalArgumentException(name); } try { return dynaClass.getObjectFromResultSet(name); } catch (SQLException e) { throw new RuntimeException ("get(" + name + "): SQLException: " + e); } } /** * Return the value of an indexed property with the specified name. * * @param name Name of the property whose value is to be retrieved * @param index Index of the value to be retrieved * @return The indexed property's value * * @exception IllegalArgumentException if there is no property * of the specified name * @exception IllegalArgumentException if the specified property * exists, but is not indexed * @exception IndexOutOfBoundsException if the specified index * is outside the range of the underlying property * @exception NullPointerException if no array or List has been * initialized for this property */ public Object get(String name, int index) { throw new UnsupportedOperationException ("FIXME - indexed properties not currently supported"); } /** * Return the value of a mapped property with the specified name, * or null if there is no value for the specified key. * * @param name Name of the property whose value is to be retrieved * @param key Key of the value to be retrieved * @return The mapped property's value * * @exception IllegalArgumentException if there is no property * of the specified name * @exception IllegalArgumentException if the specified property * exists, but is not mapped */ public Object get(String name, String key) { throw new UnsupportedOperationException ("FIXME - mapped properties not currently supported"); } /** * Return the DynaClass instance that describes the set of * properties available for this DynaBean. * * @return The associated DynaClass */ public DynaClass getDynaClass() { return (this.dynaClass); } /** * Remove any existing value for the specified key on the * specified mapped property. * * @param name Name of the property for which a value is to * be removed * @param key Key of the value to be removed * * @exception IllegalArgumentException if there is no property * of the specified name */ public void remove(String name, String key) { throw new UnsupportedOperationException ("FIXME - mapped operations not currently supported"); } /** * Set the value of a simple property with the specified name. * * @param name Name of the property whose value is to be set * @param value Value to which this property is to be set * * @exception ConversionException if the specified value cannot be * converted to the type required for this property * @exception IllegalArgumentException if there is no property * of the specified name * @exception NullPointerException if an attempt is made to set a * primitive property to null */ public void set(String name, Object value) { if (dynaClass.getDynaProperty(name) == null) { throw new IllegalArgumentException(name); } try { dynaClass.getResultSet().updateObject(name, value); } catch (SQLException e) { throw new RuntimeException ("set(" + name + "): SQLException: " + e); } } /** * Set the value of an indexed property with the specified name. * * @param name Name of the property whose value is to be set * @param index Index of the property to be set * @param value Value to which this property is to be set * * @exception ConversionException if the specified value cannot be * converted to the type required for this property * @exception IllegalArgumentException if there is no property * of the specified name * @exception IllegalArgumentException if the specified property * exists, but is not indexed * @exception IndexOutOfBoundsException if the specified index * is outside the range of the underlying property */ public void set(String name, int index, Object value) { throw new UnsupportedOperationException ("FIXME - indexed properties not currently supported"); } /** * Set the value of a mapped property with the specified name. * * @param name Name of the property whose value is to be set * @param key Key of the property to be set * @param value Value to which this property is to be set * * @exception ConversionException if the specified value cannot be * converted to the type required for this property * @exception IllegalArgumentException if there is no property * of the specified name * @exception IllegalArgumentException if the specified property * exists, but is not mapped */ public void set(String name, String key, Object value) { throw new UnsupportedOperationException ("FIXME - mapped properties not currently supported"); } // ------------------------------------------------------- Iterator Methods /** *

Return true if the iteration has more elements.

* * @return true if the result set has another * row, otherwise false */ public boolean hasNext() { try { advance(); return (!eof); } catch (SQLException e) { throw new RuntimeException("hasNext(): SQLException: " + e); } } /** *

Return the next element in the iteration.

* * @return advance to the new row and return this */ public DynaBean next() { try { advance(); if (eof) { throw new NoSuchElementException(); } current = false; return (this); } catch (SQLException e) { throw new RuntimeException("next(): SQLException: " + e); } } /** *

Remove the current element from the iteration. This method is * not supported.

*/ public void remove() { throw new UnsupportedOperationException("remove()"); } // ------------------------------------------------------ Protected Methods /** *

Advance the result set to the next row, if there is not a current * row (and if we are not already at eof).

* * @exception SQLException if the result set throws an exception */ protected void advance() throws SQLException { if (!current && !eof) { if (dynaClass.getResultSet().next()) { current = true; eof = false; } else { current = false; eof = true; } } } }