private static ServerStatus determineServerStatus()

in src/org/jetbrains/tfsIntegration/core/tfs/StatusProvider.java [144:238]


  private static ServerStatus determineServerStatus(final @Nullable PendingChange pendingChange, final @Nullable ExtendedItem item) {
    if (item == null) {
      return ServerStatus.Unversioned.INSTANCE;
    }

    ChangeTypeMask change = new ChangeTypeMask(item.getChg());
    change.remove(ChangeType_type0.None, ChangeType_type0.Lock);

    if (item.getLocal() == null && change.isEmpty()) {
      // TODO report not downloaded items as unversioned ?
      return ServerStatus.Unversioned.INSTANCE;
    }

    if (change.isEmpty()) {
      TFSVcs.assertTrue(item.getLver() != Integer.MIN_VALUE);
      if (item.getLver() < item.getLatest()) {
        return new ServerStatus.OutOfDate(item);
      }
      else {
        return new ServerStatus.UpToDate(item);
      }
    }

    if (change.containsAny(ChangeType_type0.Add) ||
        (change.containsAny(ChangeType_type0.Merge, ChangeType_type0.Branch) && item.getLatest() == Integer.MIN_VALUE)) {
      //TFSVcs.assertTrue(change.contains(ChangeType.Edit) || item.getType() == ItemType.Folder);
      TFSVcs.assertTrue(change.containsAny(ChangeType_type0.Encoding));
      TFSVcs.assertTrue(item.getLatest() == Integer.MIN_VALUE);
      TFSVcs.assertTrue(item.getLver() == Integer.MIN_VALUE);
      if (pendingChange != null) {
        return new ServerStatus.ScheduledForAddition(pendingChange);
      }
      else {
        return new ServerStatus.ScheduledForAddition(item);
      }
    }
    else if (change.contains(ChangeType_type0.Delete)) {
//          TFSVcs.assertTrue(change.containsOnly(ChangeType.Value.Delete)); // NOTE: may come with "Lock" change 
      //TFSVcs.assertTrue(item.getLatest() != Integer.MIN_VALUE);
      //TFSVcs.assertTrue(item.getLver() == Integer.MIN_VALUE);
      //TFSVcs.assertTrue(item.getLocal() == null);
      if (pendingChange != null) {
        return new ServerStatus.ScheduledForDeletion(pendingChange);
      }
      else {
        return new ServerStatus.ScheduledForDeletion(item);
      }
    }
    else if (change.containsAny(ChangeType_type0.Edit, ChangeType_type0.Merge) && !change.contains(ChangeType_type0.Rename)) {
      TFSVcs.assertTrue(item.getLatest() != Integer.MIN_VALUE);
      if (item.getLver() != Integer.MIN_VALUE) {
        TFSVcs.assertTrue(item.getLocal() != null);
        if (pendingChange != null) {
          return new ServerStatus.CheckedOutForEdit(pendingChange);
        }
        else {
          return new ServerStatus.CheckedOutForEdit(item);
        }
      }
      else {
        return new ServerStatus.ScheduledForAddition(item);
      }
    }
    else if (change.containsAny(ChangeType_type0.Merge, ChangeType_type0.Rename) && !change.contains(ChangeType_type0.Edit)) {
      if (pendingChange != null) {
        return new ServerStatus.Renamed(pendingChange);
      }
      else {
        return new ServerStatus.Renamed(item);
      }
    }
    else if (change.containsAll(ChangeType_type0.Rename, ChangeType_type0.Edit)) {
      TFSVcs.assertTrue(item.getLatest() != Integer.MIN_VALUE);
      TFSVcs.assertTrue(item.getLver() != Integer.MIN_VALUE);
      TFSVcs.assertTrue(item.getLocal() != null);
      if (pendingChange != null) {
        return new ServerStatus.RenamedCheckedOut(pendingChange);
      }
      else {
        return new ServerStatus.RenamedCheckedOut(item);
      }
    }
    else if (change.contains(ChangeType_type0.Undelete)) {
      if (pendingChange != null) {
        return new ServerStatus.Undeleted(pendingChange);
      }
      else {
        return new ServerStatus.Undeleted(item);
      }
    }

    TFSVcs.LOG.error("Uncovered case for item " +
                     (item.getLocal() != null ? VersionControlPath.localPathFromTfsRepresentation(item.getLocal()) : item.getTitem()));
    return null;
  }