/**
* ConnectionTestsScreen.java
*
* Copyright � 1998-2011 Research In Motion Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Note: For the sake of simplicity, this sample application may not leverage
* resource bundles and resource strings. However, it is STRONGLY recommended
* that application developers make use of the localization features available
* within the BlackBerry development platform to ensure a seamless application
* experience across a variety of languages and geographies. For more information
* on localizing your application, please refer to the BlackBerry Java Development
* Environment Development Guide associated with this release.
*/
package com.rim.samples.device.networkapidemo;
import net.rim.device.api.io.transport.ConnectionAttemptListener;
import net.rim.device.api.io.transport.ConnectionDescriptor;
import net.rim.device.api.io.transport.ConnectionFactory;
import net.rim.device.api.io.transport.TransportDescriptor;
import net.rim.device.api.io.transport.TransportInfo;
import net.rim.device.api.io.transport.options.BisBOptions;
import net.rim.device.api.io.transport.options.TcpCellularOptions;
import net.rim.device.api.io.transport.options.WapOptions;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BasicEditField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.CheckboxField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.EditField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ObjectChoiceField;
import net.rim.device.api.ui.component.SeparatorField;
import net.rim.device.api.ui.component.Status;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.util.IntVector;
/**
* A screen showing all options allowed to open a connection using the Network
* API. Clicking the "Connect" button with no options specified triggers the
* Network API to obtain a connection through the first available transport. If
* connection is not possible through one transport, the next transport is tried
* and so on until success or failure occurs. Clicking the "Show Options" button
* shows all available connection options.
*/
public final class ConnectionTestsScreen extends MainScreen implements
FieldChangeListener, ConnectionAttemptListener {
// Edit box to enter URL
private final BasicEditField _urlEditField;
// Manager containing option fields
private final VerticalFieldManager _optionFieldsManager;
// "Show Options" button that shows or hides connection options when clicked
private final ButtonField _optionsBtn;
// Connection options
private final LabelField _labelConnectionOpt;
// Connection mode: "READ" or "WRITE" or "READ/WRITE"
private final ObjectChoiceField _connectionMode;
// Enables connection timeout option when checked
private final CheckboxField _timeoutSupported;
// Specifies connection timeout in milliseconds
private final BasicEditField _connectionTimeout;
// Enables "tls/ssl" end to end connection options
private final CheckboxField _endToEndRequired;
private final CheckboxField _endToEndDesired;
// Retries options
private final LabelField _labelRetriesOpt;
// Specifies how long ConnectionFactory should try to establish a connection
private final BasicEditField _timeLimit;
// Specifies how many times ConnectionFactory should try to establish a
// connection
private final BasicEditField _attemptsLimit;
// Specifies retry factor @see ConnectionFactory.setRetryFactor()
private final BasicEditField _retryFactor;
// Transport options
// Enables transport selection and order when checked
private final CheckboxField _transportSelection;
// Transport selection types: "none", "TCP Cellular", "Wap", "Wap2", "Mds",
// "Bis B", "TCP Wifi"
private final ObjectChoiceField _order1;
private final ObjectChoiceField _order2;
private final ObjectChoiceField _order3;
private final ObjectChoiceField _order4;
private final ObjectChoiceField _order5;
private final ObjectChoiceField _order6;
private final LabelField _labelDisallowedTrasnports;
// Enables or disables specific transport types
private final CheckboxField _disallowDirectTCP;
private final CheckboxField _disallowWap;
private final CheckboxField _disallowWap2;
private final CheckboxField _disallowMds;
private final CheckboxField _disallowBisB;
private final CheckboxField _disallowWifi;
// TCP Cellular options
private final LabelField _labelTcpCellular;
// Edit boxes to enter APN settings if different from Options>Advanced
// Options>TCP/IP
private final EditField _tcpApn;
private final EditField _tcpApnUser;
private final EditField _tcpApnPassword;
// Wap options
private final LabelField _labelWap;
// Edit boxes to enter WAP settings if different from Options>Advanced
// Options>Service Book
private final EditField _wapGatewayApn;
private final EditField _wapGatewayIp;
private final EditField _wapGatewayPort;
private final EditField _wapSourceIp;
private final EditField _wapSourcePort;
private final EditField _wapUser;
private final EditField _wapPassword;
private final CheckboxField _wapEnableWTLS;
// BisB options
private final LabelField _labelBisB;
private final EditField _bisBConnectionType;
private boolean _optionsHidden;
private final UiApplication _uiApp;
/**
* Creates a new ConnectionTestsScreen object
*/
public ConnectionTestsScreen() {
setTitle("Connection Tests");
// Display URL label and edit box on top of the screen
_urlEditField =
new BasicEditField("URL: ", "http://www.blackberry.com", 128,
BasicEditField.FILTER_URL);
add(_urlEditField);
// Display "Connect" button that triggers connection to be established
// with the specified URL.
final ButtonField connectBtn =
new ButtonField("Connect", Field.FIELD_HCENTER
| ButtonField.CONSUME_CLICK);
connectBtn.setChangeListener(this);
// Display "Show Options" button that displays connection options when
// clicked
_optionsBtn =
new ButtonField("Show Options", Field.FIELD_HCENTER
| ButtonField.CONSUME_CLICK);
_optionsBtn.setChangeListener(this);
_optionsHidden = true;
add(new SeparatorField());
// Region to layout "Connect" and "Show Options" buttons side by side
final HorizontalFieldManager hfmBtns =
new HorizontalFieldManager(Field.FIELD_HCENTER);
hfmBtns.add(connectBtn);
hfmBtns.add(_optionsBtn);
add(hfmBtns);
add(new SeparatorField());
_labelConnectionOpt = new LabelField("Connection Settings [optional]");
// Connection mode
final String[] connectionModes = { "READ", "WRITE", "READ/WRITE" };
_connectionMode =
new ObjectChoiceField(" Connection Mode: ", connectionModes, 2);
// Connection timeout
_timeoutSupported = new CheckboxField(" Support timeouts", false);
_connectionTimeout =
new BasicEditField("Connection timeout: ", "", 6,
BasicEditField.FILTER_INTEGER);
// Connection security settings for tls/ssl
_endToEndRequired =
new CheckboxField(" tls/ssl end to end required", false);
_endToEndDesired =
new CheckboxField(" tls/ssl end to end desired", false);
// Connection retry options
_labelRetriesOpt = new LabelField("Retry options [optional]");
_timeLimit =
new BasicEditField(" Time Limit for Connections: ", "0", 6,
BasicEditField.FILTER_INTEGER);
_attemptsLimit =
new BasicEditField(" Attempts Limit: ", "0", 4,
BasicEditField.FILTER_INTEGER);
_retryFactor =
new BasicEditField(" Retry Factor: ", "0", 6,
BasicEditField.FILTER_INTEGER);
// Transport selection
final String[] transportNames =
{ "none", "TCP Cellular", "Wap", "Wap2", "Mds", "Bis B",
"TCP Wifi" };
// Preferred transport types option
_transportSelection =
new CheckboxField("Preferred Transport Types [Optional]", false);
_transportSelection.setChangeListener(new FieldChangeListener() {
public void fieldChanged(final Field field, final int context) {
if (_transportSelection.getChecked()) {
// Transport selection check box is checked. Enable drop
// downs for choosing the preferred transport.
_order1.setEditable(true);
_order2.setEditable(true);
_order3.setEditable(true);
_order4.setEditable(true);
_order5.setEditable(true);
_order6.setEditable(true);
} else {
// Transport selection check box is not checked. Disable
// drop
// downs for choosing the preferred transport and set them
// to
// "none".
_order1.setSelectedIndex(0);
_order1.setEditable(false);
_order2.setSelectedIndex(0);
_order2.setEditable(false);
_order3.setSelectedIndex(0);
_order3.setEditable(false);
_order4.setSelectedIndex(0);
_order4.setEditable(false);
_order5.setSelectedIndex(0);
_order5.setEditable(false);
_order6.setSelectedIndex(0);
_order6.setEditable(false);
}
}
});
// Initialize preferred transport types option.
// By default disable the options.
_order1 = new ObjectChoiceField("First:", transportNames);
_order1.setEditable(false);
_order2 = new ObjectChoiceField("Second:", transportNames);
_order2.setEditable(false);
_order3 = new ObjectChoiceField("Third:", transportNames);
_order3.setEditable(false);
_order4 = new ObjectChoiceField("Forth:", transportNames);
_order4.setEditable(false);
_order5 = new ObjectChoiceField("Fifth:", transportNames);
_order5.setEditable(false);
_order6 = new ObjectChoiceField("Sixth:", transportNames);
_order6.setEditable(false);
// Initialize disallowed transport types check boxes
_labelDisallowedTrasnports =
new LabelField("Disallowed Transport Types [optional]:");
_disallowDirectTCP = new CheckboxField("TCP Cellular", false);
_disallowWap = new CheckboxField("Wap", false);
_disallowWap2 = new CheckboxField("Wap2", false);
_disallowMds = new CheckboxField("Mds", false);
_disallowBisB = new CheckboxField("Bis B", false);
_disallowWifi = new CheckboxField("TCP Wifi", false);
// Initialize TCP Cellular transport options
_labelTcpCellular = new LabelField("TCP Cellular Options [optional]:");
_tcpApn = new EditField(" APN: ", "");
_tcpApnUser = new EditField(" Username: ", "");
_tcpApnPassword = new EditField(" Password: ", "");
// Initialize WAP transport options
_labelWap = new LabelField("WAP Options [optional]:");
_wapGatewayApn = new EditField(" Gateway APN: ", "");
_wapGatewayIp = new EditField(" Gateway IP: ", "");
_wapGatewayPort = new EditField(" Gateway Port: ", "");
_wapSourceIp = new EditField(" Source IP: ", "");
_wapSourcePort = new EditField(" Source Port: ", "");
_wapUser = new EditField(" Username: ", "");
_wapPassword = new EditField(" Password: ", "");
_wapEnableWTLS = new CheckboxField(" Enable WTLS", false);
// Initialize BisB transport options
_labelBisB = new LabelField("BisB Options [mandatory for BisB]");
_bisBConnectionType = new EditField(" Connection Type: ", "");
// Add options to a VerticalFieldManager
_optionFieldsManager = new VerticalFieldManager();
_optionFieldsManager.add(_labelConnectionOpt);
_optionFieldsManager.add(_connectionMode);
_optionFieldsManager.add(_timeoutSupported);
_optionFieldsManager.add(_endToEndRequired);
_optionFieldsManager.add(_endToEndDesired);
_optionFieldsManager.add(_connectionTimeout);
_optionFieldsManager.add(new SeparatorField());
_optionFieldsManager.add(_labelRetriesOpt);
_optionFieldsManager.add(_timeLimit);
_optionFieldsManager.add(_attemptsLimit);
_optionFieldsManager.add(_retryFactor);
_optionFieldsManager.add(new SeparatorField());
_optionFieldsManager.add(_transportSelection);
_optionFieldsManager.add(_order1);
_optionFieldsManager.add(_order2);
_optionFieldsManager.add(_order3);
_optionFieldsManager.add(_order4);
_optionFieldsManager.add(_order5);
_optionFieldsManager.add(_order6);
_optionFieldsManager.add(new SeparatorField());
_optionFieldsManager.add(_labelDisallowedTrasnports);
_optionFieldsManager.add(_disallowDirectTCP);
_optionFieldsManager.add(_disallowWap);
_optionFieldsManager.add(_disallowWap2);
_optionFieldsManager.add(_disallowMds);
_optionFieldsManager.add(_disallowBisB);
_optionFieldsManager.add(_disallowWifi);
_optionFieldsManager.add(new SeparatorField());
_optionFieldsManager.add(_labelTcpCellular);
_optionFieldsManager.add(_tcpApn);
_optionFieldsManager.add(_tcpApnUser);
_optionFieldsManager.add(_tcpApnPassword);
_optionFieldsManager.add(new SeparatorField());
_optionFieldsManager.add(_labelWap);
_optionFieldsManager.add(_wapGatewayApn);
_optionFieldsManager.add(_wapGatewayIp);
_optionFieldsManager.add(_wapGatewayPort);
_optionFieldsManager.add(_wapUser);
_optionFieldsManager.add(_wapPassword);
_optionFieldsManager.add(_wapSourceIp);
_optionFieldsManager.add(_wapSourcePort);
_optionFieldsManager.add(_wapEnableWTLS);
_optionFieldsManager.add(new SeparatorField());
_optionFieldsManager.add(_labelBisB);
_optionFieldsManager.add(_bisBConnectionType);
_uiApp = UiApplication.getUiApplication();
}
/**
* @see MainScreen#onSavePrompt()
*/
public boolean onSavePrompt() {
// Prevents the save dialog from being displayed
return true;
}
/**
* @see FieldChangeListener#fieldChanged(Field, int)
*/
public void fieldChanged(final Field field, final int context) {
if (field == _optionsBtn) {
// Shows or hides connection options
toggleOptions();
return;
}
// Try to get connection
final String url = _urlEditField.getText().trim();
if ("".equals(url)) {
// URL is empty, display a warning
displayMessage("Please provide a URL");
return;
}
// Create ConnectionFactory
final ConnectionFactory factory = new ConnectionFactory();
// Register as listener
factory.setConnectionAttemptListener(this);
// Set connection mode
switch (_connectionMode.getSelectedIndex()) {
case 0:
factory.setConnectionMode(ConnectionFactory.ACCESS_READ);
break;
case 1:
factory.setConnectionMode(ConnectionFactory.ACCESS_WRITE);
break;
case 2:
factory.setConnectionMode(ConnectionFactory.ACCESS_READ_WRITE);
break;
}
// Set connection timeout
factory.setTimeoutSupported(_timeoutSupported.getChecked());
factory.setEndToEndDesired(_endToEndDesired.getChecked());
factory.setEndToEndRequired(_endToEndRequired.getChecked());
try {
final String connectionTimeoutText = _connectionTimeout.getText();
if (connectionTimeoutText != null
&& connectionTimeoutText.trim().length() > 0) {
// Parse connection timeout text into long
final long connectionTimeout =
Long.parseLong(connectionTimeoutText);
if (connectionTimeout >= 0) {
// Set connection timeout value
factory.setConnectionTimeout(connectionTimeout);
}
}
} catch (final NumberFormatException nfe) {
displayMessage("Long.parseLong(String) threw : " + nfe.toString());
}
// Set connection security settings for tls/ssl
factory.setEndToEndDesired(_endToEndDesired.getChecked());
factory.setEndToEndRequired(_endToEndRequired.getChecked());
// Set time limit
final long timeLimit = Long.parseLong(_timeLimit.getText());
if (timeLimit > 0) {
factory.setTimeLimit(timeLimit);
}
// Set attempts limit
final int attemptsLimit = Integer.parseInt(_attemptsLimit.getText());
if (attemptsLimit > 0) {
factory.setAttemptsLimit(attemptsLimit);
}
// Set retry factor
final long retryFactor = Long.parseLong(_retryFactor.getText());
if (retryFactor > 0) {
factory.setRetryFactor(retryFactor);
}
// Set TCP Cellular options
if (_tcpApn.getText().trim().length() != 0
|| _tcpApnUser.getText().trim().length() != 0
|| _tcpApnPassword.getText().trim().length() != 0) {
final TcpCellularOptions tcpOptions = new TcpCellularOptions();
tcpOptions.setApn(_tcpApn.getText().trim());
tcpOptions.setTunnelAuthUsername(_tcpApnUser.getText().trim());
tcpOptions.setTunnelAuthPassword(_tcpApnPassword.getText().trim());
factory.setTransportTypeOptions(
TransportInfo.TRANSPORT_TCP_CELLULAR, tcpOptions);
}
// Set WAP Options
if (!_wapGatewayApn.getText().trim().equals("")
|| !_wapGatewayIp.getText().trim().equals("")
|| !_wapGatewayPort.getText().trim().equals("")
|| !_wapSourceIp.getText().trim().equals("")
|| !_wapSourcePort.getText().trim().equals("")
|| !_wapUser.getText().trim().equals("")
|| !_wapPassword.getText().trim().equals("")
|| _wapEnableWTLS.getChecked()) {
final WapOptions wapOptions = new WapOptions();
wapOptions.setWapGatewayApn(_wapGatewayApn.getText().trim());
wapOptions.setWapGatewayIp(_wapGatewayIp.getText().trim());
wapOptions.setWapGatewayPort(_wapGatewayPort.getText().trim());
wapOptions.setWapSourceIp(_wapSourceIp.getText().trim());
wapOptions.setWapSourcePort(_wapSourcePort.getText().trim());
wapOptions.setTunnelAuthUsername(_wapUser.getText().trim());
wapOptions.setTunnelAuthPassword(_wapPassword.getText().trim());
wapOptions.setWapEnableWTLS(_wapEnableWTLS.getChecked());
factory.setTransportTypeOptions(TransportInfo.TRANSPORT_WAP,
wapOptions);
}
// Set BisB options
factory.setTransportTypeOptions(TransportInfo.TRANSPORT_BIS_B,
new BisBOptions(_bisBConnectionType.getText().trim()));
// Get preferred transports option
int[] preferredTransports = null;
if (_transportSelection.getChecked()) {
if (_order1.getSelectedIndex() == 0
&& _order2.getSelectedIndex() == 0
&& _order3.getSelectedIndex() == 0
&& _order4.getSelectedIndex() == 0
&& _order5.getSelectedIndex() == 0
&& _order6.getSelectedIndex() == 0) {
// Display a warning if none of the preferred transport is
// specified when "Preferred Transports" check box is checked
displayMessage("Please select at least one transport or uncheck \"Preferred Transports\"");
return;
}
// Get rid of the "none" elements
final IntVector transportIdsVector = new IntVector();
if (_order1.getSelectedIndex() != 0) {
transportIdsVector.addElement(_order1.getSelectedIndex());
}
if (_order2.getSelectedIndex() != 0) {
transportIdsVector.addElement(_order2.getSelectedIndex());
}
if (_order3.getSelectedIndex() != 0) {
transportIdsVector.addElement(_order3.getSelectedIndex());
}
if (_order4.getSelectedIndex() != 0) {
transportIdsVector.addElement(_order4.getSelectedIndex());
}
if (_order5.getSelectedIndex() != 0) {
transportIdsVector.addElement(_order5.getSelectedIndex());
}
if (_order6.getSelectedIndex() != 0) {
transportIdsVector.addElement(_order6.getSelectedIndex());
}
transportIdsVector.trimToSize();
preferredTransports = transportIdsVector.getArray();
}
// Process disallowed transports
final IntVector disallowedTransports = new IntVector();
if (_disallowDirectTCP.getChecked()) {
disallowedTransports
.addElement(TransportInfo.TRANSPORT_TCP_CELLULAR);
}
if (_disallowWap.getChecked()) {
disallowedTransports.addElement(TransportInfo.TRANSPORT_WAP);
}
if (_disallowWap2.getChecked()) {
disallowedTransports.addElement(TransportInfo.TRANSPORT_WAP2);
}
if (_disallowMds.getChecked()) {
disallowedTransports.addElement(TransportInfo.TRANSPORT_MDS);
}
if (_disallowBisB.getChecked()) {
disallowedTransports.addElement(TransportInfo.TRANSPORT_BIS_B);
}
if (_disallowWifi.getChecked()) {
disallowedTransports.addElement(TransportInfo.TRANSPORT_TCP_WIFI);
}
// Trim excess
disallowedTransports.trimToSize();
// Configure the factory if needed
if (disallowedTransports.size() > 0) {
factory.setDisallowedTransportTypes(disallowedTransports.getArray());
}
// Get the connection
Status.show("Attempting Connection...", 500);
final Thread t =
new Thread(new ConnectionDescriptorRetriever(url, factory,
preferredTransports));
t.start();
}
/**
* @see ConnectionAttemptListener#attemptFailed(TransportDescriptor, int,
* String, Exception)
*/
public void
attemptFailed(final TransportDescriptor transport,
final int attemptNumber, final String url,
final Exception exception) {
final StringBuffer sb = new StringBuffer();
// Prepare a connection failure message
sb.append("Failed attempting: ").append(
TransportInfo
.getTransportTypeName(transport.getTransportType()));
if (transport.getUid() != null) {
sb.append(": [").append(transport.getUid()).append(']');
}
sb.append("\n Attempt Number: ").append(attemptNumber);
sb.append("\n exception: ");
if (exception == null) {
sb.append("none");
} else if (exception.getMessage() != null) {
sb.append(exception.getMessage());
} else {
sb.append(exception.getClass().getName());
}
showStatus(sb.toString(), 2000);
}
/**
* @see ConnectionAttemptListener#attemptSucceeded(int,
* ConnectionDescriptor)
*/
public void attemptSucceeded(final int attemptNumber,
final ConnectionDescriptor connection) {
final TransportDescriptor transport =
connection.getTransportDescriptor();
final StringBuffer sb = new StringBuffer();
// Prepare a connection success message
sb.append("Sucess attempting: ").append(
TransportInfo
.getTransportTypeName(transport.getTransportType()));
if (transport.getUid() != null) {
sb.append(": [").append(transport.getUid()).append(']');
}
sb.append("\n Attempt Number: ").append(attemptNumber);
showStatus(sb.toString(), 2000);
}
/**
* @see ConnectionAttemptListener#attempting(TransportDescriptor, int,
* String)
*/
public boolean attempting(final TransportDescriptor transport,
final int attemptNumber, final String url) {
final StringBuffer sb = new StringBuffer();
// Prepare a connection attempting message
sb.append("Attempting: ").append(
TransportInfo
.getTransportTypeName(transport.getTransportType()));
if (transport.getUid() != null) {
sb.append(": [").append(transport.getUid()).append(']');
}
sb.append("\n Attempt Number: ").append(attemptNumber);
showStatus(sb.toString(), 2000);
return true;
}
/**
* @see ConnectionAttemptListener#attemptAborted(String, Exception)
*/
public void attemptAborted(final String url, final Exception exception) {
showStatus("Attempt Aborted: "
+ (exception != null ? exception.getMessage()
: "Reason Unkwown"), 2000);
}
/**
* Displays ConnectionDescriptor details or "Connection Failed" message
*
* @param conDescriptor
* The <code>ConnectionDescriptor</code>
*/
private void
conDescriptorRetrieved(final ConnectionDescriptor conDescriptor) {
_uiApp.invokeLater(new Runnable() {
public void run() {
if (conDescriptor != null) {
// Connection can be established. Display the result
// of a connection
displayConnectionDescriptor(conDescriptor);
} else {
// Connection can not be established. Display failure
// message.
displayMessage("Connection Failed");
}
}
});
}
/**
* A class to retrieve a ConnectionDescriptor
*/
private final class ConnectionDescriptorRetriever implements Runnable {
// URL provided by the user
final String _url;
// Factory that creates connections
final ConnectionFactory _factory;
// Preferred transports to use when opening a connection
final int[] _preferredTransports;
/**
* Creates a new ConnectionDescriptorRetriever object
*
* @param url
* The URL for this ConnectionDescriptorRetriever
* @param factory
* A ConnectionFactory used to retrieve a connection
* @param preferredTransports
* An array of preferred transport types
* @throws IllegalArgumentException
* if ConnectionFactory argument is null
*/
ConnectionDescriptorRetriever(final String url,
final ConnectionFactory factory, final int[] preferredTransports) {
if (factory == null) {
throw new IllegalArgumentException();
}
_url = url;
_factory = factory;
_preferredTransports = preferredTransports;
}
/**
* @see Runnable#run()
*/
public void run() {
ConnectionDescriptor conDescriptor = null;
if (_preferredTransports != null) {
// Set factory to use preferred transports
if (_preferredTransports.length > 1) {
_factory.setPreferredTransportTypes(_preferredTransports);
conDescriptor = _factory.getConnection(_url);
} else {
conDescriptor =
_factory.getConnection(_url,
_preferredTransports[0], null);
}
} else {
// Use default factory setting to try all transports until a
// successful connection is established .
conDescriptor = _factory.getConnection(_url);
}
// Consume the connection
conDescriptorRetrieved(conDescriptor);
}
}
/**
* Displays or hides connection options
*/
private void toggleOptions() {
if (_optionsHidden) {
// Update the button to "Hide Options"
_optionsBtn.setLabel("Hide Options");
// Show connection options
add(_optionFieldsManager);
_optionsHidden = false;
} else {
// Update the button to "Show Options"
_optionsBtn.setLabel("Show Options");
// Hide connection options
delete(_optionFieldsManager);
_optionsHidden = true;
}
}
/**
* Displays a message in a dialog
*
* @param msg
* The message to be displayed
*/
private void displayMessage(final String msg) {
_uiApp.invokeLater(new Runnable() {
/**
* @see Runnable#run()
*/
public void run() {
Dialog.alert(msg);
}
});
}
/**
* Shows status dialog for a specified time in milliseconds
*
* @param msg
* The message to be displayed
* @param time
* The time in milliseconds the dialog is displayed
*/
private void showStatus(final String msg, final int time) {
_uiApp.invokeAndWait(new Runnable() {
/**
* @see Runnable#run()
*/
public void run() {
Status.show(msg, time);
}
});
}
/**
* Displays a connection detail screen
*
* @param con
* The ConnectionDescriptor that describes the connection
*/
private void displayConnectionDescriptor(final ConnectionDescriptor con) {
_uiApp.pushScreen(new ConnectionDetailsScreen(con, _urlEditField
.getText()));
}
}