From 3bd60acafe0020c0de4f8f29eff70876176fdcb1 Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Fri, 26 Sep 2014 17:43:22 +0200 Subject: [PATCH] SONAR-5624 Create ComputationService and fix tests. Connect to WS --- .../server/batch/UploadReportAction.java | 7 ++- .../computation/ComputationService.java | 56 +++++++++++++++++++ .../server/computation/package-info.java | 24 ++++++++ .../java/org/sonar/server/db/DbClient.java | 7 +++ .../server/platform/ServerComponents.java | 6 ++ .../org/sonar/server/batch/BatchWsTest.java | 3 +- .../computation/db/AnalysisReportDaoTest.java | 3 +- .../AnalysisReportDaoTest/insert-result.xml | 2 +- .../computation/db/AnalysisReportDto.java | 10 +++- 9 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java create mode 100644 server/sonar-server/src/main/java/org/sonar/server/computation/package-info.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java index 52f2840626d..92f053e6370 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java @@ -30,6 +30,7 @@ import org.sonar.core.component.AuthorizedComponentDto; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; +import org.sonar.server.computation.ComputationService; import org.sonar.server.db.DbClient; import org.sonar.server.issue.index.IssueAuthorizationIndex; import org.sonar.server.issue.index.IssueIndex; @@ -47,12 +48,14 @@ public class UploadReportAction implements RequestHandler { private final IndexClient index; private final InternalPermissionService permissionService; private final Settings settings; + private final ComputationService computationService; - public UploadReportAction(DbClient dbClient, IndexClient index, InternalPermissionService permissionService, Settings settings) { + public UploadReportAction(DbClient dbClient, IndexClient index, InternalPermissionService permissionService, Settings settings, ComputationService computationService) { this.dbClient = dbClient; this.index = index; this.permissionService = permissionService; this.settings = settings; + this.computationService = computationService; } void define(WebService.NewController controller) { @@ -81,6 +84,8 @@ public class UploadReportAction implements RequestHandler { String projectKey = request.mandatoryParam(PARAM_PROJECT); AuthorizedComponentDto project = dbClient.componentDao().getAuthorizedComponentByKey(projectKey, session); + computationService.create(projectKey); + // Synchronize project permission indexes if no permission found on it if (index.get(IssueAuthorizationIndex.class).getNullableByKey(project.key()) == null) { permissionService.synchronizePermissions(session, project.key()); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java new file mode 100644 index 00000000000..37cd3abc274 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java @@ -0,0 +1,56 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.computation; + +import org.sonar.api.ServerComponent; +import org.sonar.core.computation.db.AnalysisReportDto; +import org.sonar.core.persistence.DbSession; +import org.sonar.server.computation.db.AnalysisReportDao; +import org.sonar.server.db.DbClient; + +import static org.sonar.core.computation.db.AnalysisReportDto.Status.PENDING; + +/** + * since 5.0 + */ +public class ComputationService implements ServerComponent { + private DbClient dbClient; + + public ComputationService(DbClient dbClient) { + this.dbClient = dbClient; + } + + public void create(String projectKey) { + AnalysisReportDto report = new AnalysisReportDto() + .setProjectKey(projectKey) + .setStatus(PENDING); + + AnalysisReportDao dao = dbClient.analysisReportDao(); + + DbSession session = dbClient.openSession(false); + try { + dao.insert(session, report); + session.commit(); + } finally { + session.close(); + } + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/package-info.java b/server/sonar-server/src/main/java/org/sonar/server/computation/package-info.java new file mode 100644 index 00000000000..ea402648a75 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/package-info.java @@ -0,0 +1,24 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +@ParametersAreNonnullByDefault +package org.sonar.server.computation; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java b/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java index 934246ea221..605acb68b46 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java +++ b/server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java @@ -36,6 +36,7 @@ import org.sonar.core.user.UserDao; import org.sonar.server.activity.db.ActivityDao; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.component.db.SnapshotDao; +import org.sonar.server.computation.db.AnalysisReportDao; import org.sonar.server.issue.db.IssueAuthorizationDao; import org.sonar.server.issue.db.IssueDao; import org.sonar.server.measure.persistence.MeasureDao; @@ -71,6 +72,7 @@ public class DbClient implements ServerComponent { private final IssueDao issueDao; private final IssueAuthorizationDao issueAuthorizationDao; private final ActionPlanDao actionPlanDao; + private final AnalysisReportDao analysisReportDao; public DbClient(Database db, MyBatis myBatis, DaoComponent... daoComponents) { this.db = db; @@ -98,6 +100,7 @@ public class DbClient implements ServerComponent { issueDao = getDao(map, IssueDao.class); issueAuthorizationDao = getDao(map, IssueAuthorizationDao.class); actionPlanDao = getDao(map, ActionPlanDao.class); + analysisReportDao = getDao(map, AnalysisReportDao.class); } public Database database() { @@ -180,6 +183,10 @@ public class DbClient implements ServerComponent { return actionPlanDao; } + public AnalysisReportDao analysisReportDao() { + return analysisReportDao; + } + private K getDao(Map map, Class clazz) { return (K) map.get(clazz); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java index 70bb0ff0d7d..a6261b191ad 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java @@ -85,6 +85,8 @@ import org.sonar.server.component.DefaultRubyComponentService; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.component.db.SnapshotDao; import org.sonar.server.component.ws.*; +import org.sonar.server.computation.ComputationService; +import org.sonar.server.computation.db.AnalysisReportDao; import org.sonar.server.config.ws.PropertiesWs; import org.sonar.server.db.DatabaseChecker; import org.sonar.server.db.DbClient; @@ -231,6 +233,7 @@ class ServerComponents { MeasureFilterDao.class, ActivityDao.class, GroupDao.class, + AnalysisReportDao.class, // Elasticsearch SearchClient.class, @@ -578,6 +581,9 @@ class ServerComponents { pico.addSingleton(FileDesignWidget.class); pico.addSingleton(PackageDesignWidget.class); + // Compute engine + pico.addSingleton(ComputationService.class); + for (Object components : level4AddedComponents) { pico.addSingleton(components); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java index df007dfa4e3..a3bd0361be4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java @@ -31,6 +31,7 @@ import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.config.Settings; import org.sonar.api.resources.Languages; import org.sonar.core.properties.PropertiesDao; +import org.sonar.server.computation.ComputationService; import org.sonar.server.db.DbClient; import org.sonar.server.permission.InternalPermissionService; import org.sonar.server.qualityprofile.QProfileFactory; @@ -66,7 +67,7 @@ public class BatchWsTest { new GlobalReferentialsAction(mock(DbClient.class), mock(PropertiesDao.class)), new ProjectReferentialsAction(mock(DbClient.class), mock(PropertiesDao.class), mock(QProfileFactory.class), mock(QProfileLoader.class), mock(RuleService.class), mock(Languages.class)), - new UploadReportAction(mock(DbClient.class), mock(IndexClient.class), mock(InternalPermissionService.class), new Settings()))); + new UploadReportAction(mock(DbClient.class), mock(IndexClient.class), mock(InternalPermissionService.class), new Settings(), mock(ComputationService.class)))); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java index 5ade2e4549e..cc07f14d388 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java @@ -32,6 +32,7 @@ import org.sonar.core.persistence.TestDatabase; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.sonar.core.computation.db.AnalysisReportDto.Status.PENDING; public class AnalysisReportDaoTest { private AnalysisReportDao dao; @@ -60,7 +61,7 @@ public class AnalysisReportDaoTest { AnalysisReportDto report = new AnalysisReportDto() .setProjectKey("123456789-987654321") .setData("data-project") - .setStatus("pending"); + .setStatus(PENDING); report.setCreatedAt(DateUtils.parseDate("2014-09-24")) .setUpdatedAt(DateUtils.parseDate("2014-09-25")); diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml index a3c233cbee3..1275fb9bd3d 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml @@ -3,7 +3,7 @@ id="1" project_key="123456789-987654321" report_data="data-project" - report_status="pending" + report_status="PENDING" created_at="2014-09-24" updated_at="2014-09-26" /> diff --git a/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java b/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java index 25a244379d9..043fd5303e9 100644 --- a/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java +++ b/sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java @@ -30,9 +30,13 @@ public class AnalysisReportDto extends Dto { private Long id; private String projectKey; - private String status; + private Status status; private String data; + public enum Status { + PENDING + } + public String getProjectKey() { return projectKey; } @@ -42,11 +46,11 @@ public class AnalysisReportDto extends Dto { return this; } - public String getStatus() { + public Status getStatus() { return status; } - public AnalysisReportDto setStatus(String status) { + public AnalysisReportDto setStatus(Status status) { this.status = status; return this; } -- 2.39.5