visad/src/main/java/ucar/nc2/iosp/mcidas/McIDASGridReader.java
protected boolean init(boolean fullCheck) throws IOException {
    if (rf == null) {
      logError("File is null");
      return false;
    }
    gridIndex = new GridIndex(rf.getLocation());

    rf.order(RandomAccessFile.BIG_ENDIAN);
    if (rf.length() < 44) return false;
    int numEntries = Math.abs(readInt(10));
    if (numEntries > 1000000) {
      needToSwap = true;
      numEntries = Math.abs(McIDASUtil.swbyt4(numEntries));
    }
    if (numEntries > MAX_GRIDS) {
      return false;
    }
    //System.out.println("need to Swap = " + needToSwap);
    //System.out.println("number entries="+numEntries);

    // go back to the beginning
    rf.seek(0);
    // read the fileheader
    String label = rf.readString(32);
    // GEMPAK too closely like McIDAS
    if (label.contains("GEMPAK DATA MANAGEMENT FILE")) {
      logError("label indicates this is a GEMPAK grid");
      return false;
    } else { // check that they are all printable ASCII chars
      for (int i = 0; i < label.length(); i++) {
        String s0 = label.substring(i, i + 1);
        if (!(0 <= s0.compareTo(" ") && s0.compareTo("~") <= 0)) {
          logError("bad label, not a McIDAS grid");
          return false;
        }
      }
    }

    //System.out.println("label = " + label);

    // int project = readInt(8);
    //System.out.println("Project = " + project);

    int date = readInt(9);
    // dates are supposed to be yyyddd, but account for ccyyddd up to year 4000
    if ((date < 10000) || (date > 400000)) {
      logError("date wrong, not a McIDAS grid");
      return false;
    }
    //System.out.println("date = " + date);

    if (rf.length() < 4 * (numEntries + 12)) return false;
    int[] entries = new int[numEntries];
    for (int i = 0; i < numEntries; i++) {
      entries[i] = readInt(i + 11);
      // sanity check that this is indeed a McIDAS Grid file
      if (entries[i] < -1) {
        logError("bad grid offset " + i + ": " + entries[i]);
        return false;
      }
    }
    if (!fullCheck) {
      return true;
    }

    // Don't swap:
    rf.order(RandomAccessFile.BIG_ENDIAN);
    for (int i = 0; i < numEntries; i++) {
      if (entries[i] == -1) {
        continue;
      }
      int[] header = new int[64];
      rf.seek(entries[i] * 4);
      rf.readInt(header, 0, 64);
      if (needToSwap) {
        swapGridHeader(header);
      }
      try {

        McIDASGridRecord gr = new McIDASGridRecord(entries[i],
                header);
        //if (gr.getGridDefRecordId().equals("CONF X:93 Y:65")) {
        //if (gr.getGridDefRecordId().equals("CONF X:54 Y:47")) {
        // figure out how to handle Mercator projections
        // if ( !(gr.getGridDefRecordId().startsWith("MERC"))) {
        gridIndex.addGridRecord(gr);
        if (gdsMap.get(gr.getGridDefRecordId()) == null) {
          McGridDefRecord mcdef = gr.getGridDefRecord();
          //System.out.println("new nav " + mcdef.toString());
          gdsMap.put(mcdef.toString(), mcdef);
          gridIndex.addHorizCoordSys(mcdef);
        }
        //}
      } catch (McIDASException me) {
        logError("problem creating grid dir");
        return false;
      }
    }
    // check to see if there are any grids that we can handle
    if (gridIndex.getGridRecords().isEmpty()) {
      logError("no grids found");
      return false;
    }
    return true;
  }
protected boolean init(boolean fullCheck) throws IOException {
    if (rf == null) {
      logError("File is null");
      return false;
    }
    gridIndex = new GridIndex(rf.getLocation());

    rf.order(RandomAccessFile.BIG_ENDIAN);
    if (rf.length() < 44) return false;
    int numEntries = Math.abs(readInt(10));
    if (numEntries > 1000000) {
      needToSwap = true;
      numEntries = Math.abs(McIDASUtil.swbyt4(numEntries));
    }
    if (numEntries > MAX_GRIDS) {
      return false;
    }
    //System.out.println("need to Swap = " + needToSwap);
    //System.out.println("number entries="+numEntries);

    // go back to the beginning
    rf.seek(0);
    // read the fileheader
    String label = rf.readString(32);
    // GEMPAK too closely like McIDAS
    if (label.contains("GEMPAK DATA MANAGEMENT FILE")) {
      logError("label indicates this is a GEMPAK grid");
      return false;
    } else { // check that they are all printable ASCII chars
      for (int i = 0; i < label.length(); i++) {
        String s0 = label.substring(i, i + 1);
        if (!(0 <= s0.compareTo(" ") && s0.compareTo("~") <= 0)) {
          logError("bad label, not a McIDAS grid");
          return false;
        }
      }
    }

    //System.out.println("label = " + label);

    // int project = readInt(8);
    //System.out.println("Project = " + project);

    int date = readInt(9);
    // dates are supposed to be yyyddd, but account for ccyyddd up to year 4000
    if ((date < 10000) || (date > 400000)) {
      logError("date wrong, not a McIDAS grid");
      return false;
    }
    //System.out.println("date = " + date);

    if (rf.length() < 4 * (numEntries + 12)) return false;
    int[] entries = new int[numEntries];
    for (int i = 0; i < numEntries; i++) {
      entries[i] = readInt(i + 11);
      // sanity check that this is indeed a McIDAS Grid file
      if (entries[i] < -1) {
        logError("bad grid offset " + i + ": " + entries[i]);
        return false;
      }
    }
    if (!fullCheck) {
      return true;
    }

    // Don't swap:
    rf.order(RandomAccessFile.BIG_ENDIAN);
    for (int i = 0; i < numEntries; i++) {
      if (entries[i] == -1) {
        continue;
      }
      int[] header = new int[64];
      rf.seek(entries[i] * 4);
      rf.readInt(header, 0, 64);
      if (needToSwap) {
        swapGridHeader(header);
      }
      try {

        McIDASGridRecord gr = new McIDASGridRecord(entries[i],
                header);
        //if (gr.getGridDefRecordId().equals("CONF X:93 Y:65")) {
        //if (gr.getGridDefRecordId().equals("CONF X:54 Y:47")) {
        // figure out how to handle Mercator projections
        // if ( !(gr.getGridDefRecordId().startsWith("MERC"))) {
        gridIndex.addGridRecord(gr);
        if (gdsMap.get(gr.getGridDefRecordId()) == null) {
          McGridDefRecord mcdef = gr.getGridDefRecord();
          //System.out.println("new nav " + mcdef.toString());
          gdsMap.put(mcdef.toString(), mcdef);
          gridIndex.addHorizCoordSys(mcdef);
        }
        //}
      } catch (McIDASException me) {
        logError("problem creating grid dir");
        return false;
      }
    }
    // check to see if there are any grids that we can handle
    if (gridIndex.getGridRecords().isEmpty()) {
      logError("no grids found");
      return false;
    }
    return true;
  }
protected boolean init ( boolean fullCheck ) throws IOException { if ( rf == null ) { logError ( "File is null" ) ; return false ; } gridIndex = new GridIndex ( rf . getLocation ( ) ) ; rf . order ( RandomAccessFile . BIG_ENDIAN ) ; if ( rf . length ( ) < 44 ) return false ; int numEntries = Math . abs ( readInt ( 10 ) ) ; if ( numEntries > 1000000 ) { needToSwap = true ; numEntries = Math . abs ( McIDASUtil . swbyt4 ( numEntries ) ) ; } if ( numEntries > MAX_GRIDS ) { return false ; } //System.out.println("need to Swap = " + needToSwap); //System.out.println("number entries="+numEntries); // go back to the beginning rf . seek ( 0 ) ; // read the fileheader String label = rf . readString ( 32 ) ; // GEMPAK too closely like McIDAS if ( label . contains ( "GEMPAK DATA MANAGEMENT FILE" ) ) { logError ( "label indicates this is a GEMPAK grid" ) ; return false ; } else { // check that they are all printable ASCII chars for ( int i = 0 ; i < label . length ( ) ; i ++ ) { String s0 = label . substring ( i , i + 1 ) ; if ( ! ( 0 <= s0 . compareTo ( " " ) && s0 . compareTo ( "~" ) <= 0 ) ) { logError ( "bad label, not a McIDAS grid" ) ; return false ; } } } //System.out.println("label = " + label); // int project = readInt(8); //System.out.println("Project = " + project); int date = readInt ( 9 ) ; // dates are supposed to be yyyddd, but account for ccyyddd up to year 4000 if ( ( date < 10000 ) || ( date > 400000 ) ) { logError ( "date wrong, not a McIDAS grid" ) ; return false ; } //System.out.println("date = " + date); if ( rf . length ( ) < 4 * ( numEntries + 12 ) ) return false ; int [ ] entries = new int [ numEntries ] ; for ( int i = 0 ; i < numEntries ; i ++ ) { entries [ i ] = readInt ( i + 11 ) ; // sanity check that this is indeed a McIDAS Grid file if ( entries [ i ] < - 1 ) { logError ( "bad grid offset " + i + ": " + entries [ i ] ) ; return false ; } } if ( ! fullCheck ) { return true ; } // Don't swap: rf . order ( RandomAccessFile . BIG_ENDIAN ) ; for ( int i = 0 ; i < numEntries ; i ++ ) { if ( entries [ i ] == - 1 ) { continue ; } int [ ] header = new int [ 64 ] ; rf . seek ( entries [ i ] * 4 ) ; rf . readInt ( header , 0 , 64 ) ; if ( needToSwap ) { swapGridHeader ( header ) ; } try { McIDASGridRecord gr = new McIDASGridRecord ( entries [ i ] , header ) ; //if (gr.getGridDefRecordId().equals("CONF X:93 Y:65")) { //if (gr.getGridDefRecordId().equals("CONF X:54 Y:47")) { // figure out how to handle Mercator projections // if ( !(gr.getGridDefRecordId().startsWith("MERC"))) { gridIndex . addGridRecord ( gr ) ; if ( gdsMap . get ( gr . getGridDefRecordId ( ) ) == null ) { McGridDefRecord mcdef = gr . getGridDefRecord ( ) ; //System.out.println("new nav " + mcdef.toString()); gdsMap . put ( mcdef . toString ( ) , mcdef ) ; gridIndex . addHorizCoordSys ( mcdef ) ; } //} } catch ( McIDASException me ) { logError ( "problem creating grid dir" ) ; return false ; } } // check to see if there are any grids that we can handle if ( gridIndex . getGridRecords ( ) . isEmpty ( ) ) { logError ( "no grids found" ) ; return false ; } return true ; }
Initialize this reader.  Get the Grid specific info

@param fullCheck for a full check reading grids
@return true if successful, false if not a mcidas grid file
@throws IOException problem reading the data
Initialize this reader . Get the Grid specific info