//
// HdfeosFile.java
//

/*
VisAD system for interactive analysis and visualization of numerical
data.  Copyright (C) 1996 - 2017 Bill Hibbard, Curtis Rueden, Tom
Rink, Dave Glowacki, Steve Emmerson, Tom Whittaker, Don Murray, and
Tommy Jasmin.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/

package visad.data.hdfeos;

import java.util.*;
import visad.data.hdfeos.hdfeosc.HdfeosLib;

public class HdfeosFile
{
  private String filename;
  private int  file_id;
  private int[] sd_id = new int[1];
  private int  n_structs;

  private Vector Structs;

  static Vector openedFiles = new Vector();          // all opened file objects

  HdfeosFile( String filename )
            throws HdfeosException
  {
    this.filename = filename;

    String[] swath_list = {"empty"};
    int n_swaths = HdfeosLib.SWinqswath( filename, swath_list );
    n_structs = 0;
    Structs = new Vector();

    if ( n_swaths > 0 )
    {
      file_id = HdfeosLib.SWopen( filename, HdfeosLib.DFACC_READ );
      if ( file_id < 0 ) {
        throw new HdfeosException("SWopen:  "+file_id);
      }

      String struct_name = "Swath";
      int[] hdf_id = new int[1];
      byte[] access = new byte[1];

      int stat = HdfeosLib.EHchkfid( file_id, struct_name, hdf_id, sd_id, access);
      if ( stat < 0 )
      {
        throw new HdfeosException("---cannot obtain sdInterfaceId---" );
      }

      StringTokenizer swaths = new StringTokenizer( swath_list[0], ",", false );
      while ( swaths.hasMoreElements() )
      {
        String swath = (String) swaths.nextElement();
        EosSwath obj = new EosSwath( file_id, sd_id[0], swath );
        Structs.addElement( (EosStruct)obj );
        n_structs++;
      }
    }

    String[] grid_list = {"empty"};
    int n_grids = HdfeosLib.GDinqgrid( filename, grid_list );

    if ( n_grids > 0 )
    {
      file_id = HdfeosLib.GDopen( filename, HdfeosLib.DFACC_READ );
      if ( file_id < 0 ) {
        throw new HdfeosException("GDopen: "+file_id);
      }

      StringTokenizer grids = new StringTokenizer( grid_list[0], ",", false );

      while ( grids.hasMoreElements() )
      {
        String grid = (String) grids.nextElement();
        EosGrid g_obj = new EosGrid( file_id, sd_id[0], grid );
        Structs.addElement( (EosStruct)g_obj );
        n_structs++;
      }
    }

    if ( n_structs == 0 ) {
      file_id = HdfeosLib.SWopen( filename, HdfeosLib.DFACC_READ );
      if ( file_id < 0 ) {
        throw new HdfeosException("can't open file: "+filename);
      }
    }
    else {
      openedFiles.addElement( this );
    }
  }

  public int getNumberOfStructs()
  {
    return n_structs;
  }

  public EosStruct getStruct( int ii )
  {
    return (EosStruct) Structs.elementAt(ii);
  }

  public String getFileName()
  {
    return filename;
  }

  public void close()
        throws HdfeosException
  {
    int status = HdfeosLib.EHclose( file_id );
    if ( status < 0 ) {
      throw new HdfeosException("--closing file, "+filename+
                                ", returned status: "+status+" --");
    }
  }

  public static void closeAll()
         throws HdfeosException
  {
    for ( Enumeration e = openedFiles.elements(); e.hasMoreElements(); )
    {
      ((HdfeosFile)e.nextElement()).close();
    }
  }
}

 

Ads help maintain this website.