1 /*
2  * SVNSelectChangelistTablePresenter.java
3  *
4  * Copyright (C) 2021 by RStudio, PBC
5  *
6  * Unless you have received this program directly from RStudio pursuant
7  * to the terms of a commercial license agreement with RStudio, then
8  * this program is licensed to you under the terms of version 3 of the
9  * GNU Affero General Public License. This program is distributed WITHOUT
10  * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
11  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
12  * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
13  *
14  */
15 package org.rstudio.studio.client.workbench.views.vcs.svn;
16 
17 import com.google.gwt.cell.client.FieldUpdater;
18 import com.google.inject.Inject;
19 import org.rstudio.core.client.widget.Operation;
20 import org.rstudio.studio.client.common.GlobalDisplay;
21 import org.rstudio.studio.client.common.SimpleRequestCallback;
22 import org.rstudio.studio.client.common.vcs.ProcessResult;
23 import org.rstudio.studio.client.common.vcs.SVNServerOperations;
24 import org.rstudio.studio.client.common.vcs.StatusAndPath;
25 import org.rstudio.studio.client.workbench.views.vcs.svn.model.SVNState;
26 
27 import java.util.ArrayList;
28 
29 public class SVNSelectChangelistTablePresenter extends SVNChangelistTablePresenter
30 {
31    @Inject
SVNSelectChangelistTablePresenter(final SVNSelectChangelistTable view, SVNState svnState, final SVNServerOperations server, final GlobalDisplay globalDisplay)32    public SVNSelectChangelistTablePresenter(final SVNSelectChangelistTable view,
33                                             SVNState svnState,
34                                             final SVNServerOperations server,
35                                             final GlobalDisplay globalDisplay)
36    {
37       super(view, svnState);
38       view_ = view;
39 
40       view.getCommitColumn().setFieldUpdater(new FieldUpdater<StatusAndPath, Boolean>()
41       {
42          @Override
43          public void update(final int index,
44                             final StatusAndPath object,
45                             Boolean value)
46          {
47             if (value)
48             {
49                if (object.getStatus() == "?")
50                {
51                   server.svnAdd(toArray(object.getPath()), new SimpleRequestCallback<ProcessResult>()
52                   {
53                      @Override
54                      public void onResponseReceived(ProcessResult response)
55                      {
56                         if (response.getExitCode() == 0)
57                            view.setSelected(object, true);
58                      }
59                   });
60                   return;
61                }
62                if (object.getStatus() == "!")
63                {
64                   server.svnDelete(toArray(object.getPath()),
65                                    new SimpleRequestCallback<ProcessResult>()
66                                    {
67                                       @Override
68                                       public void onResponseReceived(
69                                             ProcessResult response)
70                                       {
71                                          if (response.getExitCode() == 0)
72                                             view.setSelected(object, true);
73                                       }
74                                    });
75                   return;
76                }
77                if (object.getStatus() == "C")
78                {
79                   globalDisplay.showYesNoMessage(
80                         GlobalDisplay.MSG_WARNING,
81                         "File Conflict",
82                         "This file has a conflict. Would you like to mark it " +
83                         "as resolved now?",
84                         new Operation()
85                         {
86                            @Override
87                            public void execute()
88                            {
89                               server.svnResolve(
90                                     "working",
91                                     toArray(object.getPath()),
92                                     new SimpleRequestCallback<ProcessResult>()
93                                     {
94                                        @Override
95                                        public void onResponseReceived(
96                                              ProcessResult response)
97                                        {
98                                           if (response.getExitCode() == 0)
99                                              view.setSelected(object, true);
100                                        }
101                                     });
102                            }
103                         },
104                         false
105                   );
106                   return;
107                }
108             }
109 
110             view.setSelected(object, value);
111          }
112 
113          private ArrayList<String> toArray(String path)
114          {
115             ArrayList<String> result = new ArrayList<>();
116             result.add(path);
117             return result;
118          }
119       });
120    }
121 
122    @Override
rejectItem(StatusAndPath item)123    protected boolean rejectItem(StatusAndPath item)
124    {
125       return super.rejectItem(item) || "X".equals(item.getStatus());
126    }
127 
clearSelection()128    public void clearSelection()
129    {
130       view_.clearSelection();
131    }
132 
133    private final SVNSelectChangelistTable view_;
134 }
135