gfxconversion/mifconv/src/mifconv_convertermanager.cpp
changeset 0 f453ebb75370
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gfxconversion/mifconv/src/mifconv_convertermanager.cpp	Tue Feb 02 01:11:11 2010 +0200
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Mifconv converter manager class.
+*
+*/
+
+
+#include "mifconv.h"
+#include "mifconv_convertermanager.h"
+#include "mifconv_argumentmanager.h"
+#include "mifconv_util.h"
+#include "mifconv_bitmapconverter.h"
+#include "mifconv_bitmapheaderconverter.h"
+#include "mifconv_iconbinaryconverter.h"
+#include "mifconv_mifconverter.h"
+
+// Static singleton initialization
+MifConvConverterManager* MifConvConverterManager::iInstance = 0;
+
+/**
+ * Returns pointer to the singleton object
+ */
+MifConvConverterManager* MifConvConverterManager::Instance()
+{
+    if( iInstance == 0 )
+    {
+        iInstance = new MifConvConverterManager();
+    }
+    return iInstance;
+}
+
+/**
+ * Free the allocated memory
+ */
+void MifConvConverterManager::Reset()
+{
+    delete iInstance;
+    iInstance = 0;
+}
+
+/**
+ * Constructor
+ */
+MifConvConverterManager::MifConvConverterManager()
+{
+    
+}
+
+/**
+ *
+ */
+void MifConvConverterManager::Init()
+{
+    // Add bmp --> mbm converter:
+    MifConvBitmapConverter* bitmapConverter = new MifConvBitmapConverter();
+    iAllConverters.push_back(bitmapConverter);
+
+    // Add headerfile (mbg) converter:
+    MifConvBitmapHeaderConverter* headerConverter = new MifConvBitmapHeaderConverter();    
+    iAllConverters.push_back(headerConverter);
+
+    // Add svg --> svgb converter:
+    MifConvIconBinaryConverter* svgConverter = new MifConvIconBinaryConverter();
+    iAllConverters.push_back(svgConverter);
+
+    // Add mif converter:
+    MifConvMifConverter* mifConverter = new MifConvMifConverter();
+    iAllConverters.push_back(mifConverter);
+
+    // Add file converters for .BMP files:
+    MifConvFileConverterList bmpConverters;
+    bmpConverters.push_back(bitmapConverter);
+    bmpConverters.push_back(headerConverter);
+    bmpConverters.push_back(mifConverter);
+    iFileConverters.insert(std::make_pair(MifConvString(BMP_FILE_EXTENSION), bmpConverters));
+
+    // Add file converters for .SVG files:
+    MifConvFileConverterList svgConverters;
+    svgConverters.push_back(headerConverter);
+    svgConverters.push_back(svgConverter);
+    if( MifConvArgumentManager::Instance()->BooleanValue(MifConvDisableSvgCompression) )
+    {        
+        // SVG files will be added to mif-file without compression (i.e. don't use svgtbinencode for them).
+        svgConverters.push_back(mifConverter); 
+    }
+    iFileConverters.insert(std::make_pair(MifConvString(SVG_FILE_EXTENSION), svgConverters));
+
+    // Add file converters for .SVGB files:
+    MifConvFileConverterList svgbConverters;  
+    svgbConverters.push_back(headerConverter);
+    if( !MifConvArgumentManager::Instance()->BooleanValue(MifConvDisableSvgCompression) )
+    {     
+        // SVG files will be compressed first.
+        svgbConverters.push_back(mifConverter);
+    }
+    iFileConverters.insert(std::make_pair(MifConvString(SVGB_BINARY_FILE_EXTENSION), svgbConverters));
+    
+    // Initialize converters
+    for( MifConvFileConverterList::iterator i = iAllConverters.begin(); i != iAllConverters.end(); ++i )
+    {
+    	(*i)->Init();
+    }
+}
+
+/**
+ * Destructor
+ */
+MifConvConverterManager::~MifConvConverterManager()
+{
+    for( MifConvFileConverterList::iterator conv = iAllConverters.begin(); conv != iAllConverters.end(); ++conv )
+    {
+        delete *conv;    
+    }
+}
+
+/**
+ * Adds source files to converters and converts them
+ */
+void MifConvConverterManager::ProcessIcons()
+{
+    MifConvArgumentManager* argMgr = MifConvArgumentManager::Instance();
+    // Loop all the source files and append them to correct converters:
+    const MifConvSourceFileList& sourcefiles = argMgr->SourceFiles();
+    for( MifConvSourceFileList::const_iterator i = sourcefiles.begin(); i != sourcefiles.end(); ++i )
+	{        
+        MifConvFileConverterList& converters = GetConverters(*i);
+        for( MifConvFileConverterList::iterator converter = converters.begin(); converter != converters.end(); ++converter )
+        {            
+            (*converter)->AppendFile(*i);            
+        }
+    }
+
+    // Run all the converters:
+    for( MifConvFileConverterList::iterator conv = iAllConverters.begin(); conv != iAllConverters.end(); ++conv )
+    {
+        (*conv)->Convert();
+    }
+}
+
+/**
+ *
+ */
+void MifConvConverterManager::Cleanup(bool error)
+{
+    for( MifConvFileConverterList::iterator conv = iAllConverters.begin(); conv != iAllConverters.end(); ++conv )
+    {
+        try {
+            (*conv)->Cleanup(error);
+        }
+        catch(...) {
+        // Exception should not be thrown if cleaning after error situation
+            if( !error )
+                throw;
+        }
+    }           
+}
+
+/**
+ *
+ */
+MifConvFileConverterList& MifConvConverterManager::GetConverters(const MifConvSourceFile& source)
+{    
+    return GetConverters(source.Filename());
+}
+
+/**
+ *
+ */
+MifConvFileConverterList& MifConvConverterManager::GetConverters(const MifConvString& filename)
+{
+    MifConvString extension(MifConvUtil::FileExtension(filename));
+    FileConverterMap::iterator i = iFileConverters.find(extension);
+    if( i != iFileConverters.end() )
+    {
+        return i->second;
+    }
+    
+    return iDummyConverterList;
+}