bes  Updated for version 3.20.6
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 
38 static char rcsid[] not_used = {"$Id$"};
39 
40 #include <iostream>
41 #include <string>
42 
43 #include "DAS.h"
44 #include "InternalErr.h"
45 
46 #include "WWWStructure.h"
47 #include "WWWSequence.h"
48 #include "WWWOutput.h"
49 #include "get_html_form.h"
50 
51 using namespace dap_html_form;
52 
53 BaseType *
54 WWWStructure::ptr_duplicate()
55 {
56  return new WWWStructure(*this);
57 }
58 
59 WWWStructure::WWWStructure(const string &n) :
60  Structure(n)
61 {
62 }
63 
64 WWWStructure::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 
77 WWWStructure::~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 
87 void
88 WWWStructure::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);
96  fprintf(os, "<p><p>\n");
97  }
98 
99  fprintf(os, "</dd></dl>\n");
100 }
101 #endif
102 
103 void
104 WWWStructure::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);
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 
121 bool 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 }
WWWStructure
Definition: WWWStructure.h:43
WWWOutput::write_variable_attributes
void write_variable_attributes(BaseType *btp)
Definition: WWWOutput.cc:181