/*
*
*
* Portions Copyright 2000-2009 Sun Microsystems, Inc. All Rights
* Reserved. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
/*
* (c) Copyright 2001, 2002 Motorola, Inc. ALL RIGHTS RESERVED.
*/
package javax.bluetooth;
import com.sun.jsr082.bluetooth.LocalDeviceImpl;
import javax.microedition.io.Connection;
/*
* This class is defined by the JSR-82 specification
* <em>Java™ APIs for Bluetooth™ Wireless Technology,
* Version 1.1.</em>
*/
// JAVADOC COMMENT ELIDED
public class LocalDevice {
/* Keeps this singleton object. */
private static LocalDevice localDevice;
static {
try {
localDevice = getLocalDevice();
} catch (BluetoothStateException e) {
throw new RuntimeException(e.getMessage());
}
}
/* Keeps the reference to implementation object. */
private static LocalDeviceImpl localDeviceImpl;
/*
* Keeps the discovery agen reference -
* because the DiscoveryAgent.<init> is package private,
* so it can't be created ffrom the implemetation.
*/
private DiscoveryAgent discoveryAgent;
/*
* The default constructor is hidden so that no one can create a new
* instance of the LocalDevice. To get the LocalDevice
* object for this device, use the <code>getLocalDevice()</code>
* static method in this class.
*
* @see #getLocalDevice
*/
private LocalDevice() {}
// JAVADOC COMMENT ELIDED
public static LocalDevice getLocalDevice() throws BluetoothStateException {
/*
* The method is not declared as synchronized to keep
* its signature unchanged.
*/
synchronized (LocalDevice.class) {
if (localDevice == null) {
try {
// create a shared impl object and 'this'
localDevice = new LocalDevice();
/*
* create a DiscoveryAgent from here.
* This should be done one time only
* regardless whether or not the system is
* initialized for the first time.
*
* We suppose the getLocalDevice() may be called
* for the next time if the first try failed.
*/
if (localDevice.discoveryAgent == null) {
localDevice.discoveryAgent = new DiscoveryAgent();
}
/*
* Constructing LocaldeviceImpl causes initialization
* of device properties and attributes.
*/
localDeviceImpl = LocalDeviceImpl.getInstance();
} catch (BluetoothStateException bse) {
localDevice = null;
throw bse;
} catch (Throwable e) {
localDevice = null;
throw new BluetoothStateException(e.toString());
}
}
}
return localDevice;
}
// JAVADOC COMMENT ELIDED
public DiscoveryAgent getDiscoveryAgent() {
/*
* This is an only exception for the "API/IMPL wrapper"
* scheme, i.e. the DiscoveryAgent object is stored
* locally in this class.
*/
return discoveryAgent;
}
// JAVADOC COMMENT ELIDED
public String getFriendlyName() {
return localDeviceImpl.getFriendlyName();
}
// JAVADOC COMMENT ELIDED
public DeviceClass getDeviceClass() {
return localDeviceImpl.getDeviceClass();
}
// JAVADOC COMMENT ELIDED
public static String getProperty(String property) {
return localDevice != null ? localDeviceImpl.getProperty(property) :
null;
}
// JAVADOC COMMENT ELIDED
public int getDiscoverable() {
return localDeviceImpl.getDiscoverable();
}
// JAVADOC COMMENT ELIDED
public String getBluetoothAddress() {
return localDeviceImpl.getBluetoothAddress();
}
// JAVADOC COMMENT ELIDED
public boolean setDiscoverable(int mode) throws BluetoothStateException {
return localDeviceImpl.setDiscoverable(mode);
}
// JAVADOC COMMENT ELIDED
public ServiceRecord getRecord(Connection notifier) {
return localDeviceImpl.getRecord(notifier);
}
// JAVADOC COMMENT ELIDED
public void updateRecord(ServiceRecord srvRecord)
throws ServiceRegistrationException {
localDeviceImpl.updateRecord(srvRecord);
}
// JAVADOC COMMENT ELIDED
public static boolean isPowerOn() {
return localDeviceImpl.isPowerOn();
}
} // end of class 'LocalDevice' definition