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 "COLLADASaxFWLRootParser15.h"
13 #include "COLLADASaxFWLFileLoader.h"
14 #include "COLLADASaxFWLIExtraDataCallbackHandler.h"
15 
16 #include "COLLADASaxFWLAssetLoader15.h"
17 #include "COLLADASaxFWLSceneLoader15.h"
18 #include "COLLADASaxFWLVisualSceneLoader15.h"
19 #include "COLLADASaxFWLLibraryNodesLoader15.h"
20 #include "COLLADASaxFWLLibraryMaterialsLoader15.h"
21 #include "COLLADASaxFWLLibraryEffectsLoader15.h"
22 #include "COLLADASaxFWLLibraryCamerasLoader15.h"
23 #include "COLLADASaxFWLLibraryLightsLoader15.h"
24 #include "COLLADASaxFWLLibraryImagesLoader15.h"
25 #include "COLLADASaxFWLLibraryAnimationClipsLoader15.h"
26 #include "COLLADASaxFWLLibraryAnimationsLoader15.h"
27 #include "COLLADASaxFWLLibraryControllersLoader15.h"
28 #include "COLLADASaxFWLMeshLoader15.h"
29 #include "COLLADASaxFWLGeometryLoader15.h"
30 #include "COLLADASaxFWLLibraryFormulasLoader15.h"
31 #include "COLLADASaxFWLLibraryJointsLoader15.h"
32 #include "COLLADASaxFWLLibraryKinematicsModelsLoader15.h"
33 #include "COLLADASaxFWLLibraryArticulatedSystemsLoader15.h"
34 #include "COLLADASaxFWLLibraryKinematicsScenesLoader15.h"
35 
36 namespace COLLADASaxFWL
37 {
38 
39 	template<class Loader, class Loader15>
40 	Loader* RootParser15::beginCommon( )
41 	{
42 		mFileLoader->deleteFilePartLoader();
43 		Loader* loader = new Loader(mFileLoader);
44 		Loader15* loader15 = new Loader15(loader);
45 		loader->setParserImpl( loader15 );
46 		mFileLoader->setPartLoader(loader);
47 		mFileLoader->setParser(loader15);
48 		return loader;
49 	}
50 
51 	template<class Loader, class Loader15>
52 	Loader* RootParser15::beginCommonWithId( const char * id)
53 	{
54 		mFileLoader->deleteFilePartLoader();
55 		Loader* loader = new Loader(mFileLoader);
56 		Loader15* loader15 = new Loader15(loader);
57 		loader->setParserImpl( loader15 );
58 		mFileLoader->setPartLoader(loader);
59 		mFileLoader->setParser(loader15);
60 		mFileLoader->addToSidTree( id, 0);
61 		return loader;
62 	}
63 
64 	template<class Loader, class Loader15>
65 	Loader* RootParser15::beginCommonCTorWithId(  const char * id )
66 	{
67 		mFileLoader->deleteFilePartLoader();
68 		Loader* loader = new Loader(mFileLoader, id);
69 		Loader15* loader15 = new Loader15(loader);
70 		loader->setParserImpl( loader15 );
71 		mFileLoader->setPartLoader(loader);
72 		mFileLoader->setParser(loader15);
73 		mFileLoader->addToSidTree( id, 0);
74 		return loader;
75 	}
76 
77 
78     //-----------------------------
RootParser15(FileLoader * fileLoader)79     RootParser15::RootParser15( FileLoader* fileLoader )
80         : mFileLoader ( fileLoader )
81     {
82 
83     }
84 
85     //-----------------------------
begin__asset()86     bool RootParser15::begin__asset()
87     {
88         SaxVirtualFunctionTest15(begin__asset());
89 		beginCommon<AssetLoader, AssetLoader15>();
90         return true;
91     }
92 
93     //------------------------------
begin__scene()94     bool RootParser15::begin__scene()
95     {
96         SaxVirtualFunctionTest15(begin__scene());
97 		beginCommon<SceneLoader, SceneLoader15>();
98         return true;
99     }
100 
101     //-----------------------------
begin__visual_scene(const COLLADASaxFWL15::visual_scene__AttributeData & attributeData)102     bool RootParser15::begin__visual_scene( const COLLADASaxFWL15::visual_scene__AttributeData& attributeData )
103     {
104         SaxVirtualFunctionTest15(begin__visual_scene(attributeData));
105 		beginCommonCTorWithId<VisualSceneLoader, VisualSceneLoader15>(attributeData.id);
106         return true;
107     }
108 
109     //-----------------------------
begin__geometry(const COLLADASaxFWL15::geometry__AttributeData & attributeData)110     bool RootParser15::begin__geometry( const COLLADASaxFWL15::geometry__AttributeData& attributeData )
111     {
112         SaxVirtualFunctionTest15(begin__geometry(attributeData));
113 		GeometryLoader* geometryLoader = beginCommonWithId<GeometryLoader, GeometryLoader15>(attributeData.id);
114 		if ( attributeData.name )
115 			geometryLoader->setGeometryName (attributeData.name);
116 		if ( attributeData.id )
117 			geometryLoader->setGeometryId (attributeData.id);
118         return true;
119     }
120 
121     //-----------------------------
begin__library_nodes(const COLLADASaxFWL15::library_nodes__AttributeData & attributeData)122     bool RootParser15::begin__library_nodes( const COLLADASaxFWL15::library_nodes__AttributeData& attributeData )
123     {
124         SaxVirtualFunctionTest15(begin__library_nodes(attributeData));
125 		beginCommonWithId<LibraryNodesLoader, LibraryNodesLoader15>(attributeData.id);
126         return true;
127     }
128 
129     //-----------------------------
begin__library_materials(const COLLADASaxFWL15::library_materials__AttributeData & attributeData)130     bool RootParser15::begin__library_materials( const COLLADASaxFWL15::library_materials__AttributeData& attributeData )
131     {
132         SaxVirtualFunctionTest15(begin__library_materials(attributeData));
133 		beginCommonWithId<LibraryMaterialsLoader, LibraryMaterialsLoader15>(attributeData.id);
134         return true;
135     }
136 
137     //-----------------------------
begin__library_effects(const COLLADASaxFWL15::library_effects__AttributeData & attributeData)138     bool RootParser15::begin__library_effects( const COLLADASaxFWL15::library_effects__AttributeData& attributeData )
139     {
140         SaxVirtualFunctionTest15(begin__library_effects(attributeData));
141 		beginCommonWithId<LibraryEffectsLoader, LibraryEffectsLoader15>(attributeData.id);
142         return true;
143     }
144 
145     //-----------------------------
begin__library_cameras(const COLLADASaxFWL15::library_cameras__AttributeData & attributeData)146     bool RootParser15::begin__library_cameras( const COLLADASaxFWL15::library_cameras__AttributeData& attributeData )
147     {
148         SaxVirtualFunctionTest15(begin__library_cameras(attributeData));
149 		beginCommonWithId<LibraryCamerasLoader, LibraryCamerasLoader15>(attributeData.id);
150         return true;
151     }
152 
153     //-----------------------------
begin__library_lights(const COLLADASaxFWL15::library_lights__AttributeData & attributeData)154     bool RootParser15::begin__library_lights( const COLLADASaxFWL15::library_lights__AttributeData& attributeData )
155     {
156         SaxVirtualFunctionTest15(begin__library_lights(attributeData));
157 		beginCommonWithId<LibraryLightsLoader, LibraryLightsLoader15>(attributeData.id);
158         return true;
159     }
160 
161     //-----------------------------
begin__library_images(const COLLADASaxFWL15::library_images__AttributeData & attributeData)162     bool RootParser15::begin__library_images( const COLLADASaxFWL15::library_images__AttributeData& attributeData )
163     {
164         SaxVirtualFunctionTest15(begin__library_images(attributeData));
165 		beginCommonWithId<LibraryImagesLoader, LibraryImagesLoader15>(attributeData.id);
166         return true;
167     }
168 
169     //-----------------------------
begin__library_animation_clips(const COLLADASaxFWL15::library_animation_clips__AttributeData & attributeData)170     bool RootParser15::begin__library_animation_clips( const COLLADASaxFWL15::library_animation_clips__AttributeData& attributeData )
171     {
172         SaxVirtualFunctionTest15(begin__library_animation_clips(attributeData));
173         beginCommonWithId<LibraryAnimationClipsLoader, LibraryAnimationClipsLoader15>(attributeData.id);
174         return true;
175     }
176 
177     //-----------------------------
begin__library_animations(const COLLADASaxFWL15::library_animations__AttributeData & attributeData)178     bool RootParser15::begin__library_animations( const COLLADASaxFWL15::library_animations__AttributeData& attributeData )
179     {
180         SaxVirtualFunctionTest15(begin__library_animations(attributeData));
181 		beginCommonWithId<LibraryAnimationsLoader, LibraryAnimationsLoader15>(attributeData.id);
182         return true;
183     }
184 
185     //-----------------------------
begin__library_controllers(const COLLADASaxFWL15::library_controllers__AttributeData & attributeData)186     bool RootParser15::begin__library_controllers( const COLLADASaxFWL15::library_controllers__AttributeData& attributeData )
187     {
188         SaxVirtualFunctionTest15(begin__library_controllers(attributeData));
189 		beginCommonWithId<LibraryControllersLoader, LibraryControllersLoader15>(attributeData.id);
190         return true;
191     }
192 
193     //-----------------------------
begin__library_formulas(const COLLADASaxFWL15::library_formulas__AttributeData & attributeData)194     bool RootParser15::begin__library_formulas( const COLLADASaxFWL15::library_formulas__AttributeData& attributeData )
195     {
196         SaxVirtualFunctionTest15(begin__library_formulas(attributeData));
197         beginCommonWithId<LibraryFormulasLoader, LibraryFormulasLoader15>(attributeData.id);
198         return true;
199     }
200 
201 	//-----------------------------
begin__library_joints(const COLLADASaxFWL15::library_joints__AttributeData & attributeData)202 	bool RootParser15::begin__library_joints( const COLLADASaxFWL15::library_joints__AttributeData& attributeData )
203 	{
204 		SaxVirtualFunctionTest15(begin__library_joints(attributeData));
205 		beginCommonWithId<LibraryJointsLoader, LibraryJointsLoader15>(attributeData.id);
206 		return true;
207 	}
208 
209 	//-----------------------------
begin__library_kinematics_models(const COLLADASaxFWL15::library_kinematics_models__AttributeData & attributeData)210 	bool RootParser15::begin__library_kinematics_models( const COLLADASaxFWL15::library_kinematics_models__AttributeData& attributeData )
211 	{
212 		SaxVirtualFunctionTest15(begin__library_kinematics_models(attributeData));
213 		beginCommonWithId<LibraryKinematicsModelsLoader, LibraryKinematicsModelsLoader15>(attributeData.id);
214 		return true;
215 	}
216 
217 	//-----------------------------
begin__library_articulated_systems(const COLLADASaxFWL15::library_articulated_systems__AttributeData & attributeData)218 	bool RootParser15::begin__library_articulated_systems( const COLLADASaxFWL15::library_articulated_systems__AttributeData& attributeData )
219 	{
220 		SaxVirtualFunctionTest15(begin__library_articulated_systems(attributeData));
221 		beginCommonWithId<LibraryArticulatedSystemsLoader, LibraryArticulatedSystemsLoader15>(attributeData.id);
222 		return true;
223 	}
224 
225 	//-----------------------------
begin__library_kinematics_scenes(const COLLADASaxFWL15::library_kinematics_scenes__AttributeData & attributeData)226 	bool RootParser15::begin__library_kinematics_scenes( const COLLADASaxFWL15::library_kinematics_scenes__AttributeData& attributeData )
227 	{
228 		SaxVirtualFunctionTest15(begin__library_kinematics_scenes(attributeData));
229 		beginCommonWithId<LibraryKinematicsScenesLoader, LibraryKinematicsScenesLoader15>(attributeData.id);
230 		return true;
231 	}
232 
233 	//-----------------------------
end__COLLADA()234     bool RootParser15::end__COLLADA()
235     {
236         SaxVirtualFunctionTest15(end__COLLADA());
237         return true;
238     }
239 
240     //-----------------------------
begin__technique____technique_type(const COLLADASaxFWL15::technique____technique_type__AttributeData & attributeData)241     bool RootParser15::begin__technique____technique_type ( const COLLADASaxFWL15::technique____technique_type__AttributeData& attributeData )
242     {
243         SaxVirtualFunctionTest15(begin__technique____technique_type(attributeData));
244         technique__AttributeData attr;
245         attr.profile = attributeData.profile;
246         return base__begin__technique ( attr, getUniqueId(), getObject() );
247     }
248 
249 }
250