@Override
  public Object isMine(FeatureType wantFeatureType, NetcdfDataset ds, Formatter errlog) throws IOException {
    if (wantFeatureType == null) wantFeatureType = FeatureType.ANY_POINT;
    if (wantFeatureType != FeatureType.ANY_POINT) {
      if (!wantFeatureType.isPointFeatureType())
        return null;
    }

    TableConfigurer tc = TableAnalyzer.getTableConfigurer(wantFeatureType, ds);

    // if no explicit tc, then check whatever we can before expensive analysis)
    if (tc == null) {
      boolean hasTime = false;
      boolean hasLat = false;
      boolean hasLon = false;
      for (CoordinateAxis axis : ds.getCoordinateAxes()) {
        if (axis.getAxisType() == AxisType.Time) //&& (axis.getRank() == 1))
          hasTime = true;
        if (axis.getAxisType() == AxisType.Lat) //&& (axis.getRank() == 1))
          hasLat = true;
        if (axis.getAxisType() == AxisType.Lon) //&& (axis.getRank() == 1))
          hasLon = true;
      }

      // minimum we need
      if (!(hasTime && hasLon && hasLat)) {
        errlog.format("PointDataset must have lat,lon,time");
        return null;
      }
    } else if (showTables) {
      System.out.printf("TableConfigurer = %s%n", tc.getClass().getName());
    }

    try {
      // gotta do some work
      TableAnalyzer analyser = TableAnalyzer.factory(tc, wantFeatureType, ds);
      if (analyser == null)
        return null;

      if (!analyser.featureTypeOk(wantFeatureType, errlog)) {
        return null;
      }
      return analyser;

    } catch (Throwable t) {
      return null;
    }
  }
@Override
  public Object isMine(FeatureType wantFeatureType, NetcdfDataset ds, Formatter errlog) throws IOException {
    if (wantFeatureType == null) wantFeatureType = FeatureType.ANY_POINT;
    if (wantFeatureType != FeatureType.ANY_POINT) {
      if (!wantFeatureType.isPointFeatureType())
        return null;
    }

    TableConfigurer tc = TableAnalyzer.getTableConfigurer(wantFeatureType, ds);

    
    if (tc == null) {
      boolean hasTime = false;
      boolean hasLat = false;
      boolean hasLon = false;
      for (CoordinateAxis axis : ds.getCoordinateAxes()) {
        if (axis.getAxisType() == AxisType.Time) 
          hasTime = true;
        if (axis.getAxisType() == AxisType.Lat) 
          hasLat = true;
        if (axis.getAxisType() == AxisType.Lon) 
          hasLon = true;
      }

      
      if (!(hasTime && hasLon && hasLat)) {
        errlog.format("PointDataset must have lat,lon,time");
        return null;
      }
    } else if (showTables) {
      System.out.printf("TableConfigurer = %s%n", tc.getClass().getName());
    }

    try {
      
      TableAnalyzer analyser = TableAnalyzer.factory(tc, wantFeatureType, ds);
      if (analyser == null)
        return null;

      if (!analyser.featureTypeOk(wantFeatureType, errlog)) {
        return null;
      }
      return analyser;

    } catch (Throwable t) {
      return null;
    }
  }
@ Override public Object isMine ( FeatureType wantFeatureType , NetcdfDataset ds , Formatter errlog ) throws IOException { if ( wantFeatureType == null ) wantFeatureType = FeatureType . ANY_POINT ; if ( wantFeatureType != FeatureType . ANY_POINT ) { if ( ! wantFeatureType . isPointFeatureType ( ) ) return null ; } TableConfigurer tc = TableAnalyzer . getTableConfigurer ( wantFeatureType , ds ) ; // if no explicit tc, then check whatever we can before expensive analysis) if ( tc == null ) { boolean hasTime = false ; boolean hasLat = false ; boolean hasLon = false ; for ( CoordinateAxis axis : ds . getCoordinateAxes ( ) ) { if ( axis . getAxisType ( ) == AxisType . Time ) //&& (axis.getRank() == 1)) hasTime = true ; if ( axis . getAxisType ( ) == AxisType . Lat ) //&& (axis.getRank() == 1)) hasLat = true ; if ( axis . getAxisType ( ) == AxisType . Lon ) //&& (axis.getRank() == 1)) hasLon = true ; } // minimum we need if ( ! ( hasTime && hasLon && hasLat ) ) { errlog . format ( "PointDataset must have lat,lon,time" ) ; return null ; } } else if ( showTables ) { System . out . printf ( "TableConfigurer = %s%n" , tc . getClass ( ) . getName ( ) ) ; } try { // gotta do some work TableAnalyzer analyser = TableAnalyzer . factory ( tc , wantFeatureType , ds ) ; if ( analyser == null ) return null ; if ( ! analyser . featureTypeOk ( wantFeatureType , errlog ) ) { return null ; } return analyser ; } catch ( Throwable t ) { return null ; } }
Check if this is a POINT datatype. If so, a TableAnalyser is used to analyze its structure.
The TableAnalyser is reused when the dataset is opened.
<ol>
<li> Can handle ANY_POINT FeatureType.
<li> Must have time, lat, lon axis (from CoordSysBuilder)
<li> Call TableAnalyzer.factory() to create a TableAnalyzer
<li> TableAnalyzer must agree it can handle the requested FeatureType
</ol>

@param wantFeatureType desired feature type, null means FeatureType.ANY_POINT
@param ds              analyse this dataset
@param errlog          log error messages here (may not be null)
@return if successful, return non-null. This object is then passed back into open(), so analysis can be reused.
@throws IOException
Check if this is a POINT datatype . If so a TableAnalyser is used to analyze its structure . The TableAnalyser is reused when the dataset is opened . <ol > <li > Can handle ANY_POINT FeatureType . <li > Must have time lat lon axis ( from CoordSysBuilder ) <li > Call TableAnalyzer . factory () to create a TableAnalyzer <li > TableAnalyzer must agree it can handle the requested FeatureType < / ol >