cdm/src/main/java/ucar/nc2/ft/point/standard/TableAnalyzer.java
private void makeTablesDefault(boolean structAdded) throws IOException {

    // make Structures into a table
    List<Variable> vars = new ArrayList<>(ds.getVariables());
    Iterator<Variable> iter = vars.iterator();
    while (iter.hasNext()) {
      Variable v = iter.next();
      if (v instanceof Structure) {  // handles Sequences too
        TableConfig st = new TableConfig(Table.Type.Structure, v.getFullName());
        CoordSysEvaluator.findCoords(st, ds, null);
        st.structName = v.getFullName();
        st.nestedTableName = v.getShortName();

        addTable(st);
        checkIfTrajectory(st);

        iter.remove();
        findNestedStructures((Structure) v, st); // look for nested structures

      } else if (structAdded && v.isUnlimited()) {
        iter.remove();
      }
    }

    if (tableSet.size() > 0) return;

    // search at dimensions that lat, lon, time coordinates use
    Set<Dimension> dimSet = new HashSet<>(10);
    for (CoordinateAxis axis : ds.getCoordinateAxes()) {
      if ((axis.getAxisType() == AxisType.Lat) || (axis.getAxisType() == AxisType.Lon)|| (axis.getAxisType() == AxisType.Time))
        for (Dimension dim : axis.getDimensions())
          dimSet.add(dim);
    }

    // lat, lon, time all use same dimension - use it
    if (dimSet.size() == 1) {
      final Dimension obsDim = (Dimension) dimSet.toArray()[0];
      TableConfig st = new TableConfig(Table.Type.Structure, obsDim.getShortName());
      st.structureType = obsDim.isUnlimited() ? TableConfig.StructureType.Structure : TableConfig.StructureType.PsuedoStructure;
      st.structName = obsDim.isUnlimited() ? "record" : obsDim.getShortName();
      st.dimName = obsDim.getShortName();
      CoordSysEvaluator.findCoords(st, ds, new CoordSysEvaluator.Predicate() {
        public boolean match(CoordinateAxis axis) {
          return obsDim.equals(axis.getDimension(0));
        }
      });

      CoordinateAxis time = CoordSysEvaluator.findCoordByType(ds, AxisType.Time);
      if ((time != null) && (time.getRank() == 0)) {
        st.addJoin(new JoinArray(time, JoinArray.Type.scalar, 0));
        st.time = time.getShortName();
      }
      addTable( st);
      checkIfTrajectory(st);
    }

    if (tableSet.size() > 0) return;

    // try the time dimension
    CoordinateAxis time = null;
    for (CoordinateAxis axis : ds.getCoordinateAxes()) {
      if ((axis.getAxisType() == AxisType.Time) && axis.isIndependentCoordinate()) {
        time = axis;
        break;
      }
    }
    if (time != null) {
      Dimension obsDim = time.getDimension(0);
      TableConfig st = new TableConfig(Table.Type.Structure, obsDim.getShortName());
      st.structureType = TableConfig.StructureType.PsuedoStructure;
      st.dimName = obsDim.getShortName();
      CoordSysEvaluator.findCoords(st, ds, null);

      addTable( st);
    }

  }
private void makeTablesDefault(boolean structAdded) throws IOException {

    // make Structures into a table
    List<Variable> vars = new ArrayList<>(ds.getVariables());
    Iterator<Variable> iter = vars.iterator();
    while (iter.hasNext()) {
      Variable v = iter.next();
      if (v instanceof Structure) {  // handles Sequences too
        TableConfig st = new TableConfig(Table.Type.Structure, v.getFullName());
        CoordSysEvaluator.findCoords(st, ds, null);
        st.structName = v.getFullName();
        st.nestedTableName = v.getShortName();

        addTable(st);
        checkIfTrajectory(st);

        iter.remove();
        findNestedStructures((Structure) v, st); // look for nested structures

      } else if (structAdded && v.isUnlimited()) {
        iter.remove();
      }
    }

    if (tableSet.size() > 0) return;

    // search at dimensions that lat, lon, time coordinates use
    Set<Dimension> dimSet = new HashSet<>(10);
    for (CoordinateAxis axis : ds.getCoordinateAxes()) {
      if ((axis.getAxisType() == AxisType.Lat) || (axis.getAxisType() == AxisType.Lon)|| (axis.getAxisType() == AxisType.Time))
        for (Dimension dim : axis.getDimensions())
          dimSet.add(dim);
    }

    // lat, lon, time all use same dimension - use it
    if (dimSet.size() == 1) {
      final Dimension obsDim = (Dimension) dimSet.toArray()[0];
      TableConfig st = new TableConfig(Table.Type.Structure, obsDim.getShortName());
      st.structureType = obsDim.isUnlimited() ? TableConfig.StructureType.Structure : TableConfig.StructureType.PsuedoStructure;
      st.structName = obsDim.isUnlimited() ? "record" : obsDim.getShortName();
      st.dimName = obsDim.getShortName();
      CoordSysEvaluator.findCoords(st, ds, new CoordSysEvaluator.Predicate() {
        public boolean match(CoordinateAxis axis) {
          return obsDim.equals(axis.getDimension(0));
        }
      });

      CoordinateAxis time = CoordSysEvaluator.findCoordByType(ds, AxisType.Time);
      if ((time != null) && (time.getRank() == 0)) {
        st.addJoin(new JoinArray(time, JoinArray.Type.scalar, 0));
        st.time = time.getShortName();
      }
      addTable( st);
      checkIfTrajectory(st);
    }

    if (tableSet.size() > 0) return;

    // try the time dimension
    CoordinateAxis time = null;
    for (CoordinateAxis axis : ds.getCoordinateAxes()) {
      if ((axis.getAxisType() == AxisType.Time) && axis.isIndependentCoordinate()) {
        time = axis;
        break;
      }
    }
    if (time != null) {
      Dimension obsDim = time.getDimension(0);
      TableConfig st = new TableConfig(Table.Type.Structure, obsDim.getShortName());
      st.structureType = TableConfig.StructureType.PsuedoStructure;
      st.dimName = obsDim.getShortName();
      CoordSysEvaluator.findCoords(st, ds, null);

      addTable( st);
    }

  }
private void makeTablesDefault ( boolean structAdded ) throws IOException { // make Structures into a table
 List < Variable > vars = new ArrayList <> ( ds . getVariables ( ) ) ; Iterator < Variable > iter = vars . iterator ( ) ; while ( iter . hasNext ( ) ) { Variable v = iter . next ( ) ; if ( v instanceof Structure ) { // handles Sequences too
 TableConfig st = new TableConfig ( Table . Type . Structure , v . getFullName ( ) ) ; CoordSysEvaluator . findCoords ( st , ds , null ) ; st . structName = v . getFullName ( ) ; st . nestedTableName = v . getShortName ( ) ; addTable ( st ) ; checkIfTrajectory ( st ) ; iter . remove ( ) ; findNestedStructures ( ( Structure ) v , st ) ; // look for nested structures
 } else if ( structAdded && v . isUnlimited ( ) ) { iter . remove ( ) ; } } if ( tableSet . size ( ) > 0 ) return ; // search at dimensions that lat, lon, time coordinates use
 Set < Dimension > dimSet = new HashSet <> ( 10 ) ; for ( CoordinateAxis axis : ds . getCoordinateAxes ( ) ) { if ( ( axis . getAxisType ( ) == AxisType . Lat ) || ( axis . getAxisType ( ) == AxisType . Lon ) || ( axis . getAxisType ( ) == AxisType . Time ) ) for ( Dimension dim : axis . getDimensions ( ) ) dimSet . ( dim ) ; } // lat, lon, time all use same dimension - use it
 if ( dimSet . size ( ) == 1 ) { final Dimension obsDim = ( Dimension ) dimSet . toArray ( ) [ 0 ] ; TableConfig st = new TableConfig ( Table . Type . Structure , obsDim . getShortName ( ) ) ; st . structureType = obsDim . isUnlimited ( ) ? TableConfig . StructureType . Structure : TableConfig . StructureType . PsuedoStructure ; st . structName = obsDim . isUnlimited ( ) ? "record" : obsDim . getShortName ( ) ; st . dimName = obsDim . getShortName ( ) ; CoordSysEvaluator . findCoords ( st , ds , new CoordSysEvaluator . Predicate ( ) { public boolean match ( CoordinateAxis axis ) { return obsDim . equals ( axis . getDimension ( 0 ) ) ; } } ) ; CoordinateAxis time = CoordSysEvaluator . findCoordByType ( ds , AxisType . Time ) ; if ( ( time != null ) && ( time . getRank ( ) == 0 ) ) { st . addJoin ( new JoinArray ( time , JoinArray . Type . scalar , 0 ) ) ; st . time = time . getShortName ( ) ; } addTable ( st ) ; checkIfTrajectory ( st ) ; } if ( tableSet . size ( ) > 0 ) return ; // try the time dimension
 CoordinateAxis time = null ; for ( CoordinateAxis axis : ds . getCoordinateAxes ( ) ) { if ( ( axis . getAxisType ( ) == AxisType . Time ) && axis . isIndependentCoordinate ( ) ) { time = axis ; break ; } } if ( time != null ) { Dimension obsDim = time . getDimension ( 0 ) ; TableConfig st = new TableConfig ( Table . Type . Structure , obsDim . getShortName ( ) ) ; st . structureType = TableConfig . StructureType . PsuedoStructure ; st . dimName = obsDim . getShortName ( ) ; CoordSysEvaluator . findCoords ( st , ds , null ) ; addTable ( st ) ; } }
no TableConfig was passed in - gotta wing it
no TableConfig was passed in - gotta wing it