factoring SRU helper utilities into seperate files
[metaproxy-moved-to-github.git] / src / sru_util.cpp
1 /* $Id: sru_util.cpp,v 1.1 2006-09-26 13:15:33 marc Exp $
2    Copyright (c) 2005-2006, Index Data.
3
4    See the LICENSE file for details
5 */
6
7 #include "sru_util.hpp"
8 //#include "util.hpp"
9
10 //#include <yaz/wrbuf.h>
11 //#include <yaz/querytowrbuf.h>
12
13 #include <iostream>
14 //#include <list>
15
16 namespace mp = metaproxy_1;
17
18 // Doxygen doesn't like mp::gdu, so we use this instead
19 namespace mp_sru = metaproxy_1::sru;
20
21
22 std::ostream& std::operator<<(std::ostream& os, Z_SRW_PDU& srw_pdu) 
23 {
24     os << "SRU";
25     
26     switch(srw_pdu.which) {
27     case  Z_SRW_searchRetrieve_request:
28         os << " " << "searchRetrieveRequest";
29         {
30             Z_SRW_searchRetrieveRequest *sr = srw_pdu.u.request;
31             if (sr)
32             {
33                 if (sr->database)
34                     os << " " << (sr->database);
35                 else
36                     os << " -";
37                 if (sr->startRecord)
38                     os << " " << *(sr->startRecord);
39                 else
40                     os << " -";
41                 if (sr->maximumRecords)
42                     os << " " << *(sr->maximumRecords);
43                 else
44                     os << " -";
45                 if (sr->recordPacking)
46                     os << " " << (sr->recordPacking);
47                 else
48                     os << " -";
49
50                 if (sr->recordSchema)
51                     os << " " << (sr->recordSchema);
52                 else
53                     os << " -";
54                 
55                 switch (sr->query_type){
56                 case Z_SRW_query_type_cql:
57                     os << " CQL";
58                     if (sr->query.cql)
59                         os << " " << sr->query.cql;
60                     break;
61                 case Z_SRW_query_type_xcql:
62                     os << " XCQL";
63                     break;
64                 case Z_SRW_query_type_pqf:
65                     os << " PQF";
66                     if (sr->query.pqf)
67                         os << " " << sr->query.pqf;
68                     break;
69                 }
70             }
71         }
72         break;
73     case  Z_SRW_searchRetrieve_response:
74         os << " " << "searchRetrieveResponse";
75         {
76             Z_SRW_searchRetrieveResponse *sr = srw_pdu.u.response;
77             if (sr)
78             {
79                 if (! (sr->num_diagnostics))
80                 {
81                     os << " OK";
82                     if (sr->numberOfRecords)
83                         os << " " << *(sr->numberOfRecords);
84                     else
85                         os << " -";
86                     //if (sr->num_records)
87                     os << " " << (sr->num_records);
88                     //else
89                     //os << " -";
90                     if (sr->nextRecordPosition)
91                         os << " " << *(sr->nextRecordPosition);
92                     else
93                         os << " -";
94                 } 
95                 else
96                 {
97                     os << " DIAG";
98                     if (sr->diagnostics && sr->diagnostics->uri)
99                         os << " " << (sr->diagnostics->uri);
100                     else
101                         os << " -";
102                     if (sr->diagnostics && sr->diagnostics->message)
103                         os << " " << (sr->diagnostics->message);
104                     else
105                         os << " -";
106                     if (sr->diagnostics && sr->diagnostics->details)
107                         os << " " << (sr->diagnostics->details);
108                     else
109                         os << " -";
110                 }
111                 
112                     
113             }
114         }
115         break;
116     case  Z_SRW_explain_request:
117         os << " " << "explainRequest";
118         break;
119     case  Z_SRW_explain_response:
120         os << " " << "explainResponse";
121         break;
122     case  Z_SRW_scan_request:
123         os << " " << "scanRequest";
124         break;
125     case  Z_SRW_scan_response:
126         os << " " << "scanResponse";
127         break;
128     case  Z_SRW_update_request:
129         os << " " << "updateRequest";
130         break;
131     case  Z_SRW_update_response:
132         os << " " << "updateResponse";
133         break;
134     default: 
135         os << " " << "UNKNOWN";    
136     }
137
138     return os;    
139 }
140
141
142
143 /*
144  * Local variables:
145  * c-basic-offset: 4
146  * indent-tabs-mode: nil
147  * c-file-style: "stroustrup"
148  * End:
149  * vim: shiftwidth=4 tabstop=8 expandtab
150  */