javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/NativeError.java
changeset 80 d6dafc5d983f
parent 56 abc41079b313
child 87 1627c337e51e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/NativeError.java	Fri Oct 15 12:29:39 2010 +0300
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2002-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: Native Error Descriptions for M2G Component.
+*
+*/
+
+
+package com.nokia.microedition.m2g;
+
+import java.io.IOException;
+
+/**
+ * A utility class for declaring and handling native SymbianOS error codes.
+ * All error codes that are used in Java from native code should be
+ * declared here and referenced from this class. Also if a new error code
+ * is added, it should be added to the list of compile-time asserts in
+ * NativeError.cpp.
+ */
+public final class NativeError
+{
+    public static final String NATIVE_ERROR_MESSAGE = "SymbianOS error = ";
+    private static final int BUFFER_SIZE = 256;
+
+    // SymbianOS error codes
+    public static final int KErrNone = 0;
+    public static final int KErrNotFound = -1;
+    public static final int KErrGeneral = -2;
+    public static final int KErrCancel = -3;
+    public static final int KErrNoMemory = -4;
+    public static final int KErrNotSupported = -5;
+    public static final int KErrArgument = -6;
+    public static final int KErrOverflow = -9;
+    public static final int KErrAlreadyExists = -11;
+    public static final int KErrPathNotFound = -12;
+    public static final int KErrDied = -13;
+    public static final int KErrNotReady = -18;
+    public static final int KErrCorrupt = -20;
+    public static final int KErrAccessDenied = -21;
+    public static final int KErrWrite = -23;
+    public static final int KErrEof = -25;
+    public static final int KErrDiskFull = -26;
+    public static final int KErrBadName = -28;
+    public static final int KErrCommsLineFail = -29;
+    public static final int KErrTimedOut = -33;
+    public static final int KErrDisconnected = -36;
+    public static final int KErrTooBig = -40;
+    public static final int KErrDivideByZero = -41;
+    public static final int KErrHardwareNotAvailable = -44;
+
+
+    // Not intended to be constructed
+    private NativeError()
+    {
+    }
+
+
+
+    /**
+     * Checks for basic native error codes that map to standard Java
+     * exceptions and throws the exception if the error code matches.
+     * Otherwise just returns the error.
+     *
+     * @param aError Possible error code.
+     * @return Value passed in is returned if not an error.
+     * @throws OutOfMemoryError If aError equals KErrNoMemory.
+     * @throws IllegalArgumentException If aError equals KErrArgument
+     * @throws ArithmeticException If aError equals KErrDivideByZero
+     */
+    public static int checkExplicitOnly(int aError)
+    {
+        if (aError < KErrNone)
+        {
+            switch (aError)
+            {
+            case KErrNoMemory:
+                throw new OutOfMemoryError();
+                // KErrArgument must throw IllegalArgumentException
+                // otherwise lcdui will break, so don't change this.
+            case KErrArgument:
+                throw new IllegalArgumentException();
+            case KErrDivideByZero:
+                throw new ArithmeticException();
+            default:
+                // Do nothing
+            }
+        }
+        return aError;
+    }
+
+
+
+    /**
+     * Checks for basic native error codes that map to standard Java
+     * exceptions and throws the exception if the error code matches.
+     * Otherwise throws basic Error class.
+     *
+     * @param aError Possible error code.
+     * @param aThrowAlways Determines whether a default exception is thrown
+     * if the error code is not recognised.
+     * @return Value passed in is returned if not an error.
+     * @throws Error If the error code does not match any exception thrown
+     * in checkExplicitOnly, a default exception is thrown here.
+     */
+    public static int check(int aError)
+    {
+        if (aError < KErrNone)
+        {
+            checkExplicitOnly(aError);
+            throw new Error(errorMessage(aError));
+        }
+        return aError;
+    }
+
+
+
+    /**
+     * Version of check that uses a long rather than an int.
+     */
+    public static long check(long aError)
+    {
+        check((int)aError);
+        return aError;
+    }
+
+
+
+    /**
+     * Checks for basic native error codes that map to standard Java
+     * exceptions and throws the exception if the error code matches.
+     * Otherwise throws an IOException.
+     *
+     * @param aError Possible error code.
+     * @return Value passed in is returned if not an error.
+     */
+    public static int checkIO(int aError)
+    throws IOException
+    {
+        if (aError < KErrNone)
+        {
+            checkExplicitOnly(aError);
+            throw new IOException(errorMessage(aError));
+        }
+        return aError;
+    }
+
+
+
+    /**
+     * Checks if the error code represents out of memory, and throws Java Error
+     * if true. Otherwise throws basic Error class.
+     *
+     * @param aError Possible error code.
+     * @return Value passed in is returned if not an error.
+     */
+    public static int checkOOM(int aError)
+    {
+        if (aError < KErrNone)
+        {
+            if (aError == KErrNoMemory)
+            {
+                throw new OutOfMemoryError();
+            }
+            throw new Error(errorMessage(aError));
+        }
+        return aError;
+    }
+
+
+
+    /**
+     * Checks if the object is a null reference, and throws OutOfMemoryError
+     * if this is the case. Useful for checking for OOM when Java objects
+     * returned from a native method.
+     *
+     * @param aObject Object that may be null.
+     * @return Value passed in is returned if not an error.
+     */
+    public static Object checkOOM(Object aObject)
+    {
+        if (aObject == null)
+        {
+            throw new OutOfMemoryError();
+        }
+        return aObject;
+    }
+
+
+
+    /**
+     * Checks if the error code represents out of memory, and throws Java Error
+     * if true. Does not throw anything otherwise.
+     *
+     * @param aError Possible error code.
+     * @return Value passed in is returned if not an out of memory error.
+     */
+    public static int checkOOMOnly(int aError)
+    {
+        if (aError == KErrNoMemory)
+        {
+            throw new OutOfMemoryError();
+        }
+        return aError;
+    }
+
+
+
+    /**
+     * Returns a string formatted with generic text to indicate where the error
+     * code comes from and the error code given.
+     *
+     * @param A native error code.
+     * @return A string containing the error code and explanatory text.
+     */
+    public static String errorMessage(int aError)
+    {
+        final String message = _getNativeErrorMessage(aError);
+        String result = NATIVE_ERROR_MESSAGE.concat(Integer.toString(aError));
+        if (message != null &&  message.length() > 0)
+            result = result.concat(" : ").concat(message);
+        return result;
+    }
+
+    /**
+     * Returns a string formatted with generic text to indicate where the error
+     * code comes from and the error code given.
+     *
+     * @param A native error code.
+     * @param An extra text message for more information.
+     * @return A string containing the error code and explanatory text.
+     */
+    public static String errorMessage(int aError, String aExtraText)
+    {
+        final StringBuffer messageBuf = new StringBuffer(BUFFER_SIZE);   // use native max as base
+        messageBuf.append(aExtraText);
+        messageBuf.append(", ");
+        messageBuf.append(errorMessage(aError));
+        return messageBuf.toString();
+    }
+
+
+    private static native String _getNativeErrorMessage(int aError);
+
+}
+
+