aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsimonbrandhof <simon.brandhof@gmail.com>2011-12-21 23:03:58 +0100
committersimonbrandhof <simon.brandhof@gmail.com>2011-12-21 23:03:58 +0100
commit27ef81ee84252c85e3dd09d44d88fb441700182b (patch)
treede09fc298f72e31f7ac58adbd819cf3603e1272e
parentb87e9dae5c6f0a10f60340f69e78bfe4146e4ac5 (diff)
downloadsonarqube-27ef81ee84252c85e3dd09d44d88fb441700182b.tar.gz
sonarqube-27ef81ee84252c85e3dd09d44d88fb441700182b.zip
SONAR-983 i18n, better purge, fix NPE when deleted resource
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java2
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerCommands.java56
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeUtils.java27
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResources.java11
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResources.java9
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/api/PurgeUtilsTest.java1
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResourcesTest.java6
-rw-r--r--plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResourcesTest.java6
-rw-r--r--plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties7
-rw-r--r--sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerDao.java18
-rw-r--r--sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerMapper.java2
-rw-r--r--sonar-core/src/main/resources/org/sonar/persistence/resource/ResourceIndexerMapper.xml7
-rw-r--r--sonar-core/src/test/java/org/sonar/persistence/resource/ResourceIndexerDaoTest.java9
-rw-r--r--sonar-core/src/test/resources/org/sonar/persistence/resource/ResourceIndexerDaoTest/shouldDeleteIndexes-result.xml8
-rw-r--r--sonar-core/src/test/resources/org/sonar/persistence/resource/ResourceIndexerDaoTest/shouldDeleteIndexes.xml31
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/models/project.rb1
-rw-r--r--sonar-server/src/main/webapp/WEB-INF/app/views/search/_autocomplete.html.erb25
17 files changed, 48 insertions, 178 deletions
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
index f449b5c38e0..f8454462dde 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/DbCleanerPlugin.java
@@ -22,7 +22,6 @@ package org.sonar.plugins.dbcleaner;
import org.sonar.api.Properties;
import org.sonar.api.Property;
import org.sonar.api.SonarPlugin;
-import org.sonar.plugins.dbcleaner.api.DbCleanerCommands;
import org.sonar.plugins.dbcleaner.api.DbCleanerConstants;
import org.sonar.plugins.dbcleaner.period.DefaultPeriodCleaner;
import org.sonar.plugins.dbcleaner.period.PeriodPurge;
@@ -50,7 +49,6 @@ public final class DbCleanerPlugin extends SonarPlugin {
return Arrays.asList(
// shared components
DefaultPeriodCleaner.class,
- DbCleanerCommands.class,
// purges
PurgeOrphanResources.class, PurgeEntities.class, PurgeRuleMeasures.class, PurgeUnprocessed.class, PurgeDeletedResources.class,
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerCommands.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerCommands.java
deleted file mode 100644
index b010988a0cd..00000000000
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/DbCleanerCommands.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 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.plugins.dbcleaner.api;
-
-import org.sonar.api.BatchExtension;
-import org.sonar.api.database.DatabaseSession;
-import org.sonar.api.database.model.ResourceModel;
-import org.sonar.persistence.resource.ResourceIndexerDao;
-
-import java.util.List;
-
-/**
- * @since 2.13
- */
-public class DbCleanerCommands implements BatchExtension {
-
- private DatabaseSession session;
- private ResourceIndexerDao resourceIndexer;
-
- public DbCleanerCommands(DatabaseSession session, ResourceIndexerDao resourceIndexer) {
- this.session = session;
- this.resourceIndexer = resourceIndexer;
- }
-
- public DbCleanerCommands deleteSnapshots(List<Integer> snapshotIds, boolean includeDependents) {
- if (includeDependents) {
- PurgeUtils.deleteSnapshotsData(session, snapshotIds);
- } else {
- PurgeUtils.deleteSnapshots(session, snapshotIds);
- }
- return this;
- }
-
- public DbCleanerCommands deleteResources(List<Integer> resourceIds) {
- PurgeUtils.executeQuery(session, "", resourceIds, "DELETE FROM " + ResourceModel.class.getSimpleName() + " WHERE id in (:ids)");
- resourceIndexer.delete(resourceIds);
- return this;
- }
-}
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeUtils.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeUtils.java
index 93ec2d859ee..390f4f0736f 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeUtils.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeUtils.java
@@ -19,21 +19,16 @@
*/
package org.sonar.plugins.dbcleaner.api;
-import java.util.List;
-
-import javax.persistence.Query;
-
import org.apache.commons.configuration.Configuration;
import org.sonar.api.batch.Event;
import org.sonar.api.database.DatabaseSession;
-import org.sonar.api.database.model.MeasureData;
-import org.sonar.api.database.model.MeasureModel;
-import org.sonar.api.database.model.RuleFailureModel;
-import org.sonar.api.database.model.Snapshot;
-import org.sonar.api.database.model.SnapshotSource;
+import org.sonar.api.database.model.*;
import org.sonar.api.design.DependencyDto;
import org.sonar.api.utils.TimeProfiler;
+import javax.persistence.Query;
+import java.util.List;
+
/**
* @since 2.5
*/
@@ -106,7 +101,7 @@ public final class PurgeUtils {
/**
* Delete DUPLICATIONS_INDEX table
- *
+ *
* @since 2.11
*/
private static void deleteDuplicationBlocks(DatabaseSession session, List<Integer> snapshotIds) {
@@ -127,6 +122,18 @@ public final class PurgeUtils {
executeQuery(session, "delete snapshots", snapshotIds, "delete from " + Snapshot.class.getSimpleName() + " s where s.id in (:ids)");
}
+ public static void deleteResources(DatabaseSession session, List<Integer> ids) {
+ executeQuery(session, "", ids, "DELETE FROM " + ResourceModel.class.getSimpleName() + " WHERE id in (:ids)");
+ deleteResourceIndex(session, ids);
+ }
+
+ /**
+ * Delete RESOURCE_INDEX table
+ */
+ public static void deleteResourceIndex(DatabaseSession session, List<Integer> resourceIds) {
+ executeNativeQuery(session, "delete resource_index", resourceIds, "delete from resource_index where resource_id in (:ids)");
+ }
+
/**
* Paginate execution of SQL requests to avoid exceeding size of rollback segment
*/
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResources.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResources.java
index dbf22a5004d..94d809c9bc4 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResources.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResources.java
@@ -22,9 +22,9 @@ package org.sonar.plugins.dbcleaner.purges;
import org.sonar.api.database.DatabaseSession;
import org.sonar.api.database.model.ResourceModel;
import org.sonar.api.database.model.Snapshot;
-import org.sonar.plugins.dbcleaner.api.DbCleanerCommands;
import org.sonar.plugins.dbcleaner.api.Purge;
import org.sonar.plugins.dbcleaner.api.PurgeContext;
+import org.sonar.plugins.dbcleaner.api.PurgeUtils;
import javax.persistence.Query;
import java.util.List;
@@ -34,16 +34,13 @@ import java.util.List;
*/
public final class PurgeDisabledResources extends Purge {
- private DbCleanerCommands dbCleanerCommands;
-
- public PurgeDisabledResources(DatabaseSession session, DbCleanerCommands dbCleanerCommands) {
+ public PurgeDisabledResources(DatabaseSession session) {
super(session);
- this.dbCleanerCommands = dbCleanerCommands;
}
public void purge(PurgeContext context) {
- dbCleanerCommands.deleteSnapshots(getSnapshotIds(), true);
- dbCleanerCommands.deleteResources(getResourceIds());
+ PurgeUtils.deleteSnapshotsData(getSession(), getSnapshotIds());
+ PurgeUtils.deleteResources(getSession(), getResourceIds());
}
private List<Integer> getResourceIds() {
diff --git a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResources.java b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResources.java
index a38ead16fbb..0e20f75598d 100644
--- a/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResources.java
+++ b/plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResources.java
@@ -21,9 +21,9 @@ package org.sonar.plugins.dbcleaner.purges;
import org.sonar.api.database.DatabaseSession;
import org.sonar.api.database.model.ResourceModel;
-import org.sonar.plugins.dbcleaner.api.DbCleanerCommands;
import org.sonar.plugins.dbcleaner.api.Purge;
import org.sonar.plugins.dbcleaner.api.PurgeContext;
+import org.sonar.plugins.dbcleaner.api.PurgeUtils;
import javax.persistence.Query;
import java.util.List;
@@ -33,11 +33,8 @@ import java.util.List;
*/
public final class PurgeOrphanResources extends Purge {
- private DbCleanerCommands dbCleanerCommands;
-
- public PurgeOrphanResources(DatabaseSession session, DbCleanerCommands dbCleanerCommands) {
+ public PurgeOrphanResources(DatabaseSession session) {
super(session);
- this.dbCleanerCommands = dbCleanerCommands;
}
public void purge(PurgeContext context) {
@@ -45,7 +42,7 @@ public final class PurgeOrphanResources extends Purge {
" r1 WHERE r1.rootId IS NOT NULL AND NOT EXISTS(FROM " + ResourceModel.class.getSimpleName() + " r2 WHERE r1.rootId=r2.id)");
List<Integer> idsToDelete = query.getResultList();
if (!idsToDelete.isEmpty()) {
- dbCleanerCommands.deleteResources(idsToDelete);
+ PurgeUtils.deleteResources(getSession(), idsToDelete);
}
}
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/api/PurgeUtilsTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/api/PurgeUtilsTest.java
index 97918dd3030..2b34186a8a5 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/api/PurgeUtilsTest.java
+++ b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/api/PurgeUtilsTest.java
@@ -22,7 +22,6 @@ package org.sonar.plugins.dbcleaner.api;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.junit.Test;
import org.sonar.jpa.test.AbstractDbUnitTestCase;
-import org.sonar.plugins.dbcleaner.api.PurgeUtils;
import java.sql.SQLException;
import java.util.Arrays;
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResourcesTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResourcesTest.java
index 2e87714e2e8..8ff3d3d84c3 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResourcesTest.java
+++ b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeDisabledResourcesTest.java
@@ -21,13 +21,9 @@ package org.sonar.plugins.dbcleaner.purges;
import org.junit.Test;
import org.sonar.jpa.test.AbstractDbUnitTestCase;
-import org.sonar.persistence.resource.ResourceIndexerDao;
-import org.sonar.plugins.dbcleaner.api.DbCleanerCommands;
import java.sql.SQLException;
-import static org.mockito.Mockito.mock;
-
public class PurgeDisabledResourcesTest extends AbstractDbUnitTestCase {
@Test
@@ -47,7 +43,7 @@ public class PurgeDisabledResourcesTest extends AbstractDbUnitTestCase {
private void assertPurge(String testName) {
setupData("sharedFixture", testName);
- new PurgeDisabledResources(getSession(), new DbCleanerCommands(getSession(), mock(ResourceIndexerDao.class))).purge(null);
+ new PurgeDisabledResources(getSession()).purge(null);
checkTables(testName, "snapshots", "project_measures");
}
}
diff --git a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResourcesTest.java b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResourcesTest.java
index 5f443998ce3..87ba7fb9c8b 100644
--- a/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResourcesTest.java
+++ b/plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/purges/PurgeOrphanResourcesTest.java
@@ -21,13 +21,9 @@ package org.sonar.plugins.dbcleaner.purges;
import org.junit.Test;
import org.sonar.jpa.test.AbstractDbUnitTestCase;
-import org.sonar.persistence.resource.ResourceIndexerDao;
-import org.sonar.plugins.dbcleaner.api.DbCleanerCommands;
import java.sql.SQLException;
-import static org.mockito.Mockito.mock;
-
public class PurgeOrphanResourcesTest extends AbstractDbUnitTestCase {
@Test
public void purgeOrphanResources() throws SQLException {
@@ -36,7 +32,7 @@ public class PurgeOrphanResourcesTest extends AbstractDbUnitTestCase {
private void assertPurge(String testName) {
setupData(testName);
- new PurgeOrphanResources(getSession(), new DbCleanerCommands(getSession(), mock(ResourceIndexerDao.class))).purge(null);
+ new PurgeOrphanResources(getSession()).purge(null);
checkTables(testName, "projects");
}
}
diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties
index 772bec2e4c7..165578cefb2 100644
--- a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties
+++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/core.properties
@@ -536,6 +536,13 @@ dashboard.Dashboard.description=Default dashboard
dashboard.Hotspots.name=Hotspots
dashboard.Hotspots.description=Most useful hotspots widgets
+#------------------------------------------------------------------------------
+#
+# SEARCH ENGINE FOR RESOURCES
+#
+#------------------------------------------------------------------------------
+search.results=results
+search.duration=({0} seconds)
#------------------------------------------------------------------------------
#
diff --git a/sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerDao.java b/sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerDao.java
index 68561370ab7..99b9ebe845c 100644
--- a/sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerDao.java
+++ b/sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerDao.java
@@ -77,24 +77,6 @@ public class ResourceIndexerDao {
return this;
}
- public ResourceIndexerDao delete(List<Integer> resourceIds) {
- final SqlSession sqlSession = mybatis.openSession();
- try {
- ResourceIndexerMapper mapper = sqlSession.getMapper(ResourceIndexerMapper.class);
- List<List<Integer>> partitionsOfResourceIds = Lists.partition(resourceIds, DatabaseUtils.MAX_IN_ELEMENTS);
- for (List<Integer> partitionOfResourceIds : partitionsOfResourceIds) {
- if (!partitionOfResourceIds.isEmpty()) {
- mapper.deleteByResourceIds(partitionOfResourceIds);
- }
- }
- sqlSession.commit();
-
- } finally {
- sqlSession.close();
- }
- return this;
- }
-
void index(ResourceDto resource, SqlSession session, boolean correctProjectRootId) {
String name = resource.getName();
if (StringUtils.isBlank(name) || resource.getId() == null) {
diff --git a/sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerMapper.java b/sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerMapper.java
index beec37e4bfd..2fd1ad13fe5 100644
--- a/sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerMapper.java
+++ b/sonar-core/src/main/java/org/sonar/persistence/resource/ResourceIndexerMapper.java
@@ -31,7 +31,5 @@ public interface ResourceIndexerMapper {
void deleteByResourceId(int resourceId);
- void deleteByResourceIds(@Param("resourceIds") List<Integer> resourceIds);
-
void insert(ResourceIndexDto dto);
}
diff --git a/sonar-core/src/main/resources/org/sonar/persistence/resource/ResourceIndexerMapper.xml b/sonar-core/src/main/resources/org/sonar/persistence/resource/ResourceIndexerMapper.xml
index bae19fea41a..62e58dfcd51 100644
--- a/sonar-core/src/main/resources/org/sonar/persistence/resource/ResourceIndexerMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/persistence/resource/ResourceIndexerMapper.xml
@@ -35,13 +35,6 @@
where resource_id=#{id}
</delete>
- <delete id="deleteByResourceIds" parameterType="map">
- delete from resource_index
- where resource_id in
- <foreach item="i" index="index" collection="resourceIds" open="(" separator="," close=")">#{i}</foreach>
- </delete>
-
-
<insert id="insert" parameterType="ResourceIndex" useGeneratedKeys="false">
insert into resource_index (kee, position, name_size, resource_id, root_project_id, qualifier)
values (#{key}, #{position}, #{nameSize}, #{resourceId}, #{rootProjectId}, #{qualifier})
diff --git a/sonar-core/src/test/java/org/sonar/persistence/resource/ResourceIndexerDaoTest.java b/sonar-core/src/test/java/org/sonar/persistence/resource/ResourceIndexerDaoTest.java
index 7312b15b088..c23b4dd554c 100644
--- a/sonar-core/src/test/java/org/sonar/persistence/resource/ResourceIndexerDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/persistence/resource/ResourceIndexerDaoTest.java
@@ -69,13 +69,4 @@ public class ResourceIndexerDaoTest extends DaoTestCase {
checkTables("shouldReindexProjectAfterRenaming", "resource_index");
}
-
- @Test
- public void shouldDeleteIndexes() {
- setupData("shouldDeleteIndexes");
-
- dao.delete(Arrays.asList(3, 4, 5, 6));
-
- checkTables("shouldDeleteIndexes", "resource_index");
- }
}
diff --git a/sonar-core/src/test/resources/org/sonar/persistence/resource/ResourceIndexerDaoTest/shouldDeleteIndexes-result.xml b/sonar-core/src/test/resources/org/sonar/persistence/resource/ResourceIndexerDaoTest/shouldDeleteIndexes-result.xml
deleted file mode 100644
index 1eb9d339ae9..00000000000
--- a/sonar-core/src/test/resources/org/sonar/persistence/resource/ResourceIndexerDaoTest/shouldDeleteIndexes-result.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<dataset>
-
- <resource_index kee="struts" position="0" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="truts" position="1" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="ruts" position="2" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="uts" position="3" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
-
-</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/persistence/resource/ResourceIndexerDaoTest/shouldDeleteIndexes.xml b/sonar-core/src/test/resources/org/sonar/persistence/resource/ResourceIndexerDaoTest/shouldDeleteIndexes.xml
deleted file mode 100644
index 535c13fb251..00000000000
--- a/sonar-core/src/test/resources/org/sonar/persistence/resource/ResourceIndexerDaoTest/shouldDeleteIndexes.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<dataset>
-
- <!-- Struts -->
- <resource_index kee="struts" position="0" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="truts" position="1" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="ruts" position="2" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
- <resource_index kee="uts" position="3" name_size="6" resource_id="1" root_project_id="1" qualifier="TRK"/>
-
- <!-- RequestContext -->
- <resource_index kee="requestcontext" position="0" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="equestcontext" position="1" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="questcontext" position="2" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="uestcontext" position="3" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="estcontext" position="4" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="stcontext" position="5" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="tcontext" position="6" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="context" position="7" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="ontext" position="8" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="ntext" position="9" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="text" position="10" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="ext" position="11" name_size="14" resource_id="3" root_project_id="1" qualifier="FIL"/>
-
- <!-- ZipUtils -->
- <resource_index kee="ziputils" position="0" name_size="8" resource_id="6" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="iputils" position="1" name_size="8" resource_id="6" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="putils" position="2" name_size="8" resource_id="6" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="utils" position="3" name_size="8" resource_id="6" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="tils" position="4" name_size="8" resource_id="6" root_project_id="1" qualifier="FIL"/>
- <resource_index kee="ils" position="5" name_size="8" resource_id="6" root_project_id="1" qualifier="FIL"/>
-
-</dataset>
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/project.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/project.rb
index 01b358e17ce..0a4028f22b7 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/models/project.rb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/models/project.rb
@@ -44,6 +44,7 @@ class Project < ActiveRecord::Base
if project
Snapshot.update_all(['islast=?', false], ['(root_project_id=? OR project_id=?) AND islast=?', project.id, project.id, true])
Project.delete_all(['id=? OR root_id=? or copy_resource_id=?', project.id, project.id, project.id])
+ ResourceIndex.delete_all(['root_project_id=?', project.id])
end
end
diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/search/_autocomplete.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/search/_autocomplete.html.erb
index e17bcfba883..029e8a7d3b6 100644
--- a/sonar-server/src/main/webapp/WEB-INF/app/views/search/_autocomplete.html.erb
+++ b/sonar-server/src/main/webapp/WEB-INF/app/views/search/_autocomplete.html.erb
@@ -1,24 +1,27 @@
-<% search = params[:s] %>
<% unless @results_by_qualifier.empty? %>
<ul>
<%
@results_by_qualifier.keys.each do |qualifier|
%>
- <%
- @results_by_qualifier[qualifier].each_with_index do |resource_index, index|
+<%
+ first=true
+ @results_by_qualifier[qualifier].each do |resource_index|
resource=@resources_by_id[resource_index.resource_id]
- %>
+ if resource
+%>
<li id="<%= resource.id -%>">
- <div class="q"><%= index==0 ? message("qualifiers.#{qualifier}") : '' -%></div>
-
- <%= qualifier_icon resource -%> <%= highlight(resource.name(true), search) -%>
+ <div class="q"><%= message("qualifiers.#{qualifier}") if first -%></div>
+ <%= qualifier_icon resource -%> <%= highlight(truncate(resource.name(true), :length => 65), params[:s]) -%>
</li>
- <% end %>
- <% end %>
+<% first=false
+ end
+ end
+ end
+%>
</ul>
<% else %>
<ul>
- <li>No results</li>
+ <li><%= message('no_results') -%></li>
</ul>
<% end %>
-<div class="autocompleteNote"><%= @total -%> results (<%= Time.now - @start_time -%> seconds)</div> \ No newline at end of file
+<div class="autocompleteNote"><%= @total -%> <%= message('search.results') -%> <%= message('search.duration', :params => [Time.now - @start_time]) -%></div> \ No newline at end of file