bes Updated for version 3.21.1
The Backend Server (BES) is the lower two tiers of the Hyrax data server
WWWStructure.cc
1
2// -*- mode: c++; c-basic-offset:4 -*-
3
4// This file is part of www_int, software which returns an HTML form which
5// can be used to build a URL to access data from a DAP data server.
6
7// Copyright (c) 2002,2003 OPeNDAP, Inc.
8// Author: James Gallagher <jgallagher@opendap.org>
9//
10// This library is free software; you can redistribute it and/or
11// modify it under the terms of the GNU Lesser General Public
12// License as published by the Free Software Foundation; either
13// version 2.1 of the License, or (at your option) any later version.
14//
15// This library is distributed in the hope that it will be useful,
16// but WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18// Lesser General Public License for more details.
19//
20// You should have received a copy of the GNU Lesser General Public
21// License along with this library; if not, write to the Free Software
22// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23//
24// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25
26// (c) COPYRIGHT URI/MIT 1999
27// Please read the full copyright statement in the file COPYRIGHT_URI.
28//
29// Authors:
30// jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31
32// Implementation for the class WWWStructure. See WWWByte.cc
33//
34// 4/7/99 jhrg
35
36#include "config.h"
37
38static char rcsid[] not_used = {"$Id$"};
39
40#include <iostream>
41#include <string>
42
43#include <libdap/DAS.h>
44#include <libdap/InternalErr.h>
45
46#include "WWWStructure.h"
47#include "WWWSequence.h"
48#include "WWWOutput.h"
49#include "get_html_form.h"
50
51using namespace dap_html_form;
52
53BaseType *
54WWWStructure::ptr_duplicate()
55{
56 return new WWWStructure(*this);
57}
58
59WWWStructure::WWWStructure(const string &n) :
60 Structure(n)
61{
62}
63
64WWWStructure::WWWStructure(Structure *bt) :
65 Structure(bt->name())
66{
67 Vars_iter p = bt->var_begin();
68 while (p != bt->var_end()) {
69 BaseType *new_bt = basetype_to_wwwtype(*p);
70 new_bt->set_attr_table((*p)->get_attr_table());
71 add_var(new_bt);
72 delete new_bt;
73 p++;
74 }
75}
76
77WWWStructure::~WWWStructure()
78{
79}
80#ifdef FILE_METHODS
81// For this `WWW' class, run the read mfunc for each of variables which
82// comprise the structure.
83
84// As is the case with geturl, use print_all_vals to print all the values of
85// a sequence.
86
87void
88WWWStructure::print_val(FILE *os, string /*space*/, bool print_decls)
89{
90 fprintf(os, "<b>Structure %s </b><br>\n", name().c_str());
91 fprintf(os, "<dl><dd>\n");
92
93 for (Vars_iter i = var_begin(); i != var_end(); ++i) {
94 (*i)->print_val(os, "", print_decls);
95 wo->write_variable_attributes(*i);
96 fprintf(os, "<p><p>\n");
97 }
98
99 fprintf(os, "</dd></dl>\n");
100}
101#endif
102
103void
104WWWStructure::print_val(ostream &strm, string /*space*/, bool print_decls)
105{
106 strm << "<b>Structure " << name() << " </b><br>\n";
107 strm << "<dl><dd>\n";
108
109 for (Vars_iter i = var_begin(); i != var_end(); ++i) {
110 (*i)->print_val(strm, "", print_decls);
111 wo->write_variable_attributes(*i);
112 strm << "<p><p>\n";
113 }
114
115 strm << "</dd></dl>\n";
116}
117
118// Is this a simple WWWStructure? Simple WWWStructures are composed of
119// only simple type elements *or* other structures which are simple.
120
121bool WWWStructure::is_simple_structure()
122{
123 for (Vars_iter i = var_begin(); i != var_end(); ++i) {
124 if ((*i)->type() == dods_structure_c) {
125 if (!dynamic_cast<WWWStructure *> (*i)->is_simple_structure())
126 return false;
127 }
128 else {
129 if (!(*i)->is_simple_type())
130 return false;
131 }
132 }
133
134 return true;
135}
STL class.