public static IStatus assignPort(
      IShellProvider shellProvider, IProgressMonitor monitor, BTTargetPhone phone) {
    try {
      monitor.beginTask("Scanning BT device for OBEX service", 1);
      monitor.setTaskName("Scanning BT device for OBEX service");
      int port = ServiceSearch.search(phone.getAddress());
      if (port != -1) {
        phone.assignPort(port);
      } else {
        return new Status(
            IStatus.ERROR,
            TargetPhonePlugin.PLUGIN_ID,
            "The device connected to has no OBEX service");
      }

      return Status.OK_STATUS;
    } catch (Exception e) {
      return new Status(
          IStatus.ERROR,
          TargetPhonePlugin.PLUGIN_ID,
          "The device connected to has no OBEX service",
          e);
    } finally {
      monitor.worked(1);
    }
  }
  @Override
  public boolean store(ITargetPhone aPhone, IMemento memento) {
    if (aPhone instanceof BTTargetPhone) {
      BTTargetPhone phone = (BTTargetPhone) aPhone;
      String addr = Util.toBase16(phone.getAddressAsBytes());
      int port = phone.getPort();

      memento.putString("addr", addr);
      memento.putInteger("port", phone.getPort());
      return true;
    } else {
      return false;
    }
  }
  /**
   * Returns the corresponding target phone from history - can be used to find out if there is
   * already a preferred profile for a device
   *
   * @param btTargetPhone
   * @return
   */
  public static ITargetPhone findInHistory(BTTargetPhone btTargetPhone) {
    List<ITargetPhone> history = TargetPhonePlugin.getDefault().getSelectedTargetPhoneHistory();
    for (ITargetPhone targetPhone : history) {
      if (targetPhone instanceof BTTargetPhone) {
        if (btTargetPhone.getAddress().equals(((BTTargetPhone) targetPhone).getAddress())) {
          return targetPhone;
        }
      }
    }

    return null;
  }