/*
 * Copyright 1998, University Corporation for Atmospheric Research
 * All Rights Reserved.
 * See file LICENSE for copying and redistribution conditions.
 *
 * $Id: FileStrategy.java,v 1.7 2001-12-19 20:55:11 steve Exp $
 */

package visad.data.netcdf.in;

import java.io.IOException;
import java.rmi.RemoteException;
import ucar.netcdf.NetcdfFile;
import visad.*;
import visad.data.BadFormException;
import visad.data.netcdf.*;

/**
 * 

* Provides support for importing netCDF datasets using the strategy of * employing {@link visad.data.FileFlatField}s wherever possible, but merging * the data so as to keep the number of {@link visad.data.FileFlatField}s to a * minimum. *

* *

* This class may be subclassed in order to use a different data merger tactic * -- one that maximizes the number of {@link visad.data.FileFlatField}s, for * example (see {@link #getMerger()}). *

* *

* Instances are immutable. *

* * @author Steven R. Emmerson */ public class FileStrategy extends Strategy { /** * The singleton instance of this class. */ private static FileStrategy instance; static { instance = new FileStrategy(); } /** * Returns an instance of this class. * * @return An instance of this class. */ public static Strategy instance() { return instance; } /** * Constructs from nothing. Protected to ensure use of * instance() method. * * @see #instance() */ protected FileStrategy() {} /** * Returns a VisAD data object corresponding to the netCDF dataset. This * method uses the Merger returned by getMerger(). * * @param adapter The netCDF-to-VisAD adapter. * @return The top-level, VisAD data object in the * netCDF dataset. * @throws VisADException if a problem occurs in core VisAD -- probably * because a VisAD object couldn't be created. * @throws IOException if a data access I/O failure occurs. * @throws BadFormException if the netCDF dataset doesn't conform to * conventions implicit in constructing * View. * @throws OutOfMemoryError if the netCDF dataset couldn't be imported into * memory. * @throws RemoteException if a Java RMI failure occurs. * @see #getMerger() */ public DataImpl getData(NetcdfAdapter adapter) throws IOException, VisADException, RemoteException, BadFormException, OutOfMemoryError { try { return adapter.importData( adapter.getView(), getMerger(), FileDataFactory.instance()); } catch (OutOfMemoryError e) { throw new OutOfMemoryError( getClass().getName() + ".getData(): " + "Couldn't import netCDF dataset: " + e.getMessage()); } } /** * Returns the Merger for cosolidating virtual data objects together. The * Merger returned by this method is Merger.instance(). This * method may be overridden in subclasses to supply a different merger * strategy (e.g. maximizing the number of FileFlatField-s). * @return The Merger for cosolidating virtual data * objects together. * @see Merger */ protected Merger getMerger() { return Merger.instance(); } /** * Tests this class. * * @param args File pathnames. * @throws Exception Something went wrong. */ public static void main(String[] args) throws Exception { String[] pathnames; if (args.length == 0) pathnames = new String[] {"test.nc"}; else pathnames = args; System.setProperty( NetcdfAdapter.IMPORT_STRATEGY_PROPERTY, FileStrategy.class.getName()); for (int i = 0; i < pathnames.length; ++i) { NetcdfFile file = new NetcdfFile(pathnames[i], /*readonly=*/true); NetcdfAdapter adapter = new NetcdfAdapter(file, QuantityDBManager.instance()); DataImpl data = adapter.getData(); System.out.println("data.getClass().getName() = " + data.getClass().getName()); System.out.println("data.getType().prettyString():\n" + data.getType().prettyString()); } } }

Ads help maintain this website.