package com.link_intersystems.gitdirstat.ui;
import java.io.File;
import java.text.MessageFormat;
import java.util.List;
import javax.swing.Action;
import com.link_intersystems.gitdirstat.domain.GitRepository;
import com.link_intersystems.gitdirstat.domain.GitRepositoryAccess;
import com.link_intersystems.gitdirstat.domain.Ref;
import com.link_intersystems.gitdirstat.domain.TreeObject;
import com.link_intersystems.gitdirstat.ui.UIContext.IconType;
import com.link_intersystems.io.FileUtils;
import com.link_intersystems.swing.AsyncProgressAction;
import com.link_intersystems.swing.ProgressMonitor;
public class OpenRepositoryAction extends
AsyncProgressAction<List<? extends Ref>, Void, TreeObject> {
private static final long serialVersionUID = -6024006313949630749L;
private GitRepositoryModel gitRepositoryModel;
private GitRepositoryAccess gitRepositoryAccess;
public OpenRepositoryAction(UIContext uiContext,
GitRepositoryModel gitRepositoryModel,
GitRepositoryAccess gitRepositoryAccess) {
this.gitRepositoryModel = gitRepositoryModel;
this.gitRepositoryAccess = gitRepositoryAccess;
putValue(Action.SMALL_ICON, uiContext.getIcon(IconType.UPDATE));
putValue(Action.SHORT_DESCRIPTION, "Open repository");
UpdateRepositoryActionInput updateRepositoryDialog = new UpdateRepositoryActionInput(
gitRepositoryModel, uiContext, gitRepositoryAccess);
setActionInputSource(updateRepositoryDialog);
setProgressMonitor(uiContext.getProgressMonitor());
}
@Override
protected TreeObject doInBackground(List<? extends Ref> refs,
ProgressMonitor progressMonitor) throws Exception {
GitRepository gitRepository = null;
File gitDir = gitRepositoryModel.getGitDir();
gitRepository = gitRepositoryAccess.getGitRepository(gitDir);
List<? extends Ref> selectedRefs = refs;
String progressMessage = MessageFormat.format(
"Analyzing repository: {0}",
FileUtils.abbreviatedPath(gitDir, 50));
ProgressListenerMonitorAdapter progressListenerMonitorAdapter = new ProgressListenerMonitorAdapter(
progressMonitor, progressMessage);
progressListenerMonitorAdapter.setUpdateInterval(250);
TreeObject commitRangeTree = gitRepository.getCommitRangeTree(
selectedRefs, progressListenerMonitorAdapter);
return commitRangeTree;
}
@Override
protected void done(TreeObject result) {
gitRepositoryModel.setCommitRangeTree(result);
}
}