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