package bluej.groupwork.actions;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import javafx.application.Platform;
import bluej.Config;
import bluej.collect.DataCollector;
import bluej.groupwork.Repository;
import bluej.groupwork.TeamSettingsController;
import bluej.groupwork.TeamUtils;
import bluej.groupwork.TeamworkCommand;
import bluej.groupwork.TeamworkCommandResult;
import bluej.pkgmgr.PkgMgrFrame;
import bluej.pkgmgr.Project;
import bluej.utility.Debug;
import bluej.utility.DialogManager;
import bluej.utility.Utility;
import threadchecker.OnThread;
import threadchecker.Tag;
| An action to share a project into a repository.
|
| @author Kasper
|
@OnThread(Tag.FXPlatform)
public class ShareAction
extends TeamAction{
public ShareAction()
{
super("team.share", true);
}
@Override
public void actionPerformed(PkgMgrFrame pmf)
{
Project project = pmf.getProject();
if (project == null) {
return;
}
doShare(pmf, project);
}
private void doShare(final PkgMgrFrame pmf, final Project project)
{
final TeamSettingsController tsc = new TeamSettingsController(project.getProjectDir());
Repository repository = tsc.trytoEstablishRepository(true);
if (repository == null) {
return;
}
try {
project.saveAll();
project.saveAllEditors();
}
catch(IOException ioe) {
String msg = DialogManager.getMessage("team-error-saving-project");
if (msg != null) {
String finalMsg = Utility.mergeStrings(msg, ioe.getLocalizedMessage());
DialogManager.showErrorTextFX(pmf.getFXWindow(), finalMsg);
return;
}
}
pmf.setStatus(Config.getString("team.sharing"));
pmf.startProgress();
Thread thread = new Thread() {
TeamworkCommandResult result = null;
@OnThread(value = Tag.Worker, ignoreParent = true)
public void run()
{
TeamworkCommand command = repository.shareProject();
result = command.getResult();
if (! result.isError())
{
CompletableFuture<Set<File>> filesFuture = new CompletableFuture<>();
CompletableFuture<Boolean> isDVCSFuture = new CompletableFuture<>();
Platform.runLater( () -> {
project.setTeamSettingsController(tsc);
Set<File> projFiles = tsc.getProjectFiles(true);
filesFuture.complete(new HashSet<>(projFiles));
isDVCSFuture.complete(tsc.isDVCS());
});
try {
Set<File> files = filesFuture.get();
Boolean isDVCS = isDVCSFuture.get();
Set<File> newFiles = new LinkedHashSet<>(files);
Set<File> binFiles = TeamUtils.extractBinaryFilesFromSet(newFiles);
command = repository.commitAll(newFiles, binFiles, Collections.emptySet(),
files, Config.getString("team.share.initialMessage"));
result = command.getResult();
if (isDVCS){
command = repository.pushChanges();
result = command.getResult();
}
}
catch (InterruptedException | ExecutionException e)
{
Debug.reportError(e);
}
}
Platform.runLater(() -> {
TeamUtils.handleServerResponseFX(result, pmf.getFXWindow());
pmf.stopProgress();
if (!result.isError())
{
pmf.setStatus(Config.getString("team.shared"));
DataCollector.teamShareProject(project, repository);
}
else
{
pmf.clearStatus();
}
});
}
};
thread.start();
}
}
top,
use,
map,
class ShareAction
. ShareAction
. actionPerformed
. doShare
. run
155 neLoCode
+ 2 LoComm