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

package visad.data.netcdf;

import java.io.IOException;
import visad.data.BadFormException;
import visad.data.Form;
import visad.data.FormFileInformer;
import visad.DataImpl;
import visad.VisADException;


/**
 * The NetCDF class provides an abstract class for the family of netCDF
 * data forms for files in a local directory.
 */
public abstract class
NetCDF
    extends	Form
    implements	FormFileInformer
{
    private final static String		SUFFIX = "nc";
    private final static String		PERIOD_SUFFIX = "." + SUFFIX;

    /**
     * Construct a netCDF data form.
     *
     * @param name	The name for the family of netCDF data forms.
     */
    public
    NetCDF(String name)
    {
	super(name);
    }


    /**
     * Open an existing file.
     *
     * @param path			The pathname of the file.
     * @exception BadFormException	netCDF couldn't handle VisAD object.
     * @exception VisADException	Couldn't create necessary VisAD object.
     * @exception IOException		I/O error.
     */
    public abstract DataImpl
    open(String path)
	throws BadFormException, IOException, VisADException;

/*
 * FormFileInformer method implementations:
 */

    /**
     * Indicates if a dataset specification is consistent with a netCDF dataset
     * specification.
     *
     * @param spec		A dataset specification.  NB: Not a URL.
     * @return			true if and only if the dataset
     *				specification is consistent with a netCDF
     *				dataset specification.
     */
    public boolean isThisType(String spec)
    {
	return spec.toLowerCase().endsWith(PERIOD_SUFFIX);
    }

    /**
     * Indicates if a given block of bytes is the start of a netCDF dataset.
     *
     * @param block		A block of data.
     * @return			True if and only if the given block of bytes is
     *				the start of a netCDF dataset.
     */
    public boolean isThisType(byte[] block)
    {
	return block[0] == 'C' && block[1] == 'D' && block[2] == 'F';
    }

    /**
     * Returns the path-component suffixes that identifies a dataset
     * specification as being a netCDF dataset specification.  The suffixes
     * don't have a leading period.  The returned array can be safely modified.
     *
     * @return			A freshly-allocated array with the relevant 
     *				suffixes.
     */
    public String[] getDefaultSuffixes()
    {
	return new String[] {SUFFIX};
    }
}

 

Ads help maintain this website.