public void setValues ( Array arr ) { if ( immutable ) throw new IllegalStateException ( "Cant modify" ) ; if ( arr == null ) { dataType = DataType . STRING ; return ; } if ( arr . getElementType ( ) == char . class ) { // turn CHAR into STRING ArrayChar carr = ( ArrayChar ) arr ; if ( carr . getRank ( ) == 1 ) { // common case svalue = carr . getString ( ) ; this . nelems = 1 ; this . dataType = DataType . STRING ; return ; } // otherwise its an array of Strings arr = carr . make1DStringArray ( ) ; } // this should be a utility somewhere if ( arr . getElementType ( ) == ByteBuffer . class ) { // turn OPAQUE into BYTE int totalLen = 0 ; arr . resetLocalIterator ( ) ; while ( arr . hasNext ( ) ) { ByteBuffer bb = ( ByteBuffer ) arr . next ( ) ; totalLen += bb . limit ( ) ; } byte [ ] ba = new byte [ totalLen ] ; int pos = 0 ; arr . resetLocalIterator ( ) ; while ( arr . hasNext ( ) ) { ByteBuffer bb = ( ByteBuffer ) arr . next ( ) ; System . arraycopy ( bb . array ( ) , 0 , ba , pos , bb . limit ( ) ) ; pos += bb . limit ( ) ; } arr = Array . factory ( DataType . BYTE , new int [ ] { totalLen } , ba ) ; } if ( DataType . getType ( arr ) == DataType . OBJECT ) throw new IllegalArgumentException ( "Cant set Attribute with type " + arr . getElementType ( ) ) ; if ( arr . getRank ( ) > 1 ) arr = arr . reshape ( new int [ ] { ( int ) arr . getSize ( ) } ) ; // make sure 1D this . values = arr ; this . nelems = ( int ) arr . getSize ( ) ; this . dataType = DataType . getType ( arr ) ; }
set the values from an Array