public void doSearch(String sSearchText, boolean toSubscribe) {
    if (sSearchText.length() == 0) {
      return;
    }

    if (checkForSpecialSearchTerm(sSearchText)) {

      return;
    }

    SearchResultsTabArea.SearchQuery sq =
        new SearchResultsTabArea.SearchQuery(sSearchText, toSubscribe);

    MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
    String id = MultipleDocumentInterface.SIDEBAR_SECTION_SEARCH;
    MdiEntry existingEntry = mdi.getEntry(id);
    if (existingEntry != null && existingEntry.isAdded()) {
      SearchResultsTabArea searchClass =
          (SearchResultsTabArea) SkinViewManager.getByClass(SearchResultsTabArea.class);
      if (searchClass != null) {
        searchClass.anotherSearch(sSearchText, toSubscribe);
      }
      mdi.showEntry(existingEntry);
      return;
    }

    final MdiEntry entry =
        mdi.createEntryFromSkinRef(
            MultipleDocumentInterface.SIDEBAR_HEADER_DISCOVERY,
            id,
            "main.area.searchresultstab",
            sSearchText,
            null,
            sq,
            true,
            MultipleDocumentInterface.SIDEBAR_POS_FIRST);
    if (entry != null) {
      entry.setImageLeftID("image.sidebar.search");
      entry.setDatasource(sq);
      entry.setViewTitleInfo(
          new ViewTitleInfo() {
            public Object getTitleInfoProperty(int propertyID) {
              if (propertyID == TITLE_TEXT) {
                SearchResultsTabArea searchClass =
                    (SearchResultsTabArea) SkinViewManager.getByClass(SearchResultsTabArea.class);
                if (searchClass != null && searchClass.sq != null) {
                  return searchClass.sq.term;
                }
              }
              return null;
            }
          });
    }
    mdi.showEntryByID(id);
  }
  // @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closePluginViews(java.lang.String)
  public void closePluginViews(String sViewID) {
    try {
      MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
      if (mdi == null) {
        return;
      }
      mdi.closeEntry(sViewID);

    } catch (Exception e) {
      Logger.log(new LogEvent(LOGID, "closePluginViews", e));
    }
  }
 // @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closeAllDetails()
 public void closeAllDetails() {
   MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
   if (mdi == null) {
     return;
   }
   MdiEntry[] sideBarEntries = mdi.getEntries();
   for (int i = 0; i < sideBarEntries.length; i++) {
     MdiEntry entry = sideBarEntries[i];
     String id = entry.getId();
     if (id != null && id.startsWith("DMDetails_")) {
       mdi.closeEntry(id);
     }
   }
 }
  // @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#hasDetailViews()
  public boolean hasDetailViews() {
    MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
    if (mdi == null) {
      return false;
    }

    MdiEntry[] sideBarEntries = mdi.getEntries();
    for (int i = 0; i < sideBarEntries.length; i++) {
      MdiEntry entry = sideBarEntries[i];
      String id = entry.getId();
      if (id != null && id.startsWith("DMDetails_")) {
        return true;
      }
    }

    return false;
  }
  /* (non-Javadoc)
   * @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closePluginView(org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewCore)
   */
  public void closePluginView(UISWTViewCore view) {
    try {
      MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
      if (mdi == null) {
        return;
      }
      String id;
      if (view instanceof UISWTViewImpl) {
        id = ((UISWTViewImpl) view).getViewID();
      } else {
        id = view.getClass().getName();
        int i = id.lastIndexOf('.');
        if (i > 0) {
          id = id.substring(i + 1);
        }
      }
      mdi.closeEntry(id);

    } catch (Exception e) {
      Logger.log(new LogEvent(LOGID, "closePluginView", e));
    }
  }
  /**
   * @param url
   * @param target
   */
  private void showURL(final String url, String target) {

    if ("_blank".equalsIgnoreCase(target)) {
      Utils.launch(url);
      return;
    }

    if (target.startsWith("tab-")) {
      target = target.substring(4);
    }

    MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();

    if (MultipleDocumentInterface.SIDEBAR_SECTION_PLUS.equals(target)) {
      SBC_PlusFTUX.setSourceRef(url.substring(1));
      mdi.showEntryByID(target);
      return;
    }

    // Note; We don't setSourceRef on ContentNetwork here like we do
    // everywhere else because the source ref should already be set
    // by the caller
    if (mdi == null || !mdi.showEntryByID(target)) {
      Utils.launch(url);
      return;
    }

    MdiEntry entry = mdi.getEntry(target);
    entry.addListener(
        new MdiEntryOpenListener() {

          public void mdiEntryOpen(MdiEntry entry) {
            entry.removeListener(this);

            mainWindow.setVisible(true, true);

            if (!(entry instanceof SideBarEntrySWT)) {
              return;
            }
            SideBarEntrySWT entrySWT = (SideBarEntrySWT) entry;

            SWTSkinObjectBrowser soBrowser = SWTSkinUtils.findBrowserSO(entrySWT.getSkinObject());

            if (soBrowser != null) {
              // ((SWTSkinObjectBrowser) skinObject).getBrowser().setVisible(false);
              if (url == null || url.length() == 0) {
                soBrowser.restart();
              } else {
                String fullURL = url;
                if (UrlFilter.getInstance().urlCanRPC(url)) {
                  // 4010 Tux: This shouldn't be.. either determine ContentNetwork from
                  //           url or target, or do something..
                  fullURL =
                      ConstantsVuze.getDefaultContentNetwork().appendURLSuffix(url, false, true);
                }

                soBrowser.setURL(fullURL);
              }
            }
          }
        });
  }
  private void _openView(int viewID, Object data) {
    switch (viewID) {
      case VIEW_CONSOLE:
        openView(SideBar.SIDEBAR_HEADER_PLUGINS, LoggerView.class, null, data, true);
        break;

      case VIEW_ALLPEERS:
        openView(SideBar.SIDEBAR_HEADER_TRANSFERS, PeersSuperView.class, null, data, true);
        break;

      case VIEW_PEERS_STATS:
        openView(SideBar.SIDEBAR_HEADER_PLUGINS, ClientStatsView.class, null, data, true);
        break;

      case VIEW_CONFIG:
        showConfig((data instanceof String) ? (String) data : null);
        break;

      case VIEW_DM_DETAILS:
        {
          String id = SideBar.SIDEBAR_TORRENT_DETAILS_PREFIX;
          if (data instanceof DownloadManager) {
            DownloadManager dm = (DownloadManager) data;
            TOTorrent torrent = dm.getTorrent();
            if (torrent != null) {
              try {
                id += torrent.getHashWrapper().toBase32String();
              } catch (TOTorrentException e) {
                e.printStackTrace();
              }
            }
          }

          MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
          if (mdi != null) {
            mdi.loadEntryByID(id, true, false, data);
          }
        }
        break;

      case VIEW_DM_MULTI_OPTIONS:
        openView(SideBar.SIDEBAR_HEADER_TRANSFERS, TorrentOptionsView.class, null, data, true);
        break;

      case VIEW_MYSHARES:
        openView(SideBar.SIDEBAR_HEADER_TRANSFERS, MySharesView.class, null, data, true);
        break;

      case VIEW_MYTORRENTS:
        {
          MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();
          if (mdi != null) {
            mdi.showEntryByID(SideBar.SIDEBAR_SECTION_LIBRARY);
          }
        }
        break;

      case VIEW_MYTRACKER:
        openView(SideBar.SIDEBAR_HEADER_TRANSFERS, MyTrackerView.class, null, data, true);
        break;

      case VIEW_TAGS_OVERVIEW:
        {
          MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();

          if (mdi != null) {

            mdi.showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_TAGS);
          }

          break;
        }
      case VIEW_TAG:
        {
          if (data instanceof Tag) {

            Tag tag = (Tag) data;

            String id = "Tag." + tag.getTagType().getTagType() + "." + tag.getTagID();

            MultipleDocumentInterface mdi = UIFunctionsManager.getUIFunctions().getMDI();

            if (mdi != null) {

              mdi.loadEntryByID(id, true, false, data);
            }
          }
          break;
        }
      default:
        break;
    }
  }