diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2014-08-05 13:48:54 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2014-08-05 13:49:05 +0200 |
commit | 3fe9c15f8bc47915dcfbc2d341ed203295b11521 (patch) | |
tree | a2fc50f7dc68f7bce209ee22b8bd7cc2f39f5fb4 | |
parent | 41c8052a54088dec24b551847e46e4d1680b1cc0 (diff) | |
download | sonarqube-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.java | 54 | ||||
-rw-r--r-- | sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java | 36 |
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 |