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