private boolean isDeletedRemotely(SyncInfo info) {
   int kind = info.getKind();
   if (kind == (SyncInfo.INCOMING | SyncInfo.DELETION)) return true;
   if (SyncInfo.getDirection(kind) == SyncInfo.CONFLICTING && info.getRemote() == null)
     return true;
   return false;
 }
  /** {@inheritDoc} */
  public boolean accept(Object element) {
    boolean passes = true;

    if (element instanceof IFile) {

      IFile file = (IFile) element;
      IProject project = file.getProject();

      if (RepositoryProvider.isShared(project)) {

        RepositoryProvider provider = RepositoryProvider.getProvider(project);

        if (provider != null) {

          Subscriber subscriber = provider.getSubscriber();

          if (subscriber != null) {

            try {
              SyncInfo synchInfo = subscriber.getSyncInfo(file);

              if (synchInfo != null) {
                int kind = synchInfo.getKind();
                passes = (SyncInfo.getDirection(kind) & SyncInfo.OUTGOING) == SyncInfo.OUTGOING;
              }
            } catch (TeamException e) {
              CheckstyleLog.log(e);
            }
          }
        }
      }
    }
    return passes;
  }
  @Override
  public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
    final SyncInfo[] infos = getSyncInfoSet().getSyncInfos();
    if (Utils.isEmpty(infos)) {
      return;
    }

    for (SyncInfo syncInfo : infos) {
      if (SyncInfo.getDirection(syncInfo.getKind()) == SyncInfo.INCOMING) {
        logger.warn("Request to apply incoming change to remote");
        StringBuffer strBuff = new StringBuffer("Change is ");
        strBuff
            .append(getDirectionString(syncInfo))
            .append(".\n\nAre you sure you want to override ")
            .append(getDirectionString(syncInfo))
            .append(" ")
            .append(getDeltaString(syncInfo))
            .append(" and apply local ")
            .append(getReverseDeltaString(syncInfo))
            .append(" to server?");
        ConfirmRunnable confirm = new ConfirmRunnable("Incoming Change Found", strBuff.toString());
        Display.getDefault().syncExec(confirm);
        if (!confirm.getResult()) {
          return;
        }
      }
    }

    try {
      applyToServer(getSubscriber(), infos, monitor);
    } catch (InterruptedException e) {
      logger.warn("Operation cancelled: " + e.getMessage());
    } catch (InvocationTargetException e) {
      Throwable cause = e.getTargetException();
      if (cause instanceof InsufficientPermissionsException) {
        DialogUtils.getInstance()
            .presentInsufficientPermissionsDialog((InsufficientPermissionsException) cause);
      } else {
        logger.error("Unable to apply change to server", e);
        showErrorAsync(e, true, "Unable to apply change to server");
      }
    }
  }