package bluej.groupwork.actions;
import bluej.Config;
import bluej.collect.DataCollector;
import bluej.groupwork.StatusHandle;
import bluej.groupwork.TeamUtils;
import bluej.groupwork.TeamworkCommand;
import bluej.groupwork.TeamworkCommandResult;
import bluej.groupwork.ui.CommitAndPushFrame;
import bluej.pkgmgr.PkgMgrFrame;
import bluej.pkgmgr.Project;
import bluej.utility.FXWorker;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
import javafx.application.Platform;
import threadchecker.OnThread;
import threadchecker.Tag;
| This class implements the push action.
| @author Fabio Heday
|
@OnThread(Tag.FXPlatform)
public class PushAction
extends TeamAction{
private CommitAndPushFrame commitCommentsFrame;
private Set<File> filesToPush;
private PushWorker worker;
@OnThread(value = Tag.Any, requireSynchronized = true)
private StatusHandle statusHandle;
public PushAction(CommitAndPushFrame frame)
{
super(Config.getString("team.push"), false);
commitCommentsFrame = frame;
this.filesToPush = new HashSet<>();
}
| Cancel the push, if it is running.
|
public void cancel()
{
setEnabled(true);
if (worker != null) {
worker.abort();
worker = null;
}
}
| Set the status handle to use in order to perform the commit operation.
| @param statusHandle
|
@OnThread(Tag.Worker)
public synchronized void setStatusHandle(StatusHandle statusHandle)
{
this.statusHandle = statusHandle;
}
@Override
protected void actionPerformed(Project project)
{
commitCommentsFrame.startProgress();
commitCommentsFrame.displayMessage(Config.getString("team.push.statusMessage"));
setEnabled(false);
this.filesToPush.clear();
filesToPush.addAll(commitCommentsFrame.getFilesToPush());
worker = new PushAction.PushWorker(project);
worker.start();
}
| Worker thread to perform commit operation
|
| @author Fabio Heday
|
private class PushWorker
extends FXWorker
{
private TeamworkCommand command;
private TeamworkCommandResult result = null;
private final boolean hasPassword;
private boolean aborted;
@OnThread(Tag.FXPlatform)
public PushWorker(Project project)
{
command = statusHandle.pushAll(filesToPush);
if (!project.getTeamSettingsController().hasPasswordString()) {
if ( ! project.getTeamSettingsDialog().showAndWait().isPresent() ) {
commitCommentsFrame.setVisible(true);
hasPassword = false;
return;
}
statusHandle.getRepository().setPassword(commitCommentsFrame.getProject().getTeamSettingsController().getTeamSettingsDialog().getSettings());
}
hasPassword = true;
}
@Override
@OnThread(Tag.Worker)
public Object construct()
{
if (!hasPassword)
{
Platform.runLater(this::abort);
return null;
}
result = command.getResult();
return result;
}
public void abort()
{
command.cancel();
aborted = true;
}
@Override
public void finished()
{
final Project project = commitCommentsFrame.getProject();
if (!aborted) {
commitCommentsFrame.stopProgress();
if (!result.isError()) {
if ( !result.wasAborted()) {
DataCollector.teamPushProject(project, statusHandle.getRepository(), filesToPush);
commitCommentsFrame.displayMessage(Config.getString("team.push.statusDone"));
}
}
else {
commitCommentsFrame.displayMessage(Config.getString("team.push.error"));
}
}
TeamUtils.handleServerResponseFX(result, commitCommentsFrame.asWindow());
if (!aborted) {
setEnabled(true);
if (project.getTeamSettingsController().isDVCS()){
commitCommentsFrame.setVisible(true);
}
else {
commitCommentsFrame.setVisible(false);
}
}
}
}
}
top,
use,
map,
class PushAction
. PushAction
. cancel
. setStatusHandle
. actionPerformed
top,
use,
map,
class PushAction . PushWorker
. PushWorker
. construct
. abort
. finished
184 neLoCode
+ 7 LoComm