legacy/src/main/java/ucar/nc2/dt/TypedDatasetFactory.java
static public TypedDataset open( FeatureType datatype, NetcdfDataset ncd, ucar.nc2.util.CancelTask task, StringBuilder errlog) throws IOException {

    // look for a Factory that claims this dataset
    Class useClass = null;
    for (Factory fac : transformList) {
      if ((datatype != null) && (datatype != fac.datatype)) continue;

      if (fac.instance.isMine(ncd)) {
        useClass = fac.c;
        break;
      }
    }

    // Factory not found
    if (null == useClass) {

      // POINT is also a STATION
      if (datatype == FeatureType.POINT) {
        return open( FeatureType.STATION, ncd, task, errlog);
      }

      // if explicitly requested, give em a GridDataset even if no Grids
      if (datatype == FeatureType.GRID) {
        return null; // new ucar.nc2.dt.grid.GridDataset( ncd);   LOOK have to copy old  GridDataset to archive
      }

      if (null == datatype) {
        // if no datatype was requested, give em a GridDataset only if some Grids are found.
        ucar.nc2.dt.grid.GridDataset gds = new ucar.nc2.dt.grid.GridDataset( ncd);
        if (gds.getGrids().size() > 0)
          return null; // gds;    LOOK have to copy old  GridDataset to archive
      }

      errlog.append("**Failed to find Datatype Factory for= ").append(ncd.getLocation()).append(" datatype= ").append(datatype).append("\n");
      return null;
    }

    // get a new instance of the Factory class, for thread safety
    TypedDatasetFactoryIF builder = null;
    try {
      builder = (TypedDatasetFactoryIF) useClass.newInstance();
    } catch (InstantiationException e) {
      errlog.append(e.getMessage()).append("\n");
    } catch (IllegalAccessException e) {
      errlog.append(e.getMessage()).append("\n");
    }
    if (null == builder) {
      errlog.append("**Error on TypedDatasetFactory object from class= ").append(useClass.getName()).append("\n");
      return null;
    }

    return builder.open( ncd, task, errlog);
  }
static public TypedDataset open( FeatureType datatype, NetcdfDataset ncd, ucar.nc2.util.CancelTask task, StringBuilder errlog) throws IOException {

    // look for a Factory that claims this dataset
    Class useClass = null;
    for (Factory fac : transformList) {
      if ((datatype != null) && (datatype != fac.datatype)) continue;

      if (fac.instance.isMine(ncd)) {
        useClass = fac.c;
        break;
      }
    }

    // Factory not found
    if (null == useClass) {

      // POINT is also a STATION
      if (datatype == FeatureType.POINT) {
        return open( FeatureType.STATION, ncd, task, errlog);
      }

      // if explicitly requested, give em a GridDataset even if no Grids
      if (datatype == FeatureType.GRID) {
        return null; // new ucar.nc2.dt.grid.GridDataset( ncd);   LOOK have to copy old  GridDataset to archive
      }

      if (null == datatype) {
        // if no datatype was requested, give em a GridDataset only if some Grids are found.
        ucar.nc2.dt.grid.GridDataset gds = new ucar.nc2.dt.grid.GridDataset( ncd);
        if (gds.getGrids().size() > 0)
          return null; // gds;    LOOK have to copy old  GridDataset to archive
      }

      errlog.append("**Failed to find Datatype Factory for= ").append(ncd.getLocation()).append(" datatype= ").append(datatype).append("\n");
      return null;
    }

    // get a new instance of the Factory class, for thread safety
    TypedDatasetFactoryIF builder = null;
    try {
      builder = (TypedDatasetFactoryIF) useClass.newInstance();
    } catch (InstantiationException e) {
      errlog.append(e.getMessage()).append("\n");
    } catch (IllegalAccessException e) {
      errlog.append(e.getMessage()).append("\n");
    }
    if (null == builder) {
      errlog.append("**Error on TypedDatasetFactory object from class= ").append(useClass.getName()).append("\n");
      return null;
    }

    return builder.open( ncd, task, errlog);
  }
static public TypedDataset open ( FeatureType datatype , NetcdfDataset ncd , ucar . nc2 . util . CancelTask task , StringBuilder errlog ) throws IOException { // look for a Factory that claims this dataset Class useClass = null ; for ( Factory fac : transformList ) { if ( ( datatype != null ) && ( datatype != fac . datatype ) ) continue ; if ( fac . instance . isMine ( ncd ) ) { useClass = fac . c ; break ; } } // Factory not found if ( null == useClass ) { // POINT is also a STATION if ( datatype == FeatureType . POINT ) { return open ( FeatureType . STATION , ncd , task , errlog ) ; } // if explicitly requested, give em a GridDataset even if no Grids if ( datatype == FeatureType . GRID ) { return null ; // new ucar.nc2.dt.grid.GridDataset( ncd);   LOOK have to copy old  GridDataset to archive } if ( null == datatype ) { // if no datatype was requested, give em a GridDataset only if some Grids are found. ucar . nc2 . dt . grid . GridDataset gds = new ucar . nc2 . dt . grid . GridDataset ( ncd ) ; if ( gds . getGrids ( ) . size ( ) > 0 ) return null ; // gds;    LOOK have to copy old  GridDataset to archive } errlog . append ( "**Failed to find Datatype Factory for= " ) . append ( ncd . getLocation ( ) ) . append ( " datatype= " ) . append ( datatype ) . append ( "\n" ) ; return null ; } // get a new instance of the Factory class, for thread safety TypedDatasetFactoryIF builder = null ; try { builder = ( TypedDatasetFactoryIF ) useClass . newInstance ( ) ; } catch ( InstantiationException e ) { errlog . append ( e . getMessage ( ) ) . append ( "\n" ) ; } catch ( IllegalAccessException e ) { errlog . append ( e . getMessage ( ) ) . append ( "\n" ) ; } if ( null == builder ) { errlog . append ( "**Error on TypedDatasetFactory object from class= " ) . append ( useClass . getName ( ) ) . append ( "\n" ) ; return null ; } return builder . open ( ncd , task , errlog ) ; }
Open a dataset as a TypedDataset.

@param datatype open this kind of Typed Dataset; may be null, which means search all factories.
If datatype is not null, only return correct TypedDataset (eg PointObsDataset for DataType.POINT).
@param ncd  the NetcdfDataset to wrap in a TypedDataset
@param task user may cancel
@param errlog place errors here, may not be null
@return a subclass of TypedDataset, or null if cant find
@throws java.io.IOException on io error
Open a dataset as a TypedDataset .