35 #include <BESInternalError.h>
40 #include "FONcUtils.h"
41 #include "FONcAttributes.h"
56 _str =
dynamic_cast<Str *
>(b);
58 throw BESInternalError(
"File out netcdf, FONcStr was passed a variable that is not a DAP Str", __FILE__, __LINE__);
84 BESDEBUG(
"fonc",
"FONcStr::define - defining " << _varname << endl);
88 _str->buf2val((
void**) &_data);
89 int size = _data->size() + 1;
94 if(is_dap4_group ==
true) {
95 ostringstream dim_suffix_strm;
96 dim_suffix_strm <<
"_len"<<FONcDim::DimNameNum +1;
97 FONcDim::DimNameNum++;
98 dimname = _varname+dim_suffix_strm.str();
101 dimname = _varname +
"_len";
102 int stax = nc_def_dim(ncid, dimname.c_str(), size, &_dimid);
103 if (stax != NC_NOERR) {
104 string err = (string)
"fileout.netcdf - " +
"Failed to define dim " + dimname +
" for " + _varname;
109 var_dims[0] = _dimid;
110 stax = nc_def_var(ncid, _varname.c_str(), NC_CHAR, 1, var_dims, &_varid);
111 if (stax != NC_NOERR) {
112 string err = (string)
"fileout.netcdf - " +
"Failed to define var " + _varname;
121 BESDEBUG(
"fonc",
"FONcStr::define - done defining " << _varname << endl);
136 BESDEBUG(
"fonc",
"FONcStr::write for var " << _varname << endl);
141 var_count[0] = _data->size() + 1;
143 int stax = nc_put_vara_text(ncid, _varid, var_start, var_count, _data->c_str());
144 if (stax != NC_NOERR) {
145 string err = (string)
"fileout.netcdf - " +
"Failed to write string data " + *_data +
" for " + _varname;
153 BESDEBUG(
"fonc",
"FONcStr::done write for var " << _varname << endl);
182 strm << BESIndent::LMarg <<
"FONcStr::dump - (" << (
void *)
this <<
")" << endl;
184 strm << BESIndent::LMarg <<
"name = " << _str->name() << endl;
185 BESIndent::UnIndent();
exception thrown if internal error encountered
static void add_original_name(int ncid, int varid, const string &var_name, const string &orig)
Adds an attribute for the variable if the variable name had to be modified in any way.
static void add_variable_attributes(int ncid, int varid, BaseType *b, bool is_netCDF_enhanced, bool is_dap4)
Add the attributes for an OPeNDAP variable to the netcdf file.
A DAP BaseType with file out netcdf information included.
virtual nc_type type()
returns the netcdf type of the DAP Str
virtual void define(int ncid)
Define the string variable in the netcdf file.
virtual ~FONcStr()
Destructor that cleans up the str.
virtual void write(int ncid)
Write the str out to the netcdf file.
virtual void dump(ostream &strm) const
dumps information about this object for debugging purposes
virtual string name()
returns the name of the DAP Str
FONcStr(libdap::BaseType *b)
Constructor for FONcStr that takes a DAP Str.
static void handle_error(int stax, const string &err, const string &file, int line)
handle any netcdf errors
static string gen_name(const vector< string > &embed, const string &name, string &original)
generate a new name for the embedded variable