@ Override public Object read ( List < Slice > slices ) throws DapException { switch ( this . scheme ) { case ATOMIC : return readAtomic ( slices ) ; case STRUCTURE : if ( ( ( DapVariable ) this . getTemplate ( ) ) . getRank ( ) > 0 || DapUtil . isScalarSlices ( slices ) ) throw new DapException ( "Cannot slice a scalar variable" ) ; CDMCursor [ ] instances = new CDMCursor [ 1 ] ; instances [ 0 ] = this ; return instances ; case SEQUENCE : if ( ( ( DapVariable ) this . getTemplate ( ) ) . getRank ( ) > 0 || DapUtil . isScalarSlices ( slices ) ) throw new DapException ( "Cannot slice a scalar variable" ) ; instances = new CDMCursor [ 1 ] ; instances [ 0 ] = this ; return instances ; case STRUCTARRAY : Odometer odom = Odometer . factory ( slices ) ; instances = new CDMCursor [ ( int ) odom . totalSize ( ) ] ; for ( int i = 0 ; odom . hasNext ( ) ; i ++ ) { instances [ i ] = readStructure ( odom . next ( ) ) ; } return instances ; case SEQARRAY : instances = readSequence ( slices ) ; return instances ; default : throw new DapException ( "Attempt to slice a scalar object" ) ; } }
AbstractCursor Abstract Methods