001: /*
002: *
003: *
004: * Portions Copyright 2000-2007 Sun Microsystems, Inc. All Rights
005: * Reserved. Use is subject to license terms.
006: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
007: *
008: * This program is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU General Public License version
010: * 2 only, as published by the Free Software Foundation.
011: *
012: * This program is distributed in the hope that it will be useful, but
013: * WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * General Public License version 2 for more details (a copy is
016: * included at /legal/license.txt).
017: *
018: * You should have received a copy of the GNU General Public License
019: * version 2 along with this work; if not, write to the Free Software
020: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
021: * 02110-1301 USA
022: *
023: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
024: * Clara, CA 95054 or visit www.sun.com if you need additional
025: * information or have any questions.
026: */
027:
028: /*
029: * (c) Copyright 2001, 2002 Motorola, Inc. ALL RIGHTS RESERVED.
030: */
031: package javax.bluetooth;
032:
033: import com.sun.kvem.jsr082.bluetooth.LocalDeviceImpl;
034: import javax.microedition.io.Connection;
035:
036: /**
037: * This class is defined by the JSR-82 specification
038: * <em>Java™ APIs for Bluetooth™ Wireless Technology,
039: * Version 1.1.</em>
040: */
041: // JAVADOC COMMENT ELIDED
042: public class LocalDevice {
043:
044: /** Keeps this singleton object. */
045: private static LocalDevice localDevice;
046:
047: static {
048: try {
049: localDevice = getLocalDevice();
050: } catch (BluetoothStateException e) {
051: throw new RuntimeException(e.getMessage());
052: }
053: }
054:
055: /** Keeps the reference to implementation object. */
056: private static LocalDeviceImpl localDeviceImpl;
057:
058: /**
059: * Keeps the discovery agen reference -
060: * because the DiscoveryAgent.<init> is package private,
061: * so it can't be created ffrom the implemetation.
062: */
063: private DiscoveryAgent discoveryAgent;
064:
065: /**
066: * The default constructor is hidden so that no one can create a new
067: * instance of the LocalDevice. To get the LocalDevice
068: * object for this device, use the <code>getLocalDevice()</code>
069: * static method in this class.
070: *
071: * @see #getLocalDevice
072: */
073: private LocalDevice() {
074: }
075:
076: // JAVADOC COMMENT ELIDED
077: public static LocalDevice getLocalDevice()
078: throws BluetoothStateException {
079:
080: /*
081: * The method is not declared as synchronized to keep
082: * its signature unchanged.
083: */
084: synchronized (LocalDevice.class) {
085: if (localDevice == null) {
086: try {
087: // create a shared impl object and 'this'
088: localDevice = new LocalDevice();
089:
090: /*
091: * create a DiscoveryAgent from here.
092: * This should be done one time only
093: * regardless whether or not the system is
094: * initialized for the first time.
095: *
096: * We suppose the getLocalDevice() may be called
097: * for the next time if the first try failed.
098: */
099: if (localDevice.discoveryAgent == null) {
100: localDevice.discoveryAgent = new DiscoveryAgent();
101: }
102:
103: /*
104: * Constructing LocaldeviceImpl causes initialization
105: * of device properties and attributes.
106: */
107: localDeviceImpl = LocalDeviceImpl.getInstance();
108: } catch (BluetoothStateException bse) {
109: localDevice = null;
110: throw bse;
111: } catch (Throwable e) {
112: localDevice = null;
113: throw new BluetoothStateException(e.toString());
114: }
115: }
116: }
117: return localDevice;
118: }
119:
120: // JAVADOC COMMENT ELIDED
121: public DiscoveryAgent getDiscoveryAgent() {
122:
123: /*
124: * This is an only exception for the "API/IMPL wrapper"
125: * scheme, i.e. the DiscoveryAgent object is stored
126: * locally in this class.
127: */
128: return discoveryAgent;
129: }
130:
131: // JAVADOC COMMENT ELIDED
132: public String getFriendlyName() {
133: return localDeviceImpl.getFriendlyName();
134: }
135:
136: // JAVADOC COMMENT ELIDED
137: public DeviceClass getDeviceClass() {
138: return localDeviceImpl.getDeviceClass();
139: }
140:
141: // JAVADOC COMMENT ELIDED
142: public static String getProperty(String property) {
143: return localDevice != null ? localDeviceImpl
144: .getProperty(property) : null;
145: }
146:
147: // JAVADOC COMMENT ELIDED
148: public int getDiscoverable() {
149: return localDeviceImpl.getDiscoverable();
150: }
151:
152: // JAVADOC COMMENT ELIDED
153: public String getBluetoothAddress() {
154: return localDeviceImpl.getBluetoothAddress();
155: }
156:
157: // JAVADOC COMMENT ELIDED
158: public boolean setDiscoverable(int mode)
159: throws BluetoothStateException {
160: return localDeviceImpl.setDiscoverable(mode);
161: }
162:
163: // JAVADOC COMMENT ELIDED
164: public ServiceRecord getRecord(Connection notifier) {
165: return localDeviceImpl.getRecord(notifier);
166: }
167:
168: // JAVADOC COMMENT ELIDED
169: public void updateRecord(ServiceRecord srvRecord)
170: throws ServiceRegistrationException {
171: localDeviceImpl.updateRecord(srvRecord);
172: }
173:
174: // JAVADOC COMMENT ELIDED
175: public static boolean isPowerOn() {
176: return localDeviceImpl.isPowerOn();
177: }
178:
179: } // end of class 'LocalDevice' definition
|