package qubexplorer.ui.summary;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Properties;
import org.netbeans.api.project.Project;
import org.openide.awt.ActionID;
import org.openide.awt.ActionRegistration;
import org.openide.util.NbBundle.Messages;
import org.openide.util.NbPreferences;
import org.openide.windows.WindowManager;
import qubexplorer.ConfigurationFactory;
import qubexplorer.ResourceKey;
import qubexplorer.SonarQubeProjectConfiguration;
import qubexplorer.Summary;
import qubexplorer.UserCredentials;
import qubexplorer.filter.IssueFilter;
import qubexplorer.server.SonarQube;
import qubexplorer.ui.ActionPlansTask;
import qubexplorer.ui.ProjectContext;
import qubexplorer.ui.ServerConnectionDialog;
import qubexplorer.ui.SonarQubeOptionsPanel;
import qubexplorer.ui.task.TaskExecutor;
@ActionID(
category = "SonarQube",
id = "qubexplorer.ui.SonarDialogAction2")
@ActionRegistration(
displayName = "#CTL_SonarDialogAction2")
@Messages("CTL_SonarDialogAction2=Get Issues from Server ...")
public final class CustomServerIssuesAction implements ActionListener {
private final Project context;
public CustomServerIssuesAction(Project context) {
this.context = context;
}
@Override
public void actionPerformed(ActionEvent ev) {
ServerConnectionDialog serverConnectionDialog=new ServerConnectionDialog(WindowManager.getDefault().getMainWindow(), true);
serverConnectionDialog.setSelectedUrl(NbPreferences.forModule(SonarQubeOptionsPanel.class).get("address", "http://localhost:9000"));
if(serverConnectionDialog.showDialog() == ServerConnectionDialog.Option.ACCEPT) {
SonarQubeProjectConfiguration fixed = serverConnectionDialog.getSelectedProject();
SonarQubeProjectConfiguration real = ConfigurationFactory.createDefaultConfiguration(context);
final ProjectContext projectContext = new ProjectContext(context, new FixedKey(fixed, real));
final SonarQube sonarQube = new SonarQube(serverConnectionDialog.getSelectedUrl());
SummaryTask summaryTask = new SummaryTask(sonarQube, projectContext, new IssueFilter[0]){
@Override
protected void success(Summary summary) {
super.success(summary);
TaskExecutor.execute(new ActionPlansTask(sonarQube, projectContext));
}
};
UserCredentials userCredentials = serverConnectionDialog.getUserCredentials();
if(userCredentials != null) {
summaryTask.setUserCredentials(userCredentials);
}
TaskExecutor.execute(summaryTask);
}
}
public static class FixedKey implements SonarQubeProjectConfiguration{
private final SonarQubeProjectConfiguration fixed;
private final SonarQubeProjectConfiguration real;
public FixedKey(SonarQubeProjectConfiguration fixed, SonarQubeProjectConfiguration real) {
this.fixed = fixed;
this.real = real;
}
@Override
public String getName() {
return fixed.getName();
}
@Override
public ResourceKey getKey() {
return fixed.getKey();
}
@Override
public String getVersion() {
return fixed.getVersion();
}
@Override
public SonarQubeProjectConfiguration createConfiguration(Project subproject) {
return real.createConfiguration(subproject);
}
@Override
public Properties getProperties() {
return real.getProperties();
}
}
}