private void parseGrid ( Element gridElement , String indent ) throws DASException , NoSuchTypeException , BadSemanticsException { parseLevel ++ ; // Grab the parent object (which better be a Grid!) // just to elminate the hassle of casting everytime... DGrid myGrid = ( DGrid ) parentDC ; if ( _Debug ) { System . out . println ( "Parsing Grid Element: " + gridElement ) ; System . out . println ( "Grid Elements: " ) ; //showXMLElement(gridElement, indent); for ( Element element : gridElement . getChildren ( ) ) System . out . println ( element ) ; } // Get and parse the grid's Array element. String eName = "Array" ; if ( _Debug ) { System . out . println ( "Parsing Array element." ) ; System . out . println ( "Asking for element: '" + eName + "' in namespace: '" + opendapNameSpace + "'" ) ; } Element arrayElement = gridElement . getChild ( eName , opendapNameSpace ) ; if ( _Debug ) System . out . println ( "Got Array element: " + arrayElement ) ; DArray gridArray = ( DArray ) newBaseType ( arrayElement ) ; parseArray ( arrayElement , gridArray , indent + " " ) ; // Add it to the Grid myGrid . addVariable ( gridArray , DGrid . ARRAY ) ; // Get the Map elements eName = "Map" ; if ( _Debug ) { System . out . println ( "Parsing Map elements." ) ; System . out . println ( "Asking for element: '" + eName + "' in namespace: '" + opendapNameSpace + "'" ) ; } List < Element > mapElements = gridElement . getChildren ( "Map" , opendapNameSpace ) ; // Make sure the number of Map elements matches the dimension of the Grid Array. if ( mapElements . size ( ) != gridArray . numDimensions ( ) ) throw new BadSemanticsException ( "Error in Grid syntax: " + "The number of Map arrays must " + "equal the number of dimensions " + "of the data array." ) ; // Parse each Map element and poke it into the Grid. for ( Element mapElement : mapElements ) { DArray thisMap = ( DArray ) newBaseType ( mapElement ) ; parseArray ( mapElement , thisMap , indent + " " ) ; if ( thisMap . numDimensions ( ) != 1 ) throw new BadSemanticsException ( "Error in Grid syntax: " + "Maps may have only one dimension." ) ; myGrid . addVariable ( thisMap , DGrid . MAPS ) ; } parseLevel -- ; }
Grids are unusual examples of DConstructor and require special handling when parsing .