]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5624 Create ComputationService and fix tests. Connect to WS
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 26 Sep 2014 15:43:22 +0000 (17:43 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 26 Sep 2014 15:59:52 +0000 (17:59 +0200)
server/sonar-server/src/main/java/org/sonar/server/batch/UploadReportAction.java
server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java [new file with mode: 0644]
server/sonar-server/src/main/java/org/sonar/server/computation/package-info.java [new file with mode: 0644]
server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java
server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java
server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml
sonar-core/src/main/java/org/sonar/core/computation/db/AnalysisReportDto.java

index 52f2840626dc94916f49b2f93e7e9c85aebca543..92f053e637064bbed1e5fe4799bd911bbe0fa5e2 100644 (file)
@@ -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 (file)
index 0000000..37cd3ab
--- /dev/null
@@ -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 (file)
index 0000000..ea40264
--- /dev/null
@@ -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;
index 934246ea221c068d149ad980f2a4bcde7d9b686a..605acb68b464cc56d37acfbd4b23706d6c203586 100644 (file)
@@ -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> K getDao(Map<Class, DaoComponent> map, Class<K> clazz) {
     return (K) map.get(clazz);
   }
index 70bb0ff0d7d5819818668e9f2d22d7d12017c99c..a6261b191adfd0d2a8e6a68c30e5c009a2285c3f 100644 (file)
@@ -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);
     }
index df007dfa4e377c5c4023eb03f7c9ec87c4292a93..a3bd0361be4fb89da09ab516414d29fdd70c73f2 100644 (file)
@@ -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
index 5ade2e4549e737e16912a023a3934528fd20bca1..cc07f14d388595b1a22402fb111a3cf881f049a2 100644 (file)
@@ -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"));
 
index a3c233cbee39670ffc6cfc0b041f31b3e4c6c0c5..1275fb9bd3d8d8f902a9721a2bf5a2719bdc13f4 100644 (file)
@@ -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"
       />
index 25a244379d93e0a00ded25788347683f0db10cd7..043fd5303e956468ad5573b308394a0bbcd918ea 100644 (file)
@@ -30,9 +30,13 @@ public class AnalysisReportDto extends Dto<String> {
 
   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<String> {
     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;
   }