]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6262 Not delete custom links 145/head
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 12 Mar 2015 14:12:45 +0000 (15:12 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 12 Mar 2015 15:06:21 +0000 (16:06 +0100)
server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistComponentLinksStep.java
server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistComponentLinksStepTest.java
server/sonar-server/src/test/resources/org/sonar/server/computation/step/PersistComponentLinksStepTest/not_delete_custom_link.xml [new file with mode: 0644]
sonar-core/src/main/java/org/sonar/core/component/ComponentLinkDto.java

index ab8af0dee3b076656a090abcb007da2975b2b4f0..4bb8a46ed6ec04719c65e9cbcaaff616bb1c9679 100644 (file)
@@ -117,7 +117,7 @@ public class PersistComponentLinksStep implements ComputationStep {
     }
 
     for (ComponentLinkDto dto : previousLinks) {
-      if (!linkType.contains(dto.getType())) {
+      if (!linkType.contains(dto.getType()) && ComponentLinkDto.PROVIDED_TYPES.contains(dto.getType())) {
         dbClient.componentLinkDao().delete(session, dto.getId());
       }
     }
@@ -126,15 +126,15 @@ public class PersistComponentLinksStep implements ComputationStep {
   private static String convertType(Constants.ComponentLinkType type) {
     switch (type) {
       case HOME:
-        return "homepage";
+        return ComponentLinkDto.TYPE_HOME_PAGE;
       case SCM:
-        return "scm";
+        return ComponentLinkDto.TYPE_SOURCES;
       case SCM_DEV:
-        return "scm_dev";
+        return ComponentLinkDto.TYPE_SOURCES_DEV;
       case CI:
-        return "ci";
+        return ComponentLinkDto.TYPE_CI;
       case ISSUE:
-        return "issue";
+        return ComponentLinkDto.TYPE_ISSUE_TRACKER;
       default:
         throw new IllegalArgumentException(String.format("Unsupported type %s", type.name()));
     }
index 0d19001274f2eec557729e996af52f3355ab71a1..af08b5877dd4e6f9a875569bc1dc715c1b5cedfc 100644 (file)
@@ -86,6 +86,7 @@ import org.sonar.server.component.DefaultComponentFinder;
 import org.sonar.server.component.DefaultRubyComponentService;
 import org.sonar.server.component.db.ComponentDao;
 import org.sonar.server.component.db.ComponentIndexDao;
+import org.sonar.server.component.db.ComponentLinkDao;
 import org.sonar.server.component.db.SnapshotDao;
 import org.sonar.server.component.ws.*;
 import org.sonar.server.computation.ComputationThreadLauncher;
@@ -239,13 +240,6 @@ class ServerComponents {
       System2.INSTANCE,
 
       // DB
-      MeasureDao.class,
-      MetricDao.class,
-      ComponentDao.class,
-      SnapshotDao.class,
-      MeasureFilterDao.class,
-      AnalysisReportDao.class,
-      ComponentIndexDao.class,
       DbClient.class,
 
       // Elasticsearch
@@ -277,7 +271,19 @@ class ServerComponents {
       IssueIndex.class,
       IssueDao.class,
 
-      ActivityDao.class
+      // measures
+      MeasureDao.class,
+      MetricDao.class,
+      MeasureFilterDao.class,
+
+      // components
+      ComponentDao.class,
+      ComponentIndexDao.class,
+      ComponentLinkDao.class,
+      SnapshotDao.class,
+
+      ActivityDao.class,
+      AnalysisReportDao.class
       ));
     components.addAll(CorePropertyDefinitions.all());
     components.addAll(DatabaseMigrations.CLASSES);
index 1e5ef844846fd490f90270bbe80264901aa0af74..ccc948ea01e6a34286abf86a12a3c2753038076e 100644 (file)
@@ -194,6 +194,29 @@ public class PersistComponentLinksStepTest {
     assertThat(dbTester.countRowsOfTable("project_links")).isEqualTo(0);
   }
 
+  @Test
+  public void not_delete_custom_link() throws Exception {
+    dbTester.prepareDbUnit(getClass(), "not_delete_custom_link.xml");
+
+    File reportDir = temp.newFolder();
+    BatchReportWriter writer = new BatchReportWriter(reportDir);
+    writer.writeMetadata(BatchReport.Metadata.newBuilder()
+      .setRootComponentRef(1)
+      .setProjectKey("PROJECT_KEY")
+      .setAnalysisDate(150000000L)
+      .build());
+
+    writer.writeComponent(BatchReport.Component.newBuilder()
+      .setRef(1)
+      .setType(Constants.ComponentType.PROJECT)
+      .setUuid("ABCD")
+      .build());
+
+    step.execute(new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class)));
+
+    dbTester.assertDbUnit(getClass(), "not_delete_custom_link.xml", "project_links");
+  }
+
   @Test
   public void fail_when_trying_to_add_same_link_type_multiple_times() throws Exception {
     dbTester.prepareDbUnit(getClass(), "empty.xml");
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/step/PersistComponentLinksStepTest/not_delete_custom_link.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/step/PersistComponentLinksStepTest/not_delete_custom_link.xml
new file mode 100644 (file)
index 0000000..78c6c1d
--- /dev/null
@@ -0,0 +1,5 @@
+<dataset>
+
+  <project_links id="1" component_uuid="ABCD" link_type="custom" name="custom" href="http://www.custom.org"/>
+
+</dataset>
index 521298efee5e80caba1c71199aee695a6619b696..8f32fa0d0da04dd9002f6a8ab81bda2f9cb94100 100644 (file)
 
 package org.sonar.core.component;
 
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
 /**
  * Component links should be merge in a 'links' column (using protobuf for instance) of the projects table.
  * But to do this we'll have to wait for the measure filters page (where links are displayed) to be rewritten in JS/WS (because it's in Rails for the moment).
  */
 public class ComponentLinkDto {
 
+  public static String TYPE_HOME_PAGE = "homepage";
+  public static String TYPE_CI = "ci";
+  public static String TYPE_ISSUE_TRACKER = "issue";
+  public static String TYPE_SOURCES = "scm";
+  public static String TYPE_SOURCES_DEV = "scm_dev";
+
+  public static List<String> PROVIDED_TYPES = ImmutableList.of(TYPE_HOME_PAGE, TYPE_CI, TYPE_ISSUE_TRACKER, TYPE_SOURCES, TYPE_SOURCES_DEV);
+
   private Long id;
   private String componentUuid;
   private String type;