package com.link_intersystems.gitdirstat.ui; import java.awt.event.ActionEvent; import java.io.File; import java.util.List; import com.link_intersystems.gitdirstat.domain.GitRepository; import com.link_intersystems.gitdirstat.domain.GitRepositoryAccess; import com.link_intersystems.gitdirstat.domain.IndexFilter; import com.link_intersystems.gitdirstat.domain.Ref; import com.link_intersystems.swing.ActionInputSource; import com.link_intersystems.swing.AsyncProgressAction; import com.link_intersystems.swing.ProgressMonitor; public class RemovePathAction extends AsyncProgressAction<IndexFilter, Void, Void> { private static final long serialVersionUID = -2409080673565317180L; private GitRepositoryModel gitRepositoryModel; private GitRepositoryAccess gitRepositoryAccess; private OpenRepositoryAction openRepositoryAction; private UIContext uiContext; public RemovePathAction(final GitRepositoryModel gitRepositoryModel, final GitRepositoryAccess gitRepositoryAccess, UIContext uiContext) { this.gitRepositoryModel = gitRepositoryModel; this.gitRepositoryAccess = gitRepositoryAccess; this.uiContext = uiContext; setActionInputSource(new RemovePathsActionInput(gitRepositoryModel, uiContext, gitRepositoryAccess)); openRepositoryAction = new OpenRepositoryAction(uiContext, gitRepositoryModel, gitRepositoryAccess); openRepositoryAction .setActionInputSource(new ActionInputSource<List<? extends Ref>>() { @Override public List<? extends Ref> getActionInput(ActionEvent e) { File gitDir = gitRepositoryModel.getGitDir(); GitRepository gitRepository = gitRepositoryAccess .getGitRepository(gitDir); return gitRepository.getRefs(Ref.class); } }); } @Override protected Void doInBackground(IndexFilter actionInput, ProgressMonitor progressMonitor) throws Exception { ProgressListenerMonitorAdapter progressListenerMonitorAdapter = new ProgressListenerMonitorAdapter( progressMonitor, "Removing paths from repository"); progressListenerMonitorAdapter.setUpdateInterval(1000); File gitDir = gitRepositoryModel.getGitDir(); GitRepository gitRepository = gitRepositoryAccess .getGitRepository(gitDir); gitRepository.applyFilter(actionInput, progressListenerMonitorAdapter); return null; } @Override protected void done(Void result) { ProgressMonitor progressMonitor = uiContext.getProgressMonitor(); openRepositoryAction.setProgressMonitor(progressMonitor); openRepositoryAction.actionPerformed(null); } }