package jetbrains.buildserver.sonarplugin.sqrunner;
import jetbrains.buildServer.controllers.admin.projects.EditProjectTab;
import jetbrains.buildServer.serverSide.SProject;
import jetbrains.buildServer.serverSide.auth.AuthUtil;
import jetbrains.buildServer.serverSide.auth.SecurityContext;
import jetbrains.buildServer.web.openapi.PagePlaces;
import jetbrains.buildServer.web.openapi.PluginDescriptor;
import jetbrains.buildserver.sonarplugin.sqrunner.manager.SQSInfo;
import jetbrains.buildserver.sonarplugin.sqrunner.manager.SQSManager;
import org.jetbrains.annotations.NotNull;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by Andrey Titov on 4/4/14.
*
* Controller for SonarQube Server management page
*/
public class ServerManagementProjectTab extends EditProjectTab {
@NotNull
private final SQSManager mySqsManager;
@NotNull
private final SecurityContext securityContext;
private static final String TAB_TITLE = "SonarQube Servers";
public ServerManagementProjectTab(@NotNull final PagePlaces pagePlaces,
@NotNull final PluginDescriptor pluginDescriptor,
@NotNull final SQSManager sqsManager,
@NotNull final SecurityContext securityContext) {
super(pagePlaces, pluginDescriptor.getPluginName(), "manageSonarServers.jsp", TAB_TITLE);
mySqsManager = sqsManager;
this.securityContext = securityContext;
addCssFile(pluginDescriptor.getPluginResourcesPath("manageSonarServers.css"));
addJsFile(pluginDescriptor.getPluginResourcesPath("manageSonarServers.js"));
}
@NotNull
@Override
public String getTabTitle(@NotNull final HttpServletRequest request) {
final SProject currentProject = getProject(request);
if (currentProject == null) {
return TAB_TITLE;
}
final List<SQSInfo> availableServers = mySqsManager.getOwnAvailableServers(currentProject);
if (availableServers.isEmpty()) {
return TAB_TITLE;
}
return TAB_TITLE + " (" + availableServers.size() + ")";
}
@Override
public void fillModel(@NotNull final Map<String, Object> model, @NotNull final HttpServletRequest request) {
final SProject currentProject = getProject(request);
if (currentProject == null) {
return;
}
Map<SProject, List<SQSInfo>> infoMap = getServersMap(currentProject);
model.put("availableServersMap", infoMap);
model.put("projectId", currentProject.getExternalId());
model.put("userHasPermissionManagement", AuthUtil.hasPermissionToManageProject(securityContext.getAuthorityHolder(), currentProject.getProjectId()));
}
private Map<SProject, List<SQSInfo>> getServersMap(@NotNull final SProject currentProject) {
SProject project = currentProject;
Map<SProject, List<SQSInfo>> infoMap = new HashMap<SProject, List<SQSInfo>>();
while (project != null) {
if (infoMap.containsKey(project)) {
break;
}
final List<SQSInfo> availableServers = mySqsManager.getOwnAvailableServers(project);
if (!availableServers.isEmpty()) {
infoMap.put(project, availableServers);
}
project = project.getParentProject();
}
return infoMap;
}
}