/*
 * Copyright 1998, University Corporation for Atmospheric Research
 * All Rights Reserved.
 * See file LICENSE for copying and redistribution conditions.
 *
 * $Id: VirtualDataIterator.java,v 1.4 2001-11-27 22:29:36 dglo Exp $
 */

package visad.data.netcdf.in;

import java.io.IOException;
import java.util.NoSuchElementException;
import visad.VisADException;
import visad.data.BadFormException;


/**
 * Supports iteration over the virtual VisAD data objects in a
 * netCDF dataset.
 */
public abstract class
VirtualDataIterator
{
    /**
     * The next virtal data object.
     */
    private VirtualData		data;

    /**
     * The view of the netCDF dataset that's being iterated over.
     */
    protected final View	view;


    /**
     * Constructs from a view of a netCDF dataset.
     *
     * @param view		A view of a netCDF dataset.
     */
    public
    VirtualDataIterator(View view)
    {
	this.view = view;
    }


    /**
     * Indicates if there's another virtual VisAD data object.
     *
     * @return			true <=> hasNext()
     *				 will return the next virtual
     *				VisAD data object.
     * @throws VisADException	Couldn't create necessary VisAD object.
     * @throws IOException	I/O failure.
     */
    public boolean
    hasNext()
	throws VisADException, IOException
    {
	if (data == null)
	    data = getData();

	return data != null;
    }


    /**
     * Gets the next virtual VisAD data object.  The next object will be either
     * a VirtualScalar, a VirtualField, or a VirtualFlatField.
     *
     * @return			The next virtual VisAD data object.
     * @throws BadFormException	Non-conforming netCDF dataset.
     * @throws NoSuchElementException
     *				No more virtual VisAD data objects.
     * @throws IOException	I/O failure.
     */
    public VirtualData
    next()
	throws BadFormException, NoSuchElementException, VisADException,
	    IOException
    {
	VirtualData	next = data == null
				? getData()
				: data;

	data = null;

	return next;
    }


    /**
     * Gets a clone of the next virtual VisAD data object.  This method must be
     * overridden in subclasses.
     *
     * @return			A clone of the next virtual VisAD data object or
     *				null if there is none.
     * @throws VisADException	Couldn't create necessary VisAD object.
     */
    protected abstract VirtualData
    getData()
	throws VisADException, IOException;


    /**
     * Gets the view of the netCDF dataset.
     */
    public View
    getNetcdf()
    {
	return view;
    }
}

 

Ads help maintain this website.