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 "COLLADASaxFWLRootParser14.h"
13 #include "COLLADASaxFWLFileLoader.h"
14 #include "COLLADASaxFWLIExtraDataCallbackHandler.h"
15 
16 #include "COLLADASaxFWLAssetLoader14.h"
17 #include "COLLADASaxFWLSceneLoader14.h"
18 #include "COLLADASaxFWLVisualSceneLoader14.h"
19 #include "COLLADASaxFWLLibraryNodesLoader14.h"
20 #include "COLLADASaxFWLLibraryMaterialsLoader14.h"
21 #include "COLLADASaxFWLLibraryEffectsLoader14.h"
22 #include "COLLADASaxFWLLibraryImagesLoader14.h"
23 #include "COLLADASaxFWLLibraryCamerasLoader14.h"
24 #include "COLLADASaxFWLLibraryLightsLoader14.h"
25 #include "COLLADASaxFWLLibraryAnimationClipsLoader14.h"
26 #include "COLLADASaxFWLLibraryAnimationsLoader14.h"
27 #include "COLLADASaxFWLLibraryControllersLoader14.h"
28 #include "COLLADASaxFWLMeshLoader14.h"
29 #include "COLLADASaxFWLGeometryLoader14.h"
30 
31 namespace COLLADASaxFWL
32 {
33 
34 	template<class Loader, class Loader14>
35 	Loader* RootParser14::beginCommon()
36 	{
37 		mFileLoader->deleteFilePartLoader();
38 		Loader* loader = new Loader(mFileLoader);
39 		Loader14* loader14 = new Loader14(loader);
40 		loader->setParserImpl( loader14 );
41 		mFileLoader->setPartLoader(loader);
42 		mFileLoader->setParser(loader14);
43 		return loader;
44 	}
45 
46 	template<class Loader, class Loader14>
47 	Loader* RootParser14::beginCommonWithId( const char * id)
48 	{
49 		mFileLoader->deleteFilePartLoader();
50 		Loader* loader = new Loader(mFileLoader);
51 		Loader14* loader14 = new Loader14(loader);
52 		loader->setParserImpl( loader14 );
53 		mFileLoader->setPartLoader(loader);
54 		mFileLoader->setParser(loader14);
55 		mFileLoader->addToSidTree( id, 0);
56 		return loader;
57 	}
58 
59 
60 	template<class Loader, class Loader14>
61 	Loader* RootParser14::beginCommonCTorWithId(  const char * id )
62 	{
63 		mFileLoader->deleteFilePartLoader();
64 		Loader* loader = new Loader(mFileLoader, id);
65 		Loader14* loader14 = new Loader14(loader);
66 		loader->setParserImpl( loader14 );
67 		mFileLoader->setPartLoader(loader);
68 		mFileLoader->setParser(loader14);
69 		mFileLoader->addToSidTree( id, 0);
70 		return loader;
71 	}
72 
73     //-----------------------------
RootParser14(FileLoader * fileLoader)74     RootParser14::RootParser14( FileLoader* fileLoader )
75         : mFileLoader ( fileLoader )
76     {
77     }
78 
79     //-----------------------------
begin__asset()80     bool RootParser14::begin__asset()
81     {
82         SaxVirtualFunctionTest14(begin__asset());
83 		beginCommon<AssetLoader, AssetLoader14>();
84         return true;
85     }
86 
87     //------------------------------
begin__scene()88     bool RootParser14::begin__scene()
89     {
90         SaxVirtualFunctionTest14(begin__scene());
91 		beginCommon<SceneLoader, SceneLoader14>();
92         return true;
93     }
94 
95     //-----------------------------
begin__visual_scene(const COLLADASaxFWL14::visual_scene__AttributeData & attributeData)96     bool RootParser14::begin__visual_scene( const COLLADASaxFWL14::visual_scene__AttributeData& attributeData )
97     {
98         SaxVirtualFunctionTest14(begin__visual_scene(attributeData));
99 		beginCommonCTorWithId<VisualSceneLoader, VisualSceneLoader14>(attributeData.id);
100         return true;
101     }
102 
103     //-----------------------------
begin__geometry(const COLLADASaxFWL14::geometry__AttributeData & attributeData)104     bool RootParser14::begin__geometry( const COLLADASaxFWL14::geometry__AttributeData& attributeData )
105     {
106         SaxVirtualFunctionTest14(begin__geometry(attributeData));
107 		GeometryLoader* geometryLoader = beginCommonWithId<GeometryLoader, GeometryLoader14>(attributeData.id);
108         if ( attributeData.name )
109             geometryLoader->setGeometryName (attributeData.name);
110         if ( attributeData.id )
111             geometryLoader->setGeometryId (attributeData.id);
112         return true;
113     }
114 
115     //-----------------------------
begin__library_nodes(const COLLADASaxFWL14::library_nodes__AttributeData & attributeData)116     bool RootParser14::begin__library_nodes( const COLLADASaxFWL14::library_nodes__AttributeData& attributeData )
117     {
118         SaxVirtualFunctionTest14(begin__library_nodes(attributeData));
119 		beginCommonWithId<LibraryNodesLoader, LibraryNodesLoader14>(attributeData.id);
120         return true;
121     }
122 
123     //-----------------------------
begin__library_materials(const COLLADASaxFWL14::library_materials__AttributeData & attributeData)124     bool RootParser14::begin__library_materials( const COLLADASaxFWL14::library_materials__AttributeData& attributeData )
125     {
126         SaxVirtualFunctionTest14(begin__library_materials(attributeData));
127 		beginCommonWithId<LibraryMaterialsLoader, LibraryMaterialsLoader14>(attributeData.id);
128         return true;
129     }
130 
131     //-----------------------------
begin__library_effects(const COLLADASaxFWL14::library_effects__AttributeData & attributeData)132     bool RootParser14::begin__library_effects( const COLLADASaxFWL14::library_effects__AttributeData& attributeData )
133     {
134         SaxVirtualFunctionTest14(begin__library_effects(attributeData));
135 		beginCommonWithId<LibraryEffectsLoader, LibraryEffectsLoader14>(attributeData.id);
136         return true;
137     }
138 
139     //-----------------------------
begin__library_cameras(const COLLADASaxFWL14::library_cameras__AttributeData & attributeData)140     bool RootParser14::begin__library_cameras( const COLLADASaxFWL14::library_cameras__AttributeData& attributeData )
141     {
142         SaxVirtualFunctionTest14(begin__library_cameras(attributeData));
143 		beginCommonWithId<LibraryCamerasLoader, LibraryCamerasLoader14>(attributeData.id);
144         return true;
145     }
146 
147     //-----------------------------
begin__library_lights(const COLLADASaxFWL14::library_lights__AttributeData & attributeData)148     bool RootParser14::begin__library_lights( const COLLADASaxFWL14::library_lights__AttributeData& attributeData )
149     {
150         SaxVirtualFunctionTest14(begin__library_lights(attributeData));
151 		beginCommonWithId<LibraryLightsLoader, LibraryLightsLoader14>(attributeData.id);
152         return true;
153     }
154 
155     //-----------------------------
begin__library_images(const COLLADASaxFWL14::library_images__AttributeData & attributeData)156     bool RootParser14::begin__library_images( const COLLADASaxFWL14::library_images__AttributeData& attributeData )
157     {
158         SaxVirtualFunctionTest14(begin__library_images(attributeData));
159 		beginCommonWithId<LibraryImagesLoader, LibraryImagesLoader14>(attributeData.id);
160         return true;
161     }
162 
163     //-----------------------------
begin__library_animation_clips(const COLLADASaxFWL14::library_animation_clips__AttributeData & attributeData)164     bool RootParser14::begin__library_animation_clips( const COLLADASaxFWL14::library_animation_clips__AttributeData& attributeData )
165     {
166         SaxVirtualFunctionTest14(begin__library_animation_clips(attributeData));
167         beginCommonWithId<LibraryAnimationClipsLoader, LibraryAnimationClipsLoader14>(attributeData.id);
168         return true;
169     }
170 
171     //-----------------------------
begin__library_animations(const COLLADASaxFWL14::library_animations__AttributeData & attributeData)172     bool RootParser14::begin__library_animations( const COLLADASaxFWL14::library_animations__AttributeData& attributeData )
173     {
174         SaxVirtualFunctionTest14(begin__library_animations(attributeData));
175 		beginCommonWithId<LibraryAnimationsLoader, LibraryAnimationsLoader14>(attributeData.id);
176         return true;
177     }
178 
179     //-----------------------------
begin__library_controllers(const COLLADASaxFWL14::library_controllers__AttributeData & attributeData)180     bool RootParser14::begin__library_controllers( const COLLADASaxFWL14::library_controllers__AttributeData& attributeData )
181     {
182         SaxVirtualFunctionTest14(begin__library_controllers(attributeData));
183 		beginCommonWithId<LibraryControllersLoader, LibraryControllersLoader14>(attributeData.id);
184 		return true;
185     }
186 
187     //-----------------------------
end__COLLADA()188     bool RootParser14::end__COLLADA()
189     {
190         SaxVirtualFunctionTest14(end__COLLADA());
191         return true;
192     }
193 
194     //-----------------------------
begin__technique(const COLLADASaxFWL14::technique__AttributeData & attributeData)195     bool RootParser14::begin__technique ( const COLLADASaxFWL14::technique__AttributeData& attributeData )
196     {
197         SaxVirtualFunctionTest14(begin__technique(attributeData));
198         technique__AttributeData attr;
199         attr.profile = attributeData.profile;
200         return base__begin__technique ( attr, getUniqueId(), getObject() );
201     }
202 
203 }
204