metaproxy  1.13.0
Public Member Functions | Private Attributes | List of all members
metaproxy_1::filter::QueryRewrite::Rep Class Reference
Collaboration diagram for metaproxy_1::filter::QueryRewrite::Rep:
Collaboration graph

Public Member Functions

 Rep ()
 
 ~Rep ()
 
void process (mp::Package &package) const
 
void configure (const xmlNode *ptr, bool test_only, const char *path)
 

Private Attributes

xsltStylesheetPtr m_stylesheet
 
std::string charset_from
 
std::string charset_to
 

Detailed Description

Definition at line 41 of file filter_query_rewrite.cpp.

Constructor & Destructor Documentation

metaproxy_1::filter::QueryRewrite::Rep::Rep ( )
metaproxy_1::filter::QueryRewrite::Rep::~Rep ( )

Member Function Documentation

void metaproxy_1::filter::QueryRewrite::Rep::configure ( const xmlNode *  ptr,
bool  test_only,
const char *  path 
)

Definition at line 154 of file filter_query_rewrite.cpp.

References charset_from, charset_to, and m_stylesheet.

156 {
157  for (ptr = ptr->children; ptr; ptr = ptr->next)
158  {
159  if (ptr->type != XML_ELEMENT_NODE)
160  continue;
161 
162  if (mp::xml::is_element_mp(ptr, "xslt"))
163  {
164  if (m_stylesheet)
165  {
166  throw mp::filter::FilterException
167  ("Only one xslt element allowed in query_rewrite filter");
168  }
169 
170  std::string fname;
171 
172  for (struct _xmlAttr *attr = ptr->properties;
173  attr; attr = attr->next)
174  {
175  mp::xml::check_attribute(attr, "", "stylesheet");
176  fname = mp::xml::get_text(attr);
177  }
178 
179  if (0 == fname.size())
180  throw mp::filter::FilterException
181  ("Attribute <xslt stylesheet=\""
182  + fname
183  + "\"> needs XSLT stylesheet path content"
184  + " in query_rewrite filter");
185 
186  char fullpath[1024];
187  char *cp = yaz_filepath_resolve(fname.c_str(), path, 0, fullpath);
188  if (!cp)
189  {
190  throw mp::filter::FilterException("Cannot read XSLT " + fname);
191  }
192 
193  m_stylesheet = xsltParseStylesheetFile(BAD_CAST cp);
194  if (!m_stylesheet)
195  {
196  throw mp::filter::FilterException
197  ("Failed to read XSLT stylesheet '"
198  + fname
199  + "' in query_rewrite filter");
200  }
201  }
202  else if (mp::xml::is_element_mp(ptr, "charset"))
203  {
204  for (struct _xmlAttr *attr = ptr->properties;
205  attr; attr = attr->next)
206  {
207  if (!strcmp((const char *) attr->name, "from"))
208  {
209  charset_from = mp::xml::get_text(attr);
210  }
211  else if (!strcmp((const char *) attr->name, "to"))
212  {
213  charset_to = mp::xml::get_text(attr);
214  }
215  else
216  throw mp::filter::FilterException
217  ("Invalid attribute inside charset inside "
218  "query_rewrite filter");
219  }
220  }
221  else
222  {
223  throw mp::filter::FilterException
224  ("Bad element "
225  + std::string((const char *) ptr->name)
226  + " in query_rewrite filter");
227  }
228  }
229 }
void metaproxy_1::filter::QueryRewrite::Rep::process ( mp::Package &  package) const

Member Data Documentation

std::string metaproxy_1::filter::QueryRewrite::Rep::charset_from
private
std::string metaproxy_1::filter::QueryRewrite::Rep::charset_to
private
xsltStylesheetPtr metaproxy_1::filter::QueryRewrite::Rep::m_stylesheet
private

The documentation for this class was generated from the following file: