gfxconversion/mifconv/inc/mifconv_argumentmanager.h
changeset 0 f453ebb75370
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gfxconversion/mifconv/inc/mifconv_argumentmanager.h	Tue Feb 02 01:11:11 2010 +0200
@@ -0,0 +1,379 @@
+/*
+* 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 argument manager class.
+*
+*/
+
+
+#ifndef __MIFCONVARGUMENTMANAGER_H__
+#define __MIFCONVARGUMENTMANAGER_H__
+
+#include <map>
+#include "mifconv.h"
+#include "mifconv_sourcefile.h"
+#include "mifconv_argument.h"
+
+
+/**
+ * This helper class is used to specify rules that will be used when
+ * mifconv is searching source icons from the predefined folders.
+ * Currently it supports rules that specify what kind of files can be
+ * located in the folders.
+ */
+class MifConvSourceSearchRule
+{
+public:
+    /**
+     * Constructor
+     * @param path Path to the folder, which the rule affects on.
+     * @param types Allowed file types that can be located in the given 
+     * <code>path</code>
+     */
+    MifConvSourceSearchRule(const MifConvString& path, const MifConvStringList& types);
+
+    /**
+     * Destructor
+     */
+    virtual ~MifConvSourceSearchRule();
+
+    /**
+     * Returns the path to the folder
+     * @return Path to the folder from which the files are searched.
+     */
+    const MifConvString& SearchPath() const;
+    MifConvString& SearchPath();
+
+    /**
+     * Returns a list of allowed file types (extensions). 
+     * <code>MIFCONV_WILDCARD</code> can be used as a wildcard, meaning that
+     * there are no restrictions for the filetype in the specific folder.
+     * @return List of allowed file extensions.
+     */
+    const MifConvStringList& AllowedFileTypes() const;
+private:
+    MifConvString iSearchPath;
+    MifConvStringList iAllowedFileTypes;
+};
+
+class MifConvArgumentManager
+{
+public:
+
+    /**
+     * Returns a pointer to the singleton instance.
+     * @return Pointer to the singleton instance.
+     */
+    static MifConvArgumentManager* Instance();
+        
+    /** 
+     * Destructor
+     */
+	virtual ~MifConvArgumentManager();
+
+	/** 
+	 * Initializes the argument list.
+	 * @param argList List of strings from which the arguments are parsed.
+	 */
+	void Init( const MifConvStringList& argList );
+
+    /**
+     * Deallocates the allocated memory.
+     */
+    static void Reset();
+
+	/**
+	 * Set target filename (i.e. mif-filename)
+	 * @param arg target filename
+	 */
+	void SetTargetFile( const MifConvString& arg );
+
+	/**
+	 * Returns target filename
+	 * @return target filename
+	 */
+	const MifConvString& TargetFile() const;
+
+	/**
+	 * Returns argument value
+	 * @param argName Argument name
+	 * @return Argument value
+	 */
+	const MifConvString& StringValue(const MifConvString& argName) const;
+
+    /**
+     * Returns argument value list
+     * @param argName Argument name
+     * @return List of argument values
+     */
+    const MifConvStringList& StringListValue(const MifConvString& argName) const;
+
+	/**
+	 * Returns value of an boolean argument. Returns false, if argument is not 
+	 * found from the boolean argument list.
+	 * @param argName Argument name
+	 * @return Argument value
+	 */
+	bool BooleanValue( const MifConvString& argName ) const;
+
+	/**
+	 * Returns source file list given in command line parameters
+	 * @return List of source files
+	 */
+	const MifConvSourceFileList& SourceFiles() const;
+
+	/**
+	 * Adds argument value to the argument map
+	 * @param argName Name of the argument
+	 * @param argValue Value of the argument
+	 */
+	void AddArgumentValue( const MifConvString& argName, const MifConvString& argValue );
+
+	/**
+	 * Add source file to the source file list
+	 * @param sourceFile Source file object to be added to the list
+	 */
+	void AddSourceFile( const MifConvSourceFile& sourceFile );
+    
+    /**
+     * Returns value of EPOCROOT environment variable. If the EPOCROOT 
+     * environment variable is defined (i.e. length > 0), directory separator
+     * is added to returned string if it is missing from the EPOCROOT.
+     * @return EPOCROOT environment variable value
+     */
+    const MifConvString& EpocRoot() const;
+
+    /**
+     * Converts depth value to display mode value
+     * @return IconDisplayMode enumeration value 
+     * @param depth IconDepth enumeration value
+     */
+    IconDisplayMode ConvertToDisplayMode(IconDepth depth) const;
+
+    /**
+     * Converts mask depth value to display mode value
+     * @return IconDisplayMode enumeration value 
+     * @param mask IconMaskDepth enumeration value
+     */
+    IconDisplayMode ConvertToMaskDisplayMode(IconMaskDepth mask) const;
+
+    /**
+     * Converts depth string value to depth enumeration value
+     * @return IconDepth enumeration value
+     * @param depthStr depth string      
+     */
+    IconDepth ConvertToDepth( const MifConvString& depthStr ) const;
+
+    /**
+     * Converts mask depth string value to mask depth enumeration value
+     * @return IconMaskDepth enumeration value 
+     * @param depthStr mask depth string
+     */
+    IconMaskDepth ConvertToMaskDepth( const MifConvString depthStr ) const;
+
+protected:
+
+    /**
+     * Tells whether the given string is a valid argument name
+     * @return True if the given string is valid argument
+     * @param argName String representing the argument name
+     */
+	bool IsArgument( const MifConvString& argName ) const;
+
+    /**
+     * Tells whether the given argument is of string type and returns the 
+     * length of the argument name. For example: If given string 
+     * "/HMyHeader.mbg" this function returns 1, which is the length of the
+     * argument name "H".
+     * @return Length of the string if the given argument is string type, zero 
+     * otherwise
+     * @param argName Argument name
+     */
+	size_t IsStringArgument( const MifConvString& argName ) const;
+
+    /**
+     * Tells whether the given argument is of string list type and returns the 
+     * length of the argument name. For example: If given string 
+     * "/iInputDir;TempDir" this function returns 1, which is the length of the
+     * argument name "i".
+     * @return Length of the string if the given argument is string list type, zero 
+     * otherwise
+     * @param argName Argument name
+     */
+	size_t IsStringListArgument( const MifConvString& argName ) const;
+
+    /**
+     * Tells whether the given argument is of boolean type and returns the 
+     * length of the argument name. For example: If given string "/E" this 
+     * function returns 1, which is the length of the argument name "E".
+     * @return Length of the argument name if the given argument is boolean 
+     * type, zero otherwise
+     * @param argName Argument name
+     */
+	size_t IsBooleanArgument( const MifConvString& argName ) const;
+
+    /**
+     * Tells whether the given argument is a help argument and returns the 
+     * length of the argument name. For example: If given string "--help" this
+     * function returns 5, which is the length of the argument name "-help".
+     * @return Length of the argument name if the given argument is a help 
+     * argument, zero otherwise
+     * @param argName Argument name
+     */
+    size_t IsHelpArgument( const MifConvString& argName ) const;
+
+    /**
+     * Tells whether the given argument is a valid depth value
+     * @return True if the given argument is a valid depth value, false 
+     * otherwise
+     * @param argName Argument string
+     */
+	bool IsDepthArgument( const MifConvString& argName ) const;
+
+    /**
+     * Tells whether the given argument is an "animated" -flag
+     * @return True if the given argument is an "animated" -flag, false 
+     * otherwise
+     * @param argName Argument string
+     */
+	bool IsAnimatedFlag( const MifConvString& argName ) const;
+
+    /**
+     * Finalizes the command line arguments for internal use.
+     */
+	void FinalizeArguments();
+
+    /**
+     * Processes and fix the directory paths given in command line arguments.
+     */
+	void ProcessArgumentPaths();
+
+    /**
+     * Resolves the actual source file types by searching them in user defined
+     * or pre-defined locations.
+     */
+	void ResolveSourceFileTypes();
+
+    /**
+     * Sets usage instructions in the given string
+     * @param usageStr Usage instuctions are copied in this string object.
+     */
+	void SetUsageString( MifConvString& usageStr ) const;
+
+    /**
+     * Gets needed environment variables.
+     */
+    void GetMifEnv();
+
+    /**
+     * Completes the given path to full directory path without the drive letter.
+     * @param sourcePath Directory path to be completed to full path.
+     * @param targetPath Full directory path is copied here.
+     */
+    void MifFullPath( const MifConvString& sourcePath, MifConvString& targetPath);
+
+    /**
+     * Completes the given drive and path to full absolute directory path.
+     * @param sourceDrive Drive of the absolute path. If empty, epocroot 
+     * environment variable is used.
+     * @param sourcePath Directory path to be completed to absolute path.
+     * @param targetPath Absolute directory path is copied here.
+     */     
+    void MifAbsolutePath( const MifConvString& sourceDrive, const MifConvString& sourcePath, MifConvString& targetPath);
+
+    /**
+     * Checks wheter the given file-extension is the correct one for the source 
+     * file. Sets also the source filename to complete one.
+     * @return true if the given source file with given extension is found and 
+     * to be used.
+     * @param srcFile Source file object
+     * @param extension Extension of the source file
+     */
+    bool FindAndSetPathAndType( MifConvSourceFile& srcFile, const MifConvString& extension );
+
+    /**
+     * Fills up the depth and mask depth maps used to map different enumeration 
+     * values internally.
+     */
+    void PopulateDepthAndMaskMaps();
+
+    /**
+     * Reads the parameter file containing commandline parameters and source 
+     * icon files
+     * @param paramFilename Filename for the parameter file.
+     * @param paramList Parameters are inserted to this list.
+     */
+    void ReadParameterFile(const MifConvString& paramFilename, MifConvStringList& paramList);
+
+    /**
+     * Adds arguments to internal data structures
+     * @param argList List containing arguments
+     * @param paramsFromFile Tells if the parameters are read from the 
+     * parameter file or not.
+     * Applied usage rules depend sligthly on this.
+     */
+    void AddArguments( const MifConvStringList& argList, bool paramsFromFile = false );
+
+    /**
+     * Reads string argument from the list to internal data structure
+     */
+    MifConvString ReadStringArgument(const MifConvStringList& argList, MifConvStringList::const_iterator& i, unsigned int argNameLen);
+
+    /**
+     * Reads string list argument from the list to internal data structure
+     */
+    void ReadStringListArgument(MifConvStringList::const_iterator& i, unsigned int argNameLen, MifConvStringList& StringValueList);
+
+    // Internal data structure for boolean type arguments
+	typedef std::map<MifConvString, MifConvBooleanArgument> BooleanArgMap;
+    BooleanArgMap iBooleanArguments;
+
+    // Internal data structure for string type arguments
+	typedef std::map<MifConvString, MifConvStringArgument> StringArgMap;
+    StringArgMap iStringArguments;
+
+    // Internal data structure for string list type arguments
+    typedef std::map<MifConvString, MifConvStringListArgument> StringListArgMap;
+    StringListArgMap iStringListArguments;
+
+	inline void THROW_USAGE_EXCEPTION() const;
+    inline void THROW_ERROR( const MifConvString& errorMsg, const MifConvString& file = MifConvString(), int line = 0) const;
+	
+	MifConvSourceFileList iSourceFiles;
+	MifConvString iTargetFile;
+	MifConvString iDummyString;
+    MifConvStringList iDummyStringList;
+    //MifConvStringList iSearchPaths;    
+    MifConvString iEpocRoot;
+
+    // Internal data structure storing the rules used when finding source icons 
+    // from the folders
+    typedef vector<MifConvSourceSearchRule> SearchRules;
+    SearchRules iSearchRules;
+
+    private:
+
+    /**
+     * Default constructor
+     */
+	MifConvArgumentManager();
+    static MifConvArgumentManager* iInstance;
+
+    MifConvIconDepthMap iDepthMap;
+    MifConvIconMaskDepthMap iMaskDepthMap;
+    MifConvIconDisplayModeMap iDisplayModeMap;
+    MifConvMaskIconDisplayModeMap iMaskDisplayModeMap;
+};
+
+
+#endif