javacommons/utils/inc/javaoslayer.h
branchRCL_3
changeset 14 04becd199f91
child 24 6c158198356e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/utils/inc/javaoslayer.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2007-2007 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:
+*
+*/
+
+
+#ifndef JAVAOSLAYER_H
+#define JAVAOSLAYER_H
+
+#include <string>
+#include <list>
+#include <vector>
+#include "javaosheaders.h"
+
+namespace java
+{
+namespace util
+{
+
+// Runtime specific bootclasspath identifier.
+const int BOOT_CLASSPATH_MIDP = 1;
+const int BOOT_CLASSPATH_INSTALLER = 2;
+const int BOOT_CLASSPATH_TCKRUNNER = 3;
+
+class DriveId;
+
+class JavaOsLayer
+{
+public:
+    OS_IMPORT static
+    void getOsSpecificLibName(std::string& result, const char* libName);
+
+    OS_IMPORT static void getOsSpecificJavaRootPath(std::string& path);
+
+    /**
+    * Utility method for getting the root of OMJ binaries. By default the
+    * method will set the path without drive letter (in file systems that
+    * uses drive letters). The utility will append the leading slash to the
+    * path(e.g. the result could be "\sys\bin\" not "\sys\bin").
+    * If the append flag is set, then it is assumed that provided argument
+    * 'path' includes the drive letter and the implentation will append ':'
+    * and the valid path.
+    * The utility will return a refrence to the path given as argument just
+    * for helping e.g. concatenation.
+    * <p>
+    * Example in S60:
+    *   std::string path;
+    *   getBinRoot(path); //This will set path to contain "\sys\bin"
+    *   std::string path = 'C';
+    *   getBinRoot(path, true); //This will set path to contain "C:\sys\bin"
+    *
+    * @param[in/out] path Utility will either set or prepend the binary root
+    *                depending on the value of argument 'append'
+    * @param[in/out] append Whether to append the result into the argument
+    *                'path' or override the content. Look the description
+    *                above for further instructions.
+    * @return Reference to argument 'path'.
+    */
+    OS_IMPORT static std::string& getBinRoot(std::string& path, bool append = false);
+
+    /**
+    * Utility method for getting the root of OMJ resources. The behavior of this
+    * method is very similar to getBinRoot, so look for further information from
+    * the description of the JavaOsLayer::getBinRoot()
+    *
+    * @param[in/out] path Utility will either set or prepend the resource root
+    *                depending on the value of argument 'append'
+    * @param[in/out] append Whether to append the result into the argument
+    *                'path' or override the content. Look the description
+    *                of JavaOsLayer::getBinRoot() for further instructions.
+    * @return Reference to argument 'path'.
+    */
+    OS_IMPORT static std::string& getResRoot(std::string& path, bool append = false);
+
+    /**
+    * Utility method for getting the root of Midp work directory. The behavior of
+    * thismethod is very similar to getBinRoot, so look for further information
+    * from the description of the JavaOsLayer::getBinRoot()
+    *
+    * @param[in/out] path Utility will either set or prepend the Midp work
+                          directory root depending on the value of argument
+                          'append'
+    * @param[in/out] append Whether to append the result into the argument
+    *                       'path' or override the content. Look the
+                             description of JavaOsLayer::getBinRoot() for
+    *                        further instructions.
+    * @return Reference to argument 'path'.
+    */
+    OS_IMPORT static std::string& getMidpRoot(std::string& path, bool append = false);
+
+    /**
+    * Utility method for getting the root of Java Captain's work directory.
+    * The behavior of this method is very similar to getBinRoot, so look for
+    * further information from the description of the JavaOsLayer::getBinRoot()
+    *
+    * @param[in/out] path Utility will either set or prepend the Java Captain's
+    *                     work directory root depending on the value of argument
+                          'append'
+    * @param[in/out] append Whether to append the result into the argument
+    *                       'path' or override the content. Look the
+                            description of JavaOsLayer::getBinRoot() for
+    *                       further instructions.
+    * @return Reference to argument 'path'.
+    */
+    OS_IMPORT static std::string& getJavaCaptainRoot(std::string& path, bool append = false);
+
+    /**
+    * Utility method for getting the drive where the MIDP is installed in
+    * systems supporting drive letters.
+    * @return Instance of class DriveLetter conatining the drive letter as char and
+    *         as integer. For further information see DriveLetter class description.
+    */
+    OS_IMPORT static DriveId  getMidpDrive();
+    OS_IMPORT static void*    dlopen(const char* file);
+    OS_IMPORT static void*    dlsym(void* handle, const char* name, bool containsByteCode = false);
+    OS_IMPORT static int      dlclose(void* handle);
+
+    /**
+     * Utility method for tracing the startup time.
+     * @param[in] header The header of the trace.
+     * @param[in] freeMem The amount of free memory of the Java heap. Set to -1
+     *                    if unknown.
+     * @param[in] totalMem The size of the Java heap. Set to -1 if unknown.
+     */
+    OS_IMPORT static void startUpTrace(const std::string& header,
+                                       int freeMem, int totalMem);
+
+    /**
+     * Populate bootclasspath ODC package names. If not found or error
+     * it is left empty.
+     *
+     * @param[out] odcFiles   list of ODC files for bootclasspath.
+     * @param[out] bcpEntites list of other bootclasspath enties than ODC
+                              files e.g jar files.
+     * @param[in] type bootclasspath type. If not in valid range midp
+     *                 bootclasspath is set.
+     */
+    OS_IMPORT static void bootClassPath(std::list<std::wstring>& odcFiles,
+                                        std::list<std::wstring>& bcpEntites,
+                                        const int type);
+
+
+private: //Methods
+    JavaOsLayer();                                //No default constructor allowed
+    JavaOsLayer(const JavaOsLayer&);              //No copy constructor allowed
+    JavaOsLayer& operator= (const JavaOsLayer&);  //No Assignment operator allowed
+
+    /**
+     * List directory entries.
+     *
+     * @param[in] dirPath direcotry path.
+     * @param[out] entries directory entries.
+     */
+    static void listDirectory(std::string& dirPath, std::vector<std::string>& entries);
+
+    /**
+     * List odc file contents.
+     *
+     * @param[in] filePath path to file.
+     * @param[out] entries odc file entries.
+     */
+    static void listOdcFile(std::string& filePath, std::vector<std::string>& entries);
+
+    /**
+     * Populate Classpath entries from given vector. This separetes ODC files from other
+     * classpath entries and add full path of the items. Vector contains only file names
+     * and postfixes i.e. myfile.odc or mygreat.jar.
+     *
+     * @param[in] pathPrefix Path prefix used to created full path.
+     * @param[in] entries Class path entries.
+     * @param[out] odcFiles All odc files from entries.
+     * @param[out] bcpEntites All other entities.
+     */
+    static void populateCPEntries(const std::string& pathPrefix,
+                                  const std::vector<std::string>& entries,
+                                  std::list<std::wstring>& odcFiles,
+                                  std::list<std::wstring>& bcpEntites);
+
+    /**
+     * Check all rom entries and if they are not matching to iad entries
+     * adds them to deltaEntries.
+     *
+     * @param romEntries[in] ROM classpath entries.
+     * @param iadEntries[in] IAD classpath entries.
+     * @param deltaEntries[out] all ROM entries not deployed with IAD package.
+     */
+    static void deltaCPEntries(const std::vector<std::string>& romEntries,
+                               const std::vector<std::string>& iadEntries,
+                               std::vector<std::string>& deltaEntries);
+
+};
+
+/**
+ * A class for storing both drive letter as char and as integer.
+ * The integer value 0 means dirve letter A, 1 means drive letter B etc.
+ */
+class DriveId
+{
+public:
+
+    /**
+     * The constructor that sets the object with default values. Useful for
+     * platforms that don't have drive letter concept.
+     */
+    DriveId() : mLetter(0), mIndex(-1)
+    {
+        //Set the drive letter to be empty;
+        mLetter = new char[1];
+        mLetter[0]=0;
+    }
+
+    /**
+     * The constructor with specified arguments.
+     * @param[in] driveLetter Drive letter as char*. This can't be const, since
+                  it will be deleted in the destructor;
+     * @param[in] driveIndex  Drive letter as integer. 0='A', 1='B'...25='Z'
+     */
+    DriveId(char* driveLetter, int driveIndex) : mLetter(driveLetter),
+            mIndex(driveIndex) {}
+
+
+    /**
+     * The destructor.
+     */
+    ~DriveId()
+    {
+        delete[] mLetter;
+    }
+    /**
+     * Getter for the drive letter.
+     * @return drive letter as char. The charcter case is unspecified. If
+     *         some error has happened when solving the drive letter, the
+     *         content is empty ''.
+     */
+    inline const char* getDriveLetter() const
+    {
+        return mLetter;
+    }
+
+    /**
+     * Getter for the drive letter index.
+     * @return drive letter index. If some error has happened when solving
+     *         the drive letter or the system doesn't support drive letters
+     *         -1 is returned.
+     */
+    inline int getDriveIndex() const
+    {
+        return mIndex;
+    }
+
+private:
+    char*   mLetter;
+    int     mIndex;
+};
+
+
+} //end namespace util
+} //end namespace java
+
+#endif // JAVAOSLAYER_H