From 77661fd38dc63b1fae965733fbda8a53ece0a7fa Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Thu, 29 Mar 2012 19:47:42 +0200 Subject: [PATCH] Add MyBatis mapper to select rows from PROJECTS --- .../org/sonar/core/purge/PurgeMapper.java | 2 + .../org/sonar/core/resource/ResourceDao.java | 18 +++++ .../core/resource/ResourceIndexerDao.java | 16 +++-- .../sonar/core/resource/ResourceMapper.java | 12 ++++ .../sonar/core/resource/ResourceQuery.java | 43 ++++++++++++ .../sonar/core/resource/ResourceMapper.xml | 27 ++++++- .../sonar/core/resource/ResourceDaoTest.java | 70 +++++++++++++++++++ .../shouldDeleteResource.xml | 2 + 8 files changed, 181 insertions(+), 9 deletions(-) create mode 100644 sonar-core/src/main/java/org/sonar/core/resource/ResourceQuery.java diff --git a/sonar-core/src/main/java/org/sonar/core/purge/PurgeMapper.java b/sonar-core/src/main/java/org/sonar/core/purge/PurgeMapper.java index 2deacdd4600..3ec22dde831 100644 --- a/sonar-core/src/main/java/org/sonar/core/purge/PurgeMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/purge/PurgeMapper.java @@ -75,6 +75,8 @@ public interface PurgeMapper { void deleteResourceActionPlans(long resourceId); + void deleteAuthors(long developerId); + void closeResourceReviews(long resourceId); List selectPurgeableSnapshotsWithEvents(long resourceId); 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 e97fb1d7795..480e75ce054 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 @@ -32,6 +32,24 @@ public class ResourceDao { this.mybatis = mybatis; } + public List getResources(ResourceQuery query) { + SqlSession session = mybatis.openSession(); + try { + return session.getMapper(ResourceMapper.class).selectResources(query); + } finally { + MyBatis.closeQuietly(session); + } + } + + public List getResourceIds(ResourceQuery query) { + SqlSession session = mybatis.openSession(); + try { + return session.getMapper(ResourceMapper.class).selectResourceIds(query); + } finally { + MyBatis.closeQuietly(session); + } + } + public ResourceDto getResource(long projectId) { SqlSession session = mybatis.openSession(); try { diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceIndexerDao.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceIndexerDao.java index 66148d5fba0..d7e26e8a00e 100644 --- a/sonar-core/src/main/java/org/sonar/core/resource/ResourceIndexerDao.java +++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceIndexerDao.java @@ -68,7 +68,7 @@ public class ResourceIndexerDao { final SqlSession session = mybatis.openBatchSession(); try { final ResourceIndexerMapper mapper = session.getMapper(ResourceIndexerMapper.class); - session.select("selectRootProjectIds", /* workaround to get booleans */ResourceIndexerQuery.create(), new ResultHandler() { + session.select("org.sonar.core.resource.ResourceIndexerMapper.selectRootProjectIds", /* workaround to get booleans */ResourceIndexerQuery.create(), new ResultHandler() { public void handleResult(ResultContext context) { Integer rootProjectId = (Integer) context.getResultObject(); doIndexProject(rootProjectId, session, mapper); @@ -90,7 +90,7 @@ public class ResourceIndexerDao { .setScopes(NOT_RENAMABLE_SCOPES) .setRootProjectId(rootProjectId); - session.select("selectResources", query, new ResultHandler() { + session.select("org.sonar.core.resource.ResourceIndexerMapper.selectResources", query, new ResultHandler() { public void handleResult(ResultContext context) { ResourceDto resource = (ResourceDto) context.getResultObject(); doIndex(resource, mapper); @@ -105,7 +105,7 @@ public class ResourceIndexerDao { .setScopes(RENAMABLE_SCOPES) .setRootProjectId(rootProjectId); - session.select("selectResources", query, new ResultHandler() { + session.select("org.sonar.core.resource.ResourceIndexerMapper.selectResources", query, new ResultHandler() { public void handleResult(ResultContext context) { ResourceDto resource = (ResourceDto) context.getResultObject(); @@ -133,9 +133,13 @@ public class ResourceIndexerDao { } } - public boolean indexResource(int id, String name, String qualifier, int rootProjectId) { + public boolean indexResource(int id, String name, String qualifier, int rootId) { + return indexResource(id, name, qualifier, rootId, false); + } + + public boolean indexResource(int id, String name, String qualifier, int rootId, boolean force) { boolean indexed = false; - if (isIndexableQualifier(qualifier)) { + if (force || isIndexableQualifier(qualifier)) { SqlSession session = mybatis.openSession(); try { String key = nameToKey(name); @@ -147,7 +151,7 @@ public class ResourceIndexerDao { ResourceIndexDto dto = new ResourceIndexDto() .setResourceId(id) .setQualifier(qualifier) - .setRootProjectId(rootProjectId) + .setRootProjectId(rootId) .setNameSize(name.length()); for (int position = 0; position <= key.length() - MINIMUM_KEY_SIZE; position++) { diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java index 626dfd61f12..f08842207ea 100644 --- a/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java @@ -23,6 +23,18 @@ import java.util.List; public interface ResourceMapper { SnapshotDto selectSnapshot(Long snapshotId); + ResourceDto selectResource(long id); + List selectDescendantProjects(long rootProjectId); + + /** + * @since 2.15 + */ + List selectResources(ResourceQuery query); + + /** + * @since 2.15 + */ + List selectResourceIds(ResourceQuery query); } diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceQuery.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceQuery.java new file mode 100644 index 00000000000..8539b21412f --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceQuery.java @@ -0,0 +1,43 @@ +/* + * Sonar, open source software quality management tool. + * Copyright (C) 2008-2012 SonarSource + * mailto:contact AT sonarsource DOT com + * + * Sonar 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. + * + * Sonar 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 Sonar; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ +package org.sonar.core.resource; + +/** + * @since 2.15 + */ +public final class ResourceQuery { + private String[] qualifiers = null; + + private ResourceQuery() { + } + + public static ResourceQuery create() { + return new ResourceQuery(); + } + + public String[] getQualifiers() { + return qualifiers; + } + + public ResourceQuery setQualifiers(String[] qualifiers) { + this.qualifiers = qualifiers; + return this; + } +} diff --git a/sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml b/sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml index 2245bab7513..6df6d82844d 100644 --- a/sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/resource/ResourceMapper.xml @@ -3,7 +3,6 @@ - @@ -31,9 +30,31 @@ + + + + + select * from projects where id=#{id} +