source: branches/z3950-branch/gsdl/src/recpt/hlistbrowserclass.cpp@ 1342

Last change on this file since 1342 was 1342, checked in by johnmcp, 24 years ago

Relatively stable z39.50 implementation now, merged with the mgpp source.
(Still needs a decent interface and query language though...)

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 4.9 KB
Line 
1/**********************************************************************
2 *
3 * hlistbrowserclass.cpp --
4 * Copyright (C) 1999 The New Zealand Digital Library Project
5 *
6 * A component of the Greenstone digital library software
7 * from the New Zealand Digital Library Project at the
8 * University of Waikato, New Zealand.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program 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
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 *********************************************************************/
25
26#include "hlistbrowserclass.h"
27#include <assert.h>
28#include "OIDtools.h"
29
30hlistbrowserclass::hlistbrowserclass () {
31}
32
33hlistbrowserclass::~hlistbrowserclass () {
34}
35
36// returns the name that specifies the browserclass type
37text_t hlistbrowserclass::get_browser_name () {
38 return "HList";
39}
40
41void hlistbrowserclass::load_metadata_defaults (text_tset &metadata) {
42 metadata.insert ("doctype");
43}
44
45text_t hlistbrowserclass::get_default_formatstring () {
46 return "[link][highlight][Title][/highlight][/link]";
47}
48
49// need to change OID to it's child
50void hlistbrowserclass::processOID (cgiargsclass &args, recptproto *collectproto,
51 ostream &logout) {
52
53 text_t OID = args["d"];
54 bool is_classify = false;
55 if (OID.empty()) {
56 is_classify = true;
57 OID = args["cl"];
58 }
59
60 FilterResponse_t response;
61 text_tset metadata;
62 metadata.insert ("childtype");
63 text_t classifytype = "Invisible";
64 text_t child_doctype;
65
66 text_tarray OIDs;
67
68 while (classifytype == "Invisible") {
69 OIDs.erase (OIDs.begin(), OIDs.end());
70
71 OIDs.push_back (OID);
72 OIDs.push_back (OID + ".fc");
73
74 get_info (OIDs, args["c"], metadata, false, collectproto, response, logout);
75
76 OID = response.docInfo[1].OID;
77 classifytype = response.docInfo[0].metadata["childtype"].values[0];
78 }
79 if (is_classify) args["cl"] = OID;
80 else args["d"] = OID;
81}
82
83int hlistbrowserclass::output_section_group (ResultDocInfo_t &section, cgiargsclass &args,
84 const text_t &/*collection*/, int colnumber,
85 format_t *formatlistptr, bool use_table,
86 text_tset &metadata, bool &getParents,
87 recptproto *collectproto, displayclass &disp,
88 outconvertclass &outconvert, ostream &textout,
89 ostream &logout) {
90
91 // expanded contents are going to cause some nasty recursions
92 // so we'll only continue if being passed the current section
93 if ((args["gc"] == 1) && (section.OID != args["d"])) return 0;
94
95 // get all siblings
96 FilterResponse_t response;
97 text_t &arg_cl = args["cl"];
98 get_children (section.OID + ".pr", args["c"], metadata, getParents,
99 collectproto, response, logout);
100
101
102 if (use_table || colnumber > 0) {
103 textout << "<table><tr><td>";
104 // get tab size
105 text_t tab; int itab;
106 disp.expandstring ("Global", "_tabwidth_", tab);
107 itab = tab.getint();
108 if (colnumber > 0) textout << outconvert << disp
109 << "<img src=\"_httpimg_/space.gif\" width="
110 << (itab*colnumber) << ">";
111 textout << "</td>\n";
112 }
113
114 textout << "<table><tr>\n";
115
116 ResultDocInfo_tarray::iterator tsibling = response.docInfo.begin();
117 ResultDocInfo_tarray::iterator esibling = response.docInfo.end();
118
119 text_t icon, link;
120 while (tsibling != esibling) {
121
122 bool highlight = false;
123 textout << "<td>";
124 text_t &doctype = (*tsibling).metadata["doctype"].values[0];
125
126 if ((*tsibling).OID == section.OID) {
127 link.clear();
128 highlight = true;
129 } else {
130 link = "<a href=\"_httpdocument_";
131 if (doctype == "classify")
132 link += "&cl=" + (*tsibling).OID + "\">";
133 else
134 link += "&cl=" + arg_cl + "&d=" + (*tsibling).OID + "\">";
135 }
136
137 textout << outconvert << disp
138 << get_formatted_string (*tsibling, formatlistptr, link, icon, highlight);
139
140 textout << "</td>\n";
141 tsibling ++;
142 }
143
144 textout << "</tr></table>\n";
145 if (use_table || colnumber > 0) textout << "</tr></table>\n";
146 return 0;
147}
148
149int hlistbrowserclass::output_section_group (FilterResponse_t &/*sections*/, cgiargsclass &/*args*/,
150 const text_t &/*collection*/, int /*colnumber*/,
151 format_t * /*formatlistptr*/, bool /*use_table*/,
152 text_tset &/*metadata*/, bool &/*getParents*/,
153 recptproto * /*collectproto*/, displayclass &/*disp*/,
154 outconvertclass &/*outconvert*/, ostream &/*textout*/,
155 ostream &/*logout*/) {
156 return 0;
157}
Note: See TracBrowser for help on using the repository browser.