1 // file      : xsd/cxx/xml/dom/bits/error-handler-proxy.txx
2 // copyright : Copyright (c) 2005-2017 Code Synthesis Tools CC
3 // license   : GNU GPL v2 + exceptions; see accompanying LICENSE file
4 
5 #include <xsd/cxx/xml/string.hxx>
6 
7 namespace xsd
8 {
9   namespace cxx
10   {
11     namespace xml
12     {
13       namespace dom
14       {
15         namespace bits
16         {
17           template <typename C>
18           bool error_handler_proxy<C>::
handleError(const xercesc::DOMError & e)19           handleError (const xercesc::DOMError& e)
20           {
21             using xercesc::DOMError;
22 
23             if (e.getSeverity() != DOMError::DOM_SEVERITY_WARNING)
24               failed_ = true;
25 
26             if (native_eh_)
27               return native_eh_->handleError (e);
28             else
29             {
30               typedef typename error_handler<C>::severity severity;
31 
32               severity s (severity::error);
33 
34               switch (e.getSeverity())
35               {
36               case DOMError::DOM_SEVERITY_WARNING:
37                 {
38                   s = severity::warning;
39                   break;
40                 }
41               case DOMError::DOM_SEVERITY_ERROR:
42                 {
43                   s = severity::error;
44                   break;
45                 }
46               case DOMError::DOM_SEVERITY_FATAL_ERROR:
47                 {
48                   s = severity::fatal;
49                   break;
50                 }
51               }
52 
53               xercesc::DOMLocator* loc (e.getLocation ());
54 
55               return eh_->handle (
56                 transcode<C> (loc->getURI ()),
57                 static_cast<unsigned long> (loc->getLineNumber ()),
58                 static_cast<unsigned long> (loc->getColumnNumber ()),
59                 s,
60                 transcode<C> (e.getMessage ()));
61             }
62           }
63         }
64       }
65     }
66   }
67 }
68