private String findConsoleName(SynchronizerThread thread) {
    boolean found = false;
    String result = thread.getTargetMappings().getName();
    for (int i = 0; i < getComponentCount(); i++) {
      ThreadConsole console = (ThreadConsole) getComponentAt(i);
      if (console.getTitle().equals(result)) {
        found = true;
        break;
      }
    }

    if (!found) return result;

    int inc = 1;
    result = thread.getTargetMappings().getName() + " (" + inc + ")";
    for (int i = 0; i < getComponentCount(); i++) {
      ThreadConsole console = (ThreadConsole) getComponentAt(i);
      if (console.getTitle().equals(result)) {
        i = 0;
        result = thread.getTargetMappings().getName() + " (" + ++inc + ")";
      }
    }

    return result;
  }
  private ThreadConsole findMainConsole(ThreadConsole console) {
    for (int i = 0; i < getComponentCount(); i++) {
      ThreadConsole c = (ThreadConsole) getComponentAt(i);
      if ((c.isMainConsole()) && (c.hasSameTargetMappings(console))) return c;
    }

    return null;
  }
  private String findTitle(ThreadConsole console) {
    String title = console.getTitle();

    if (console.getThread().isActive())
      title += " " + LabelsFactory.get(LabelsFactory.TITLE_CONSOLE_BUSY);
    else if (console.getThread().isInterrupted())
      title += " " + LabelsFactory.get(LabelsFactory.TITLE_CONSOLE_INTERRUPTED);

    return title;
  }
  private int findConsolePosition(ThreadConsole console) {
    ThreadConsole mainConsole = findMainConsole(console);
    if (mainConsole == null) return getComponentCount();

    int start = indexOfComponent(mainConsole);
    for (int i = start + 1; i < getComponentCount(); i++) {
      ThreadConsole c = (ThreadConsole) getComponentAt(i);
      if (!c.hasSameTargetMappings(console)) return i;
    }

    return getComponentCount();
  }
  public ThreadConsole createConsole(
      RemoteSynchronizerPlugin plugin, SynchronizerThread copierThread, boolean findPosition) {
    String consoleName = findConsoleName(copierThread);
    ThreadConsole console = new ThreadConsole(this, plugin.getConfig(), copierThread, consoleName);
    plugin.getConfig().addConfigListener(console);
    console.setMainConsole(findMainConsole(console));

    copierThread.setConsole(console);

    addConsole(console, findPosition);

    return console;
  }
  public void addConsole(ThreadConsole console, boolean findPosition) {
    console.setTitle(findConsoleName(console.getThread()));
    int index = (findPosition) ? findConsolePosition(console) : getComponentCount();

    insertTab(findTitle(console), null, console, null, index);
  }