diff -r f5050f1da672 -r 04becd199f91 javacommons/utils/inc/javaoslayer.h --- /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 +#include +#include +#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. + *

+ * 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& odcFiles, + std::list& 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& 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& 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& entries, + std::list& odcFiles, + std::list& 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& romEntries, + const std::vector& iadEntries, + std::vector& 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