aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2014-08-05 13:48:54 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2014-08-05 13:49:05 +0200
commit3fe9c15f8bc47915dcfbc2d341ed203295b11521 (patch)
treea2fc50f7dc68f7bce209ee22b8bd7cc2f39f5fb4
parent41c8052a54088dec24b551847e46e4d1680b1cc0 (diff)
downloadsonarqube-3fe9c15f8bc47915dcfbc2d341ed203295b11521.tar.gz
sonarqube-3fe9c15f8bc47915dcfbc2d341ed203295b11521.zip
SONAR-5349 Unable to run preview analysis on a provisioned project
-rw-r--r--sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java54
-rw-r--r--sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java36
2 files changed, 68 insertions, 22 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java
index 6bc48a279b4..dd1095d88ba 100644
--- a/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java
+++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java
@@ -23,9 +23,10 @@ import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.ibatis.session.SqlSession;
-import org.sonar.core.persistence.DaoComponent;
import org.sonar.api.component.Component;
import org.sonar.core.component.ComponentDto;
+import org.sonar.core.persistence.DaoComponent;
+import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import javax.annotation.CheckForNull;
@@ -198,21 +199,64 @@ public class ResourceDao implements DaoComponent {
}
}
+ /**
+ * Return the root project of a component.
+ * Will return the component itself if it's already the root project
+ * Can return null if the component that does exists.
+ *
+ * The implementation should rather use a new column already containing the root project, see https://jira.codehaus.org/browse/SONAR-5188.
+ */
@CheckForNull
public ResourceDto getRootProjectByComponentKey(String componentKey) {
- SqlSession session = mybatis.openSession(false);
+ DbSession session = mybatis.openSession(false);
try {
- return session.getMapper(ResourceMapper.class).selectRootProjectByComponentKey(componentKey);
+ ResourceDto component = getResource(ResourceQuery.create().setKey(componentKey), session);
+ if (component != null) {
+ Long rootId = component.getRootId();
+ if (rootId != null) {
+ return getParentModuleByComponentId(rootId, session);
+ } else {
+ return component;
+ }
+ }
+ return null;
} finally {
MyBatis.closeQuietly(session);
}
}
@CheckForNull
+ ResourceDto getParentModuleByComponentId(Long componentId, DbSession session) {
+ ResourceDto component = getResource(componentId, session);
+ if (component != null) {
+ Long rootId = component.getRootId();
+ if (rootId != null) {
+ return getParentModuleByComponentId(rootId, session);
+ } else {
+ return component;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Return the root project of a component.
+ * Will return the component itself if it's already the root project
+ * Can return null if the component that does exists.
+ *
+ * The implementation should rather use a new column already containing the root project, see https://jira.codehaus.org/browse/SONAR-5188.
+ */
+ @CheckForNull
public ResourceDto getRootProjectByComponentId(long componentId) {
- SqlSession session = mybatis.openSession(false);
+ DbSession session = mybatis.openSession(false);
try {
- return session.getMapper(ResourceMapper.class).selectRootProjectByComponentId(componentId);
+ ResourceDto component = getParentModuleByComponentId(componentId, session);
+ Long rootId = component != null ? component.getRootId() : null;
+ if (rootId != null) {
+ return getParentModuleByComponentId(rootId, session);
+ } else {
+ return component;
+ }
} finally {
MyBatis.closeQuietly(session);
}
diff --git a/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java b/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java
index 0c5b71fa4bd..756136fd380 100644
--- a/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java
@@ -158,7 +158,7 @@ public class ResourceDaoTest extends AbstractDaoTestCase {
public void getResourceIds_filter_by_qualifier() {
setupData("fixture");
- List<Long> ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {"TRK", "BRC"}));
+ List<Long> ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[]{"TRK", "BRC"}));
assertThat(ids).containsOnly(1L, 2L);
ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {"XXX"}));
@@ -235,31 +235,33 @@ public class ResourceDaoTest extends AbstractDaoTestCase {
}
@Test
- public void should_find_root_project_by_component_key() {
+ public void find_root_project_by_component_key() {
setupData("fixture");
- ResourceDto resource = dao.getRootProjectByComponentKey("org.struts:struts-core:src/org/struts/RequestContext.java");
- assertThat(resource.getName()).isEqualTo("Struts");
-
- resource = dao.getRootProjectByComponentKey("org.struts:struts-core:src/org/struts");
- assertThat(resource.getName()).isEqualTo("Struts");
-
- resource = dao.getRootProjectByComponentKey("org.struts:struts-core");
- assertThat(resource.getName()).isEqualTo("Struts");
+ assertThat(dao.getRootProjectByComponentKey("org.struts:struts-core:src/org/struts/RequestContext.java").getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getRootProjectByComponentKey("org.struts:struts-core:src/org/struts").getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getRootProjectByComponentKey("org.struts:struts-core").getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getRootProjectByComponentKey("org.struts:struts").getKey()).isEqualTo("org.struts:struts");
}
@Test
- public void should_find_root_project_by_component_Id() {
+ public void find_root_project_by_component_Id() {
setupData("fixture");
- ResourceDto resource = dao.getRootProjectByComponentId(4l);
- assertThat(resource.getName()).isEqualTo("Struts");
+ assertThat(dao.getRootProjectByComponentId(4l).getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getRootProjectByComponentId(3l).getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getRootProjectByComponentId(2l).getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getRootProjectByComponentId(1l).getKey()).isEqualTo("org.struts:struts");
+ }
- resource = dao.getRootProjectByComponentId(3l);
- assertThat(resource.getName()).isEqualTo("Struts");
+ @Test
+ public void find_parent_by_component_id() {
+ setupData("fixture");
- resource = dao.getRootProjectByComponentId(2l);
- assertThat(resource.getName()).isEqualTo("Struts");
+ assertThat(dao.getParentModuleByComponentId(4l, session).getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getParentModuleByComponentId(3l, session).getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getParentModuleByComponentId(2l, session).getKey()).isEqualTo("org.struts:struts");
+ assertThat(dao.getParentModuleByComponentId(1l, session).getKey()).isEqualTo("org.struts:struts");
}
@Test