private ResultWithFailures pendChanges()

in src/org/jetbrains/tfsIntegration/core/tfs/VersionControlServer.java [347:407]


  private <T> ResultWithFailures<GetOperation> pendChanges(final String workspaceName,
                                                           final String workspaceOwner,
                                                           Collection<T> paths,
                                                           final boolean updateLocalVersion,
                                                           final ChangeRequestProvider<T> changeRequestProvider,
                                                           Object projectOrComponent,
                                                           String progressTitle) throws TfsException {
    OperationOnCollection<T, ResultWithFailures<GetOperation>> operation =
      new OperationOnCollection<T, ResultWithFailures<GetOperation>>() {
        @Override
        public ResultWithFailures<GetOperation> execute(Collection<T> items, Credentials credentials, ProgressIndicator pi)
          throws RemoteException, HostNotApplicableException {
          ResultWithFailures<GetOperation> result = new ResultWithFailures<>();
          List<ChangeRequest> changeRequests = new ArrayList<>(items.size());
          for (T path : items) {
            changeRequests.add(changeRequestProvider.createChangeRequest(path));
          }

          final ArrayOfChangeRequest arrayOfChangeRequest = new ArrayOfChangeRequest();
          arrayOfChangeRequest.setChangeRequest(changeRequests.toArray(new ChangeRequest[0]));

          final PendChanges param = new PendChanges();
          param.setOwnerName(workspaceOwner);
          param.setWorkspaceName(workspaceName);
          param.setChanges(arrayOfChangeRequest);
          final PendChangesResponse response = myBeans.getRepositoryStub(credentials, pi).pendChanges(param);
          if (updateLocalVersion && response.getPendChangesResult().getGetOperation() != null) {
            final ArrayOfLocalVersionUpdate arrayOfLocalVersionUpdate = new ArrayOfLocalVersionUpdate();
            List<LocalVersionUpdate> localVersionUpdates =
              new ArrayList<>(response.getPendChangesResult().getGetOperation().length);
            for (GetOperation getOperation : response.getPendChangesResult().getGetOperation()) {
              localVersionUpdates.add(getLocalVersionUpdate(getOperation));
            }
            arrayOfLocalVersionUpdate
              .setLocalVersionUpdate(localVersionUpdates.toArray(new LocalVersionUpdate[0]));

            final UpdateLocalVersion param2 = new UpdateLocalVersion();
            param2.setOwnerName(workspaceOwner);
            param2.setWorkspaceName(workspaceName);
            param2.setUpdates(arrayOfLocalVersionUpdate);
            myBeans.getRepositoryStub(credentials, pi).updateLocalVersion(param2);
          }

          if (response.getPendChangesResult().getGetOperation() != null) {
            ContainerUtil.addAll(result.getResult(), response.getPendChangesResult().getGetOperation());
          }

          if (response.getFailures().getFailure() != null) {
            ContainerUtil.addAll(result.getFailures(), response.getFailures().getFailure());
          }
          return result;
        }

        @Override
        public ResultWithFailures<GetOperation> merge(Collection<ResultWithFailures<GetOperation>> results) {
          return ResultWithFailures.merge(results);
        }
      };

    return execute(operation, projectOrComponent, paths, progressTitle);
  }