public boolean putObservation(Observation observation) { int ncStatus = 0; NativeLongByReference record_startp = new NativeLongByReference(new NativeLong(record_index)); NativeLongByReference record_countp = new NativeLongByReference(new NativeLong(1)); boolean observationPutSuccessful = false; if (!isClosed && record.isObservationValid(observation)) { ByteBuffer recordBuffer = ByteBuffer.allocateDirect(record.getCompoundSize()); recordBuffer.order(ByteOrder.nativeOrder()); recordBuffer.putInt(observation.station_index); recordBuffer.putInt(observation.time_offset); for (Object value : observation.values) { if (value instanceof String) { throw new UnsupportedOperationException("Need to implement char[] or string"); // String val = (String) value; // ncStatus = nc_put_att_text(ncId, ncVarId, key, val); // status(ncStatus); } else if (value instanceof Integer) { int val = ((Integer) value).intValue(); recordBuffer.putInt(val); } else if (value instanceof Short) { short val = ((Short) value).shortValue(); recordBuffer.putShort(val); } else if (value instanceof Float) { float val = ((Float) value).floatValue(); recordBuffer.putFloat(val); } else if (value instanceof Double) { double val = ((Double) value).doubleValue(); recordBuffer.putDouble(val); } else { throw new UnsupportedOperationException("Should implement the other types"); } } // record complete recordBuffer.rewind(); ncStatus = nc_put_vara(ncId, record.getVarId(), record_startp, record_countp, recordBuffer); status(ncStatus); record_index++; // station_indexp.setValue(station_indexp.longValue() + 1); return true; } return observationPutSuccessful; }