Blame DataDDS.h

Packit a4aae4
Packit a4aae4
// -*- mode: c++; c-basic-offset:4 -*-
Packit a4aae4
Packit a4aae4
// This file is part of libdap, A C++ implementation of the OPeNDAP Data
Packit a4aae4
// Access Protocol.
Packit a4aae4
Packit a4aae4
// Copyright (c) 2002,2003 OPeNDAP, Inc.
Packit a4aae4
// Author: James Gallagher <jgallagher@opendap.org>
Packit a4aae4
//
Packit a4aae4
// This library is free software; you can redistribute it and/or
Packit a4aae4
// modify it under the terms of the GNU Lesser General Public
Packit a4aae4
// License as published by the Free Software Foundation; either
Packit a4aae4
// version 2.1 of the License, or (at your option) any later version.
Packit a4aae4
//
Packit a4aae4
// This library is distributed in the hope that it will be useful,
Packit a4aae4
// but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a4aae4
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit a4aae4
// Lesser General Public License for more details.
Packit a4aae4
//
Packit a4aae4
// You should have received a copy of the GNU Lesser General Public
Packit a4aae4
// License along with this library; if not, write to the Free Software
Packit a4aae4
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit a4aae4
//
Packit a4aae4
// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
Packit a4aae4
Packit a4aae4
// (c) COPYRIGHT URI/MIT 1997-1999
Packit a4aae4
// Please read the full copyright statement in the file COPYRIGHT_URI.
Packit a4aae4
//
Packit a4aae4
// Authors:
Packit a4aae4
//      jhrg,jimg       James Gallagher <jgallagher@gso.uri.edu>
Packit a4aae4
Packit a4aae4
// Specialize DDS for returned data. This currently means adding version
Packit a4aae4
// information about the source of the data. Was it from a version 1, 2 or
Packit a4aae4
// later server?
Packit a4aae4
//
Packit a4aae4
// jhrg 9/19/97
Packit a4aae4
Packit a4aae4
#ifndef _datadds_h
Packit a4aae4
#define _datadds_h 1
Packit a4aae4
Packit a4aae4
#include <iostream>
Packit a4aae4
#include <string>
Packit a4aae4
Packit a4aae4
#ifndef _dds_h
Packit a4aae4
#include "DDS.h"
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
namespace libdap
Packit a4aae4
{
Packit a4aae4
Packit a4aae4
/** This class adds some useful state information to the DDS
Packit a4aae4
    structure.  It is for use on the client side of the connection.
Packit a4aae4
Packit a4aae4
    @note Make sure to pass a valid pointer to the DDS constructor or use
Packit a4aae4
    the set_factory() method before actually using the DDS. Also make sure
Packit a4aae4
    that the Factory's lifetime thereafter is the same as the DDS's. Never
Packit a4aae4
    delete the factory until you're done using the DDS.
Packit a4aae4
Packit a4aae4
    @note Update: I removed the DEFAULT_BASETYPE_FACTORY switch because it
Packit a4aae4
    caused more confusion than it avoided. See Trac #130.
Packit a4aae4
Packit a4aae4
    @note The compile-time symbol DEFAULT_BASETYPE_FACTORY controls whether
Packit a4aae4
    the old (3.4 and earlier) DDS and DataDDS constructors are supported.
Packit a4aae4
    These constructors now use a default factory class (BaseTypeFactory,
Packit a4aae4
    implemented by this library) to instantiate Byte, ..., Grid variables. To
Packit a4aae4
    use the default ctor in your code you must also define this symbol. If
Packit a4aae4
    you \e do choose to define this and fail to provide a specialization of
Packit a4aae4
    BaseTypeFactory when your software needs one, you code may not link or
Packit a4aae4
    may fail at run time. In addition to the older ctors for DDS and DataDDS,
Packit a4aae4
    defining the symbol also makes some of the older methods in Connect
Packit a4aae4
    available (because those methods require the older DDS and DataDDS ctors.
Packit a4aae4
Packit a4aae4
    @brief Holds a DAP2 DDS.
Packit a4aae4
    @see Connect
Packit a4aae4
    */
Packit a4aae4
Packit a4aae4
class DataDDS : public DDS
Packit a4aae4
{
Packit a4aae4
private:
Packit a4aae4
    string d_server_version;
Packit a4aae4
    int d_server_version_major;
Packit a4aae4
    int d_server_version_minor;
Packit a4aae4
Packit a4aae4
    string d_protocol_version;
Packit a4aae4
    int d_server_protocol_major;
Packit a4aae4
    int d_server_protocol_minor;
Packit a4aae4
Packit a4aae4
    void m_version_string_to_numbers();
Packit a4aae4
    void m_protocol_string_to_numbers();
Packit a4aae4
Packit a4aae4
public:
Packit a4aae4
    DataDDS(BaseTypeFactory *factory, const string &n = "",
Packit a4aae4
            const string &v = "", const string &p = "");
Packit a4aae4
    // #ifdef DEFAULT_BASETYPE_FACTORY
Packit a4aae4
    // DataDDS(const string &n = "", const string &v = "");
Packit a4aae4
    // #endif
Packit a4aae4
    virtual ~DataDDS()
Packit a4aae4
    {}
Packit a4aae4
Packit a4aae4
    /** Sets the version string.  This typically looks something like:
Packit a4aae4
    <tt>DODS/2.15</tt>, where ``2'' is the major version number, and ``15''
Packit a4aae4
    the minor number. */
Packit a4aae4
    void set_version(const string &v)
Packit a4aae4
    {
Packit a4aae4
        d_server_version = v;
Packit a4aae4
        m_version_string_to_numbers();
Packit a4aae4
    }
Packit a4aae4
    /** @brief Get the server version string, unparsed. */
Packit a4aae4
    string get_version() const
Packit a4aae4
    {
Packit a4aae4
        return d_server_version;
Packit a4aae4
    }
Packit a4aae4
    /** @brief Returns the major version number. */
Packit a4aae4
    int get_version_major() const
Packit a4aae4
    {
Packit a4aae4
        return d_server_version_major;
Packit a4aae4
    }
Packit a4aae4
    /** @brief Returns the minor version number. */
Packit a4aae4
    int get_version_minor() const
Packit a4aae4
    {
Packit a4aae4
        return d_server_version_minor;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void set_protocol(const string &p)
Packit a4aae4
    {
Packit a4aae4
        d_protocol_version = p;
Packit a4aae4
        m_protocol_string_to_numbers();
Packit a4aae4
    }
Packit a4aae4
    string get_protocol() const
Packit a4aae4
    {
Packit a4aae4
        return d_protocol_version;
Packit a4aae4
    }
Packit a4aae4
    int get_protocol_major() const
Packit a4aae4
    {
Packit a4aae4
        return d_server_protocol_major;
Packit a4aae4
    }
Packit a4aae4
    int get_protocol_minor() const
Packit a4aae4
    {
Packit a4aae4
        return d_server_protocol_minor;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    virtual void dump(ostream &strm) const ;
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
} // namespace libdap
Packit a4aae4
Packit a4aae4
#endif // _datadds_h