diff -r 7cee158cb8cd -r 26b2b12093af javaextensions/centralrepository/javasrc/com/nokia/mj/impl/cenrep/CentralRepositoryImpl.java --- a/javaextensions/centralrepository/javasrc/com/nokia/mj/impl/cenrep/CentralRepositoryImpl.java Wed Sep 15 12:05:25 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,354 +0,0 @@ -/* -* Copyright (c) 2010 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: -* -*/ - -package com.nokia.mj.impl.cenrep; - -import com.nokia.mid.cenrep.CentralRepository; -import com.nokia.mid.cenrep.CentralRepositoryException; -import com.nokia.mj.impl.gcf.utils.NativeError; -import com.nokia.mj.impl.rt.support.ApplicationInfo; -import com.nokia.mj.impl.utils.Logger; -import com.nokia.mj.impl.rt.support.Finalizer; -import com.nokia.mj.impl.rt.support.Jvm; - -/** - * CentralRepositoryImpl implements the functionality specified in - * com.nokia.mid.cenrep.CentralRepository class. - */ -public class CentralRepositoryImpl extends CentralRepository -{ - - static - { - try - { - Jvm.loadSystemLibrary("javacentrep"); - } - catch (Exception e) - { - Logger.ELOG(Logger.EJavaCentrep, - "Unable to load javacentrep dll."); - } - } - - private static final int INITIAL = 0; - - private static final int OPEN = 1; - - private static final int CLOSED = 2; - - /* - * Central Repository API Function server. - */ - private int iFunctionSourceHandle; - - /** - * Handle to the native side peer object. - */ - private int iCenrepHandle = 0; - - /** - * Repository ID - */ - private String iRepositoryId = null; - - private Finalizer iFinalizer; - - private int iState; - - /** - * Hidden default constructor. - */ - private CentralRepositoryImpl() - { - } - - /** - * Hidden constructor. - * - * @param repositoryId it is platform specific and in S60 it is - * Symbian Central Repository UID. - */ - private CentralRepositoryImpl(String repositoryId) - throws CentralRepositoryException - { - checkAccess(); - iState = INITIAL; - int cenrepUid = CentralRepositoryUid.getIntValue(repositoryId); - this.iRepositoryId = repositoryId; - iFinalizer = registerFinalize(); - - iFunctionSourceHandle = _createFunctionSource(); - iCenrepHandle = _createNativePeer(iFunctionSourceHandle, cenrepUid); - iState = OPEN; - } - - /** - * See class CentralRepository for comments. - */ - static public CentralRepository open(String repositoryId) - throws CentralRepositoryException - { - return new CentralRepositoryImpl(repositoryId); - } - - /** - * See class CentralRepository for comments. - */ - public void close() throws CentralRepositoryException - { - synchronized (this) - { - - if (iState != CLOSED) - { - iState = CLOSED; - _close(iFunctionSourceHandle, iCenrepHandle); - _dispose(iFunctionSourceHandle, iCenrepHandle); - } - iRepositoryId = null; - } - } - - /** - * See class CentralRepository for comments. - */ - public String getString(String key) - throws CentralRepositoryException - { - synchronized (this) - { - - if (iState == CLOSED) - { - throw new CentralRepositoryException("Connection Already Closed"); - } - long cenrepKey = CentralRepositoryKey.getLongValue(key); - String value = _getString(iFunctionSourceHandle, iCenrepHandle, cenrepKey); - return value; - } - } - - /** - * See class CentralRepository for comments. - */ - public int getInt(String key) - throws CentralRepositoryException - { - synchronized (this) - { - - if (iState == CLOSED) - { - throw new CentralRepositoryException("Connection Already Closed"); - } - long cenrepKey = CentralRepositoryKey.getLongValue(key); - int res = _getInt(iFunctionSourceHandle, iCenrepHandle, cenrepKey); - return res; - } - } - - /** - * See class CentralRepository for comments. - */ - public void setString(String key, String value) - throws CentralRepositoryException - { - synchronized (this) - { - - if (iState == CLOSED) - { - throw new CentralRepositoryException("Connection Already Closed"); - } - long cenrepKey = CentralRepositoryKey.getLongValue(key); - if (value == null) - { - throw new CentralRepositoryException("Value is null"); - } - _setString(iFunctionSourceHandle, iCenrepHandle, cenrepKey, value); - } - } - - /** - * See class CentralRepository for comments. - */ - public void setInt(String key, int value) - throws CentralRepositoryException - { - synchronized (this) - { - - if (iState == CLOSED) - { - throw new CentralRepositoryException("Connection Already Closed"); - } - long cenrepKey = CentralRepositoryKey.getLongValue(key); - _setInt(iFunctionSourceHandle, iCenrepHandle, cenrepKey, value); - } - } - - /** - * Registers with Finalizer to call a method when the object gets collected - * by GC - * - * @return Finalizer object that will be notified when GC happens - */ - private Finalizer registerFinalize() - { - return new Finalizer() - { - public void finalizeImpl() - { - registeredFinalize(); - } - }; - } - - /** - * Called when the object is finalized by the garbage collector. - */ - final void registeredFinalize() - { - try - { - close(); - } - catch (CentralRepositoryException e) - { - // Ignore - } - } - - /** - * Creates a native side function source. - * - * @return handle to the native function source. - */ - private native int _createFunctionSource(); - - /** - * Create native side peer of this Java class. It opens a repository. - * - * @param FunctionSource Handle handle to the native function source. - * @param arepositoryId is platform specific and in S60 it is - * Symbian Central Repository UID. - * @return handle to the native side peer. - * @return Symbian OS error code, if openning fails. - */ - private native int _createNativePeer( - int aFunctionSourceHandle, - int repositoryId); - - /** - * Closes a repository. - * - * @param FunctionSourceHandle handle to the native function source. - * @param cenrepHandle handle to the native side peer object. - * @return Symbian OS error code, if closing fails. - */ - private native void _close(int aFunctionSourceHandle, int cenrepHandle); - - /** - * Dispose native side resources owned by this class. - * - * @param FunctionSourceHandle handle to the native function source. - * @param cenrepHandle handle to the native side peer object. - */ - private native void _dispose(int aFunctionSourceHandle, int cenrepHandle); - - /** - * Returns string stored in given key. - * - * @param FunctionSourceHandle handle to the native function source. - * @param cenrepHandle handle to the native side peer object. - * @param key the key of setting to be read. - * @param value returns the value of the setting if it is the string. - * @return Symbian OS error code, if key is not found or - * stored data is not string. - */ - private native String _getString( - int aFunctionSourceHandle, - int cenrepHandle, - long key); - - /** - * Returns integer stored in given key. - * - * @param FunctionSourceHandle handle to the native function source. - * @param cenrepHandle handle to the native side peer object. - * @param key the key of setting to be read. - * @param value the value of the setting if it is an integer. - * @return Symbian OS error code, if key is not found or - * stored data is not integer. - */ - private native int _getInt( - int aFunctionSourceHandle, - int cenrepHandle, - long key); - - /** Stores string value in key. - * - * @param FunctionSourceHandle handle to the native function source. - * @param cenrepHandle handle to the native side peer object. - * @param key the key of setting to be stored. - * @param value the string value of the setting to be stored. - * @return Symbian OS error code, if string value cannot be stored. - */ - private native void _setString( - int aFunctionSourceHandle, - int cenrepHandle, - long key, - String value); - - /** Stores integer value in key. - * - * @param FunctionSourceHandle handle to the native function source. - * @param cenrepHandle handle to the native side peer object. - * @param key the key of setting to be stored. - * @param value the integer value of the setting to be stored. - * @return Symbian OS error code, if integer value cannot be stored. - */ - private native void _setInt( - int aFunctionSourceHandle, - int cenrepHandle, - long key, - int value); - - - /** - * Checks if MIDlet is permited to access the central repository. - * Only MIDlets in manufacturer or operator domain are allowed. - * @throws CentralRepositoryException if MIDlet is not in manufacturer or - * operator domain. - */ - private void checkAccess() - throws SecurityException - { - - ApplicationInfo appInfo = ApplicationInfo.getInstance(); - String protectionDomain = appInfo.getProtectionDomain(); - - if (protectionDomain.equals(ApplicationInfo.MANUFACTURER_DOMAIN) == false && - protectionDomain.equals(ApplicationInfo.OPERATOR_DOMAIN) == false) - { - Logger.ELOG(Logger.EJavaCentrep, "Protection Domain: " + protectionDomain + - ", Access denied"); - throw new SecurityException("Access denied!"); - } - } -}