33#include <libdap/Str.h>
35#include <BESInternalError.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);
92 _str->intern_data(*get_eval(), *get_dds());
94 _str->buf2val((
void**) &_data);
95 int size = _data->size() + 1;
100 if(is_dap4_group ==
true) {
101 ostringstream dim_suffix_strm;
102 dim_suffix_strm <<
"_len"<<FONcDim::DimNameNum +1;
103 FONcDim::DimNameNum++;
104 dimname = _varname+dim_suffix_strm.str();
107 dimname = _varname +
"_len";
108 int stax = nc_def_dim(ncid, dimname.c_str(), size, &_dimid);
109 if (stax != NC_NOERR) {
110 string err = (string)
"fileout.netcdf - " +
"Failed to define dim " + dimname +
" for " + _varname;
115 var_dims[0] = _dimid;
116 stax = nc_def_var(ncid, _varname.c_str(), NC_CHAR, 1, var_dims, &_varid);
117 if (stax != NC_NOERR) {
118 string err = (string)
"fileout.netcdf - " +
"Failed to define var " + _varname;
127 BESDEBUG(
"fonc",
"FONcStr::define - done defining " << _varname << endl);
142 BESDEBUG(
"fonc",
"FONcStr::write for var " << _varname << endl);
147 var_count[0] = _data->size() + 1;
149 int stax = nc_put_vara_text(ncid, _varid, var_start, var_count, _data->c_str());
150 if (stax != NC_NOERR) {
151 string err = (string)
"fileout.netcdf - " +
"Failed to write string data " + *_data +
" for " + _varname;
159 BESDEBUG(
"fonc",
"FONcStr::done write for var " << _varname << endl);
188 strm << BESIndent::LMarg <<
"FONcStr::dump - (" << (
void *)
this <<
")" << endl;
190 strm << BESIndent::LMarg <<
"name = " << _str->name() << endl;
191 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