private CoordVarExtractor findCoordinateAxis ( Table . CoordName coordName , Table t , int nestingLevel ) { if ( t == null ) return null ; String axisName = t . findCoordinateVariableName ( coordName ) ; if ( axisName != null ) { VariableDS v = t . findVariable ( axisName ) ; if ( v != null ) return new CoordVarExtractorVariable ( v , axisName , nestingLevel ) ; if ( t . extraJoins != null ) { for ( Join j : t . extraJoins ) { v = j . findVariable ( axisName ) ; if ( v != null ) return new CoordVarExtractorVariable ( v , axisName , nestingLevel ) ; } } // see if its in the StructureData if ( t instanceof Table . TableSingleton ) { Table . TableSingleton ts = ( Table . TableSingleton ) t ; return new CoordVarStructureData ( axisName , ts . sdata ) ; } // see if its at the top level if ( t instanceof Table . TableTop ) { v = ( VariableDS ) ds . findVariable ( axisName ) ; if ( v != null ) return new CoordVarTop ( v ) ; else return new CoordVarConstant ( coordName . toString ( ) , "" , axisName ) ; // assume its the actual value } errlog . format ( "NestedTable: cant find variable '%s' for coordinate type %s %n" , axisName , coordName ) ; } // check the parent return findCoordinateAxis ( coordName , t . parent , nestingLevel + 1 ) ; }
find a coord axis of the given type in the table and its parents