/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_xmloff.hxx"

#include "sal/config.h"

#include "xmloff/dllapi.h"

#include <string.h>
#include <com/sun/star/container/XSet.hpp>
#include <com/sun/star/registry/XRegistryKey.hpp>
#include <osl/diagnose.h>
#include <tools/debug.hxx>

#include <cppuhelper/factory.hxx>
#include <uno/lbnames.h>
#include "xmloff/xmlreg.hxx"

using namespace rtl;
using namespace com::sun::star;

#define SERVICE( className )										\
extern OUString SAL_CALL className##_getImplementationName() throw();	\
extern uno::Sequence< OUString > SAL_CALL className##_getSupportedServiceNames() throw();\
extern uno::Reference< uno::XInterface > SAL_CALL className##_createInstance(			\
		const uno::Reference< lang::XMultiServiceFactory > & rSMgr )				\
	throw( uno::Exception )

// impress oasis import
SERVICE( XMLImpressImportOasis );
SERVICE( XMLImpressStylesImportOasis );
SERVICE( XMLImpressContentImportOasis );
SERVICE( XMLImpressMetaImportOasis );
SERVICE( XMLImpressSettingsImportOasis );

// impress oasis export
SERVICE( XMLImpressExportOasis );
SERVICE( XMLImpressStylesExportOasis );
SERVICE( XMLImpressContentExportOasis );
SERVICE( XMLImpressMetaExportOasis );
SERVICE( XMLImpressSettingsExportOasis );

// impress OOo import

// impress OOo export
SERVICE( XMLImpressExportOOO );
SERVICE( XMLImpressStylesExportOOO );
SERVICE( XMLImpressContentExportOOO );
SERVICE( XMLImpressMetaExportOOO );
SERVICE( XMLImpressSettingsExportOOO );

// draw oasis import
SERVICE( XMLDrawImportOasis );
SERVICE( XMLDrawStylesImportOasis );
SERVICE( XMLDrawContentImportOasis );
SERVICE( XMLDrawMetaImportOasis );
SERVICE( XMLDrawSettingsImportOasis );

// draw oasis export
SERVICE( XMLDrawExportOasis );
SERVICE( XMLDrawStylesExportOasis );
SERVICE( XMLDrawContentExportOasis );
SERVICE( XMLDrawMetaExportOasis );
SERVICE( XMLDrawSettingsExportOasis );

// draw OOo import

// draw OOo export
SERVICE( XMLDrawExportOOO );
SERVICE( XMLDrawStylesExportOOO );
SERVICE( XMLDrawContentExportOOO );
SERVICE( XMLDrawMetaExportOOO );
SERVICE( XMLDrawSettingsExportOOO );

// impress animation import
SERVICE( AnimationsImport );

// drawing layer export
SERVICE( XMLDrawingLayerExport );

// impress xml clipboard export
SERVICE( XMLImpressClipboardExport );

// chart oasis import
SERVICE( SchXMLImport );
SERVICE( SchXMLImport_Meta );
SERVICE( SchXMLImport_Styles );
SERVICE( SchXMLImport_Content );

// chart oasis export
SERVICE( SchXMLExport_Oasis );
SERVICE( SchXMLExport_Oasis_Meta );
SERVICE( SchXMLExport_Oasis_Styles );
SERVICE( SchXMLExport_Oasis_Content );

// chart OOo import

// chart OOo export
SERVICE( SchXMLExport );
SERVICE( SchXMLExport_Styles );
SERVICE( SchXMLExport_Content );

// version list import/export
SERVICE( XMLVersionListPersistence );

// meta export
SERVICE( XMLMetaExportComponent );

// meta import
SERVICE( XMLMetaImportComponent );

// meta export OOo
SERVICE( XMLMetaExportOOO );

// writer autotext event export
SERVICE( XMLAutoTextEventExport );

// writer autotext event import
SERVICE( XMLAutoTextEventImport );

// writer autotext event export OOo
SERVICE( XMLAutoTextEventExportOOO );

// writer autotext event import OOo
SERVICE( XMLAutoTextEventImportOOO );

// Oasis2OOo transformer
SERVICE( Oasis2OOoTransformer );

// OOo2Oasis transformer
SERVICE( OOo2OasisTransformer );

//
#ifdef __cplusplus
extern "C"
{
#endif

XMLOFF_DLLPUBLIC void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** )
{
	*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
}

#define SINGLEFACTORY(classname)\
		if( classname##_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )\
		{\
			xFactory = ::cppu::createSingleFactory( xMSF,\
				classname##_getImplementationName(),\
				classname##_createInstance,\
				classname##_getSupportedServiceNames() );\
		}

XMLOFF_DLLPUBLIC void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * /*pRegistryKey*/ )
{
	void * pRet = 0;
	if( pServiceManager )
	{
		uno::Reference< lang::XMultiServiceFactory > xMSF( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ) );

		uno::Reference< lang::XSingleServiceFactory > xFactory;

		const sal_Int32 nImplNameLen = strlen( pImplName );

		// impress oasis import
		SINGLEFACTORY( XMLImpressImportOasis )
		else SINGLEFACTORY( XMLImpressStylesImportOasis )
		else SINGLEFACTORY( XMLImpressContentImportOasis )
		else SINGLEFACTORY( XMLImpressMetaImportOasis )
		else SINGLEFACTORY( XMLImpressSettingsImportOasis )

		// impress oasis export
		else SINGLEFACTORY( XMLImpressExportOasis )
		else SINGLEFACTORY( XMLImpressStylesExportOasis )
		else SINGLEFACTORY( XMLImpressContentExportOasis )
		else SINGLEFACTORY( XMLImpressMetaExportOasis )
		else SINGLEFACTORY( XMLImpressSettingsExportOasis )

		else SINGLEFACTORY( AnimationsImport )

		// impress OOo export
		else SINGLEFACTORY( XMLImpressExportOOO )
		else SINGLEFACTORY( XMLImpressStylesExportOOO )
		else SINGLEFACTORY( XMLImpressContentExportOOO )
		else SINGLEFACTORY( XMLImpressMetaExportOOO )
		else SINGLEFACTORY( XMLImpressSettingsExportOOO )

		// draw oasis import
		else SINGLEFACTORY( XMLDrawImportOasis )
		else SINGLEFACTORY( XMLDrawStylesImportOasis )
		else SINGLEFACTORY( XMLDrawContentImportOasis )
		else SINGLEFACTORY( XMLDrawMetaImportOasis )
		else SINGLEFACTORY( XMLDrawSettingsImportOasis )

		// draw oasis export
		else SINGLEFACTORY( XMLDrawExportOasis )
		else SINGLEFACTORY( XMLDrawStylesExportOasis )
		else SINGLEFACTORY( XMLDrawContentExportOasis )
		else SINGLEFACTORY( XMLDrawMetaExportOasis )
		else SINGLEFACTORY( XMLDrawSettingsExportOasis )

		// draw OOo export
		else SINGLEFACTORY( XMLDrawExportOOO )
		else SINGLEFACTORY( XMLDrawStylesExportOOO )
		else SINGLEFACTORY( XMLDrawContentExportOOO )
		else SINGLEFACTORY( XMLDrawMetaExportOOO )
		else SINGLEFACTORY( XMLDrawSettingsExportOOO )

		// drawing layer export
		else SINGLEFACTORY( XMLDrawingLayerExport )

		// impress xml clipboard export
		else SINGLEFACTORY( XMLImpressClipboardExport )

		// chart oasis import
		else SINGLEFACTORY( SchXMLImport )
		else SINGLEFACTORY( SchXMLImport_Meta )
		else SINGLEFACTORY( SchXMLImport_Styles )
		else SINGLEFACTORY( SchXMLImport_Content )

		// chart oasis export
		else SINGLEFACTORY( SchXMLExport_Oasis )
		else SINGLEFACTORY( SchXMLExport_Oasis_Meta )
		else SINGLEFACTORY( SchXMLExport_Oasis_Styles )
		else SINGLEFACTORY( SchXMLExport_Oasis_Content )

		// chart OOo export
		else SINGLEFACTORY( SchXMLExport )
		else SINGLEFACTORY( SchXMLExport_Styles )
		else SINGLEFACTORY( SchXMLExport_Content )

		// meta import/export
		else SINGLEFACTORY( XMLMetaExportComponent )
		else SINGLEFACTORY( XMLMetaImportComponent )

        else SINGLEFACTORY( XMLVersionListPersistence )

		// meta import/export OOo
		else SINGLEFACTORY( XMLMetaExportOOO )

		// auto text import/export
		else SINGLEFACTORY( XMLAutoTextEventExport )
		else SINGLEFACTORY( XMLAutoTextEventImport )
		else SINGLEFACTORY( XMLAutoTextEventExportOOO )

		if( xFactory.is())
		{
			xFactory->acquire();
			pRet = xFactory.get();
		}
	}
	return pRet;
}

#ifdef __cplusplus
}
#endif
