1 /* 2 Copyright (c) 2008-2009 NetAllied Systems GmbH 3 4 This file is part of COLLADASaxFrameworkLoader. 5 6 Licensed under the MIT Open Source License, 7 for details please see LICENSE file or the website 8 http://www.opensource.org/licenses/mit-license.php 9 */ 10 11 #include "COLLADASaxFWLStableHeaders.h" 12 #include "COLLADASaxFWLFileLoader.h" 13 #include "COLLADASaxFWLLoader.h" 14 #include "COLLADASaxFWLSaxParserErrorHandler.h" 15 #include "COLLADASaxFWLSidAddress.h" 16 #include "COLLADASaxFWLVersionParser.h" 17 #include "COLLADASaxFWLKinematicsSceneCreator.h" 18 #include "COLLADASaxFWLFormulasLinker.h" 19 20 #include "COLLADAFWConstants.h" 21 #include "COLLADAFWVisualScene.h" 22 #include "COLLADAFWEffect.h" 23 #include "COLLADAFWAnimationList.h" 24 #include "COLLADAFWSkinController.h" 25 #include "COLLADAFWMorphController.h" 26 #include "COLLADAFWIWriter.h" 27 #include "COLLADAFWKinematicsScene.h" 28 #include "COLLADAFWFormulas.h" 29 30 #include "COLLADAFWObject.h" 31 32 #if defined(GENERATEDSAXPARSER_XMLPARSER_LIBXML) 33 # include "GeneratedSaxParserLibxmlSaxParser.h" 34 #elif defined(GENERATEDSAXPARSER_XMLPARSER_EXPAT) 35 # include "GeneratedSaxParserExpatSaxParser.h" 36 #else 37 # error "No prepocesser flag set to chose the xml parser to use" 38 #endif 39 40 #if defined(COLLADABU_OS_WIN) 41 #pragma warning(disable:4355) 42 #endif 43 44 using namespace COLLADASaxFWL14; 45 46 namespace COLLADASaxFWL 47 { 48 49 //----------------------------- FileLoader(Loader * colladaLoader,const COLLADABU::URI & fileURI,SaxParserErrorHandler * saxParserErrorHandler,int objectFlags,int & parsedObjectFlags,const ExtraDataCallbackHandlerList & extraDataCallbackHandlerList)50 FileLoader::FileLoader ( Loader* colladaLoader, 51 const COLLADABU::URI& fileURI, 52 SaxParserErrorHandler* saxParserErrorHandler, 53 int objectFlags, 54 int& parsedObjectFlags, 55 const ExtraDataCallbackHandlerList& extraDataCallbackHandlerList ) 56 : DocumentProcessor( colladaLoader, saxParserErrorHandler, objectFlags, parsedObjectFlags ) 57 , mFileURI( fileURI ) 58 , mParsingStatus( PARSING_NOT_STARTED ) 59 , mSaxParserErrorHandler(saxParserErrorHandler) 60 , mPrivateParser14( 0 ) 61 , mPrivateParser15( 0 ) 62 , mXmlSaxParser( 0 ) 63 , mVersionParser(0) 64 { 65 getExtraDataElementHandler ().setExtraDataCallbackHandlerList ( extraDataCallbackHandlerList ); 66 } 67 68 //----------------------------- ~FileLoader()69 FileLoader::~FileLoader() 70 { 71 } 72 73 //----------------------------- load()74 bool FileLoader::load() 75 { 76 VersionParser parser( mSaxParserErrorHandler, this, mObjectFlags, mParsedObjectFlags ); 77 mVersionParser = &parser; 78 mParsingStatus = PARSING_PARSING; 79 bool success = parser.createAndLaunchParser(); 80 mParsingStatus = PARSING_FINISHED; 81 mVersionParser = 0; 82 return success; 83 } 84 85 //----------------------------- load(const char * buffer,int length)86 bool FileLoader::load( const char* buffer, int length ) 87 { 88 VersionParser parser( mSaxParserErrorHandler, this, mObjectFlags, mParsedObjectFlags ); 89 mVersionParser = &parser; 90 mParsingStatus = PARSING_PARSING; 91 bool success = parser.createAndLaunchParser( buffer, length ); 92 mParsingStatus = PARSING_FINISHED; 93 mVersionParser = 0; 94 return success; 95 } 96 97 //----------------------------- getFileUri()98 const COLLADABU::URI& FileLoader::getFileUri() 99 { 100 return mFileURI; 101 } 102 103 //----------------------------- setParser(COLLADASaxFWL14::ColladaParserAutoGen14 * parserToBeSet)104 void FileLoader::setParser( COLLADASaxFWL14::ColladaParserAutoGen14* parserToBeSet ) 105 { 106 COLLADABU_ASSERT(mPrivateParser14); 107 mPrivateParser14->setCallbackObject(parserToBeSet); 108 } 109 110 //----------------------------- setParser(COLLADASaxFWL15::ColladaParserAutoGen15 * parserToBeSet)111 void FileLoader::setParser( COLLADASaxFWL15::ColladaParserAutoGen15* parserToBeSet ) 112 { 113 COLLADABU_ASSERT(mPrivateParser15); 114 mPrivateParser15->setCallbackObject(parserToBeSet); 115 } 116 117 //----------------------------- getElementHash(size_t level) const118 COLLADASaxFWL14::StringHash FileLoader::getElementHash( size_t level /*= 0 */ ) const 119 { 120 if ( mVersionParser ) 121 { 122 return mVersionParser->getElementHash(level); 123 } 124 return 0; 125 } 126 } // namespace COLLADASaxFWL 127