package qubexplorer.ui.summary;
import org.openide.windows.WindowManager;
import qubexplorer.ConfigurationFactory;
import qubexplorer.IssuesContainer;
import qubexplorer.NoSuchProjectException;
import qubexplorer.ResourceKey;
import qubexplorer.SonarQubeProjectConfiguration;
import qubexplorer.Summary;
import qubexplorer.filter.IssueFilter;
import qubexplorer.server.SonarQube;
import qubexplorer.ui.UserCredentialsRepository;
import qubexplorer.ui.ProjectContext;
import qubexplorer.ui.ServerConnectionDialog;
import qubexplorer.ui.SonarIssuesTopComponent;
import qubexplorer.ui.issues.IssueLocation;
import qubexplorer.ui.task.Task;
import qubexplorer.ui.task.TaskExecutor;
/**
*
* @author Victor
*/
public class SummaryTask extends Task<Summary> {
private final IssuesContainer issuesContainer;
private final IssueFilter[] filters;
public SummaryTask(IssuesContainer issuesContainer, ProjectContext projectContext, IssueFilter[] filters) {
super(projectContext, issuesContainer instanceof SonarQube ? ((SonarQube) issuesContainer).getServerUrl() : null);
this.issuesContainer = issuesContainer;
this.filters = filters;
}
@Override
protected void init() {
SonarIssuesTopComponent sonarTopComponent = (SonarIssuesTopComponent) WindowManager.getDefault().findTopComponent("SonarIssuesTopComponent");
sonarTopComponent.resetState();
}
@Override
public Summary execute() {
return issuesContainer.getSummary(getUserCredentials(), getProjectContext().getConfiguration().getKey(), filters);
}
@Override
protected void success(Summary summary) {
SonarIssuesTopComponent sonarTopComponent = (SonarIssuesTopComponent) WindowManager.getDefault().findTopComponent("SonarIssuesTopComponent");
sonarTopComponent.setProjectContext(getProjectContext());
sonarTopComponent.setProjectKeyChecker(new SimpleChecker());
sonarTopComponent.setIssuesContainer(issuesContainer);
sonarTopComponent.open();
sonarTopComponent.requestVisible();
sonarTopComponent.showSummary(summary);
}
@Override
protected void fail(Throwable cause) {
if (cause instanceof NoSuchProjectException) {
assert issuesContainer instanceof SonarQube;
String serverUrl = ((SonarQube) issuesContainer).getServerUrl();
if (getUserCredentials() != null) {
UserCredentialsRepository.getInstance().saveUserCredentials(serverUrl, null, getUserCredentials());
}
ServerConnectionDialog connectionDialog = new ServerConnectionDialog(WindowManager.getDefault().getMainWindow(), true);
connectionDialog.setSelectedUrl(serverUrl);
connectionDialog.loadProjectKeys();
if (connectionDialog.showDialog() == ServerConnectionDialog.Option.ACCEPT) {
SonarQubeProjectConfiguration fixed = connectionDialog.getSelectedProject();
SonarQubeProjectConfiguration real = ConfigurationFactory.createDefaultConfiguration(getProjectContext().getProject());
ProjectContext newProjectContext = new ProjectContext(getProjectContext().getProject(), new CustomServerIssuesAction.FixedKey(fixed, real));
TaskExecutor.execute(new SummaryTask(new SonarQube(connectionDialog.getSelectedUrl()), newProjectContext, filters));
}
} else {
super.fail(cause);
}
}
private static class SimpleChecker implements IssueLocation.ProjectKeyChecker {
@Override
public boolean equals(SonarQubeProjectConfiguration configuration, ResourceKey projectKeyIssue, boolean isSubmodule) {
return configuration.getKey().equals(projectKeyIssue);
}
}
}