/*
* Copyright 2000, University Corporation for Atmospheric Research
* All Rights Reserved.
* See file LICENSE for copying and redistribution conditions.
*
* $Id: FileDataFactory.java,v 1.3 2001-01-08 17:10:31 steve Exp $
*/
package visad.data.netcdf.in;
import java.io.IOException;
import java.rmi.RemoteException;
import visad.*;
import visad.data.*;
/**
* Provides support for creating VisAD Data objects that use a file
* backing-store from VirtualData objects. Currently, the only supported
* in-file VisAD data object is the FileFlatField.
*
* @author Steven R. Emmerson
*/
public class
FileDataFactory
extends DataFactory
{
private static FileDataFactory instance;
private static CacheStrategy cacheStrategy = new CacheStrategy();
static
{
instance = new FileDataFactory();
}
private FileDataFactory()
{}
/**
* Returns an instance of this class.
*
* @return An instance of this class.
*/
public static DataFactory instance()
{
return instance;
}
/**
* Creates a VisAD FlatField object from a netCDF indicial context and a
* VirtualFlatField. The returned FlatField object is, actually, a
* FileFlatField that uses the netCDF dataset as its (read-only)
* backing-store.
*
* @param context The netCDF indicial context.
* @param virtualField The virtual data.
* @return The VisAD FileFlatField corresponding to the
* input.
* @throws VisADException VisAD failure.
* @throws RemoteException Java RMI failure.
*/
public FlatField newData(Context context, VirtualFlatField virtualField)
throws VisADException, RemoteException, IOException
{
return
new FileFlatField(
new netCDFFlatFieldAccessor(context, virtualField),
cacheStrategy);
}
/**
* Provides support for reading a FlatField from a netCDF dataset.
*
* @author Steven R. Emmerson
*/
protected class
netCDFFlatFieldAccessor
extends FileAccessor
{
private Context context;
private VirtualField virtualField;
/**
* Constructs from a netCDF indicial context and a virtual Field.
*
* @param context The netCDF indicial context.
* @param virtualField The virtual Field.
*/
public netCDFFlatFieldAccessor(
Context context, VirtualField virtualField)
{
this.context = (Context)context.clone();
this.virtualField = virtualField;
}
/**
* Returns the associated FlatField.
*
* @return The associated FlatField.
* @throws VisADException VisAD failure.
* @throws RemoteException Java RMI failure.
*/
public FlatField getFlatField()
throws VisADException, RemoteException
{
try
{
return (FlatField)
DataFactory.instance().newData(context, virtualField);
}
catch (RemoteException e)
{
throw e;
}
catch (IOException e)
{
throw new RemoteException(e.getMessage());
}
}
/**
* Returns the VisAD FunctionType of the FlatField.
*
* @return The VisAD FunctionType of the FlatField.
*/
public FunctionType getFunctionType()
{
return virtualField.getFunctionType();
}
/**
* Returns <code>null</code>.
*
* @return <code>null</code>.
*/
public double[][] readFlatField(FlatField template, int[] fileLocation)
{
return null;
}
/**
* Does nothing.
*/
public void writeFile(int[] fileLocation, Data range)
{}
/**
* Does nothing.
*/
public void writeFlatField(
double[][] values, FlatField template, int[] fileLocation)
{}
}
}