Fix #29295: Problem with Alpha Channel video in Sequencer and textures
[blender-staging.git] / source / blender / collada / ErrorHandler.cpp
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Nathan Letwory.
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file blender/collada/ErrorHandler.cpp
24  *  \ingroup collada
25  */
26 #include "ErrorHandler.h"
27 #include <iostream>
28
29 #include "COLLADASaxFWLIError.h"
30 #include "COLLADASaxFWLSaxParserError.h"
31 #include "COLLADASaxFWLSaxFWLError.h"
32
33 #include "GeneratedSaxParserParserError.h"
34
35 #include <string.h>
36
37 //--------------------------------------------------------------------
38 ErrorHandler::ErrorHandler() : mError(false)
39 {
40 }
41
42 //--------------------------------------------------------------------
43 ErrorHandler::~ErrorHandler()
44 {
45 }
46
47 //--------------------------------------------------------------------
48 bool ErrorHandler::handleError( const COLLADASaxFWL::IError* error )
49 {
50         mError = true;
51         
52         if ( error->getErrorClass() == COLLADASaxFWL::IError::ERROR_SAXPARSER )
53         {
54                 COLLADASaxFWL::SaxParserError* saxParserError = (COLLADASaxFWL::SaxParserError*) error;
55                 const GeneratedSaxParser::ParserError& parserError = saxParserError->getError();
56
57                 // Workaround to avoid wrong error
58                 if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_VALIDATION_MIN_OCCURS_UNMATCHED)
59                 {
60                         if ( strcmp(parserError.getElement(), "effect") == 0 )
61                         {
62                                 mError = false;
63                         }
64                 }
65                 if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_VALIDATION_SEQUENCE_PREVIOUS_SIBLING_NOT_PRESENT)
66                 {
67                         if ( !((strcmp(parserError.getElement(), "extra") == 0) 
68                                 && (strcmp(parserError.getAdditionalText().c_str(), "sibling: fx_profile_abstract") == 0)))
69                         {
70                                 mError = false;
71                         }
72                 }
73
74                 if ( parserError.getErrorType() == GeneratedSaxParser::ParserError::ERROR_COULD_NOT_OPEN_FILE)
75                 {
76                         std::cout << "Couldn't open file" << std::endl;
77                 }
78
79                 std::cout << "Schema validation error: " << parserError.getErrorMessage() << std::endl;
80         }
81         else if ( error->getErrorClass() == COLLADASaxFWL::IError::ERROR_SAXFWL )
82         {
83                 COLLADASaxFWL::SaxFWLError* saxFWLError = (COLLADASaxFWL::SaxFWLError*) error;
84                 std::cout << "Sax FWL Error: " << saxFWLError->getErrorMessage() << std::endl;
85         }
86         return false;
87 }