@@ -123,7 +123,7 @@ public class ComponentService { | |||
checkIsProjectOrModule(component); | |||
checkProjectOrModuleKeyFormat(newKey); | |||
dbClient.resourceKeyUpdaterDao().updateKey(component.uuid(), newKey); | |||
dbClient.componentKeyUpdaterDao().updateKey(component.uuid(), newKey); | |||
} | |||
public Map<String, String> checkModuleKeysBeforeRenaming(String projectKey, String stringToReplace, String replacementString) { | |||
@@ -131,7 +131,7 @@ public class ComponentService { | |||
try { | |||
ComponentDto project = getByKey(projectKey); | |||
userSession.checkComponentUuidPermission(UserRole.ADMIN, project.projectUuid()); | |||
return dbClient.resourceKeyUpdaterDao().checkModuleKeysBeforeRenaming(project.uuid(), stringToReplace, replacementString); | |||
return dbClient.componentKeyUpdaterDao().checkModuleKeysBeforeRenaming(project.uuid(), stringToReplace, replacementString); | |||
} finally { | |||
session.close(); | |||
} | |||
@@ -141,7 +141,7 @@ public class ComponentService { | |||
ComponentDto project = getByKey(dbSession, projectKey); | |||
userSession.checkComponentUuidPermission(UserRole.ADMIN, project.projectUuid()); | |||
checkIsProjectOrModule(project); | |||
dbClient.resourceKeyUpdaterDao().bulkUpdateKey(dbSession, project.uuid(), stringToReplace, replacementString); | |||
dbClient.componentKeyUpdaterDao().bulkUpdateKey(dbSession, project.uuid(), stringToReplace, replacementString); | |||
} | |||
public void bulkUpdateKey(String projectKey, String stringToReplace, String replacementString) { |
@@ -55,7 +55,7 @@ public class BulkUpdateKeyAction implements ComponentsWsAction { | |||
public BulkUpdateKeyAction(DbClient dbClient, ComponentFinder componentFinder, UserSession userSession) { | |||
this.dbClient = dbClient; | |||
this.componentKeyUpdater = dbClient.resourceKeyUpdaterDao(); | |||
this.componentKeyUpdater = dbClient.componentKeyUpdaterDao(); | |||
this.componentFinder = componentFinder; | |||
this.userSession = userSession; | |||
} |
@@ -29,7 +29,7 @@ import org.sonar.db.component.ComponentDao; | |||
import org.sonar.db.component.ComponentLinkDao; | |||
import org.sonar.db.component.ResourceDao; | |||
import org.sonar.db.component.ResourceIndexDao; | |||
import org.sonar.db.component.ResourceKeyUpdaterDao; | |||
import org.sonar.db.component.ComponentKeyUpdaterDao; | |||
import org.sonar.db.component.SnapshotDao; | |||
import org.sonar.db.dashboard.ActiveDashboardDao; | |||
import org.sonar.db.dashboard.DashboardDao; | |||
@@ -109,7 +109,7 @@ public class DaoModule extends Module { | |||
ActiveRuleDao.class, | |||
ResourceIndexDao.class, | |||
ResourceDao.class, | |||
ResourceKeyUpdaterDao.class, | |||
ComponentKeyUpdaterDao.class, | |||
RoleDao.class, | |||
SnapshotDao.class, | |||
UserDao.class, |
@@ -29,7 +29,7 @@ import org.sonar.db.component.ComponentDao; | |||
import org.sonar.db.component.ComponentLinkDao; | |||
import org.sonar.db.component.ResourceDao; | |||
import org.sonar.db.component.ResourceIndexDao; | |||
import org.sonar.db.component.ResourceKeyUpdaterDao; | |||
import org.sonar.db.component.ComponentKeyUpdaterDao; | |||
import org.sonar.db.component.SnapshotDao; | |||
import org.sonar.db.dashboard.ActiveDashboardDao; | |||
import org.sonar.db.dashboard.DashboardDao; | |||
@@ -79,7 +79,7 @@ public class DbClient { | |||
private final SnapshotDao snapshotDao; | |||
private final ComponentDao componentDao; | |||
private final ResourceDao resourceDao; | |||
private final ResourceKeyUpdaterDao resourceKeyUpdaterDao; | |||
private final ComponentKeyUpdaterDao componentKeyUpdaterDao; | |||
private final MeasureDao measureDao; | |||
private final MeasureFilterDao measureFilterDao; | |||
private final MeasureFilterFavouriteDao measureFilterFavouriteDao; | |||
@@ -134,7 +134,7 @@ public class DbClient { | |||
snapshotDao = getDao(map, SnapshotDao.class); | |||
componentDao = getDao(map, ComponentDao.class); | |||
resourceDao = getDao(map, ResourceDao.class); | |||
resourceKeyUpdaterDao = getDao(map, ResourceKeyUpdaterDao.class); | |||
componentKeyUpdaterDao = getDao(map, ComponentKeyUpdaterDao.class); | |||
measureDao = getDao(map, MeasureDao.class); | |||
measureFilterDao = getDao(map, MeasureFilterDao.class); | |||
measureFilterFavouriteDao = getDao(map, MeasureFilterFavouriteDao.class); | |||
@@ -234,8 +234,8 @@ public class DbClient { | |||
return resourceDao; | |||
} | |||
public ResourceKeyUpdaterDao resourceKeyUpdaterDao() { | |||
return resourceKeyUpdaterDao; | |||
public ComponentKeyUpdaterDao componentKeyUpdaterDao() { | |||
return componentKeyUpdaterDao; | |||
} | |||
public MeasureDao measureDao() { |
@@ -42,7 +42,7 @@ import org.sonar.db.component.FilePathWithHashDto; | |||
import org.sonar.db.component.ResourceDto; | |||
import org.sonar.db.component.ResourceIndexDto; | |||
import org.sonar.db.component.ResourceIndexMapper; | |||
import org.sonar.db.component.ResourceKeyUpdaterMapper; | |||
import org.sonar.db.component.ComponentKeyUpdaterMapper; | |||
import org.sonar.db.component.ResourceMapper; | |||
import org.sonar.db.component.SnapshotDto; | |||
import org.sonar.db.component.SnapshotMapper; | |||
@@ -225,7 +225,7 @@ public class MyBatis { | |||
IsAliveMapper.class, | |||
LoadedTemplateMapper.class, MeasureFilterMapper.class, MeasureFilterFavouriteMapper.class, | |||
PermissionTemplateMapper.class, PermissionTemplateCharacteristicMapper.class, | |||
PropertiesMapper.class, PurgeMapper.class, ResourceKeyUpdaterMapper.class, ResourceIndexMapper.class, RoleMapper.class, RuleMapper.class, | |||
PropertiesMapper.class, PurgeMapper.class, ComponentKeyUpdaterMapper.class, ResourceIndexMapper.class, RoleMapper.class, RuleMapper.class, | |||
SchemaMigrationMapper.class, WidgetMapper.class, WidgetPropertyMapper.class, | |||
UserMapper.class, GroupMapper.class, UserGroupMapper.class, UserTokenMapper.class, | |||
FileSourceMapper.class, |
@@ -44,18 +44,18 @@ import static org.sonar.core.component.ComponentKeys.isValidModuleKey; | |||
* | |||
* @since 3.2 | |||
*/ | |||
public class ResourceKeyUpdaterDao implements Dao { | |||
public class ComponentKeyUpdaterDao implements Dao { | |||
private static final Set<String> PROJECT_OR_MODULE_QUALIFIERS = ImmutableSet.of(Qualifiers.PROJECT, Qualifiers.MODULE); | |||
private MyBatis mybatis; | |||
public ResourceKeyUpdaterDao(MyBatis mybatis) { | |||
public ComponentKeyUpdaterDao(MyBatis mybatis) { | |||
this.mybatis = mybatis; | |||
} | |||
public void updateKey(String projectUuid, String newKey) { | |||
DbSession session = mybatis.openSession(true); | |||
ResourceKeyUpdaterMapper mapper = session.getMapper(ResourceKeyUpdaterMapper.class); | |||
ComponentKeyUpdaterMapper mapper = session.getMapper(ComponentKeyUpdaterMapper.class); | |||
try { | |||
if (mapper.countResourceByKey(newKey) > 0) { | |||
throw new IllegalArgumentException("Impossible to update key: a component with key \"" + newKey + "\" already exists."); | |||
@@ -78,7 +78,7 @@ public class ResourceKeyUpdaterDao implements Dao { | |||
public Map<String, String> checkModuleKeysBeforeRenaming(String projectUuid, String stringToReplace, String replacementString) { | |||
SqlSession session = mybatis.openSession(false); | |||
ResourceKeyUpdaterMapper mapper = session.getMapper(ResourceKeyUpdaterMapper.class); | |||
ComponentKeyUpdaterMapper mapper = session.getMapper(ComponentKeyUpdaterMapper.class); | |||
Map<String, String> result = Maps.newHashMap(); | |||
try { | |||
Set<ResourceDto> modules = collectAllModules(projectUuid, stringToReplace, mapper); | |||
@@ -120,7 +120,7 @@ public class ResourceKeyUpdaterDao implements Dao { | |||
} | |||
public void bulkUpdateKey(DbSession session, String projectUuid, String stringToReplace, String replacementString) { | |||
ResourceKeyUpdaterMapper mapper = session.getMapper(ResourceKeyUpdaterMapper.class); | |||
ComponentKeyUpdaterMapper mapper = session.getMapper(ComponentKeyUpdaterMapper.class); | |||
// must SELECT first everything | |||
Set<ResourceDto> modules = collectAllModules(projectUuid, stringToReplace, mapper); | |||
checkNewNameOfAllModules(modules, stringToReplace, replacementString, mapper); | |||
@@ -143,7 +143,7 @@ public class ResourceKeyUpdaterDao implements Dao { | |||
return resource.getKey().replaceAll(stringToReplace, replacementString); | |||
} | |||
private static void runBatchUpdateForAllResources(Collection<ResourceDto> resources, String oldKey, String newKey, ResourceKeyUpdaterMapper mapper) { | |||
private static void runBatchUpdateForAllResources(Collection<ResourceDto> resources, String oldKey, String newKey, ComponentKeyUpdaterMapper mapper) { | |||
for (ResourceDto resource : resources) { | |||
String oldResourceKey = resource.getKey(); | |||
String newResourceKey = newKey + oldResourceKey.substring(oldKey.length(), oldResourceKey.length()); | |||
@@ -157,7 +157,7 @@ public class ResourceKeyUpdaterDao implements Dao { | |||
} | |||
} | |||
private static Set<ResourceDto> collectAllModules(String projectUuid, String stringToReplace, ResourceKeyUpdaterMapper mapper) { | |||
private static Set<ResourceDto> collectAllModules(String projectUuid, String stringToReplace, ComponentKeyUpdaterMapper mapper) { | |||
ResourceDto project = mapper.selectProject(projectUuid); | |||
Set<ResourceDto> modules = Sets.newHashSet(); | |||
if (project.getKey().contains(stringToReplace)) { | |||
@@ -169,7 +169,7 @@ public class ResourceKeyUpdaterDao implements Dao { | |||
return modules; | |||
} | |||
private static void checkNewNameOfAllModules(Set<ResourceDto> modules, String stringToReplace, String replacementString, ResourceKeyUpdaterMapper mapper) { | |||
private static void checkNewNameOfAllModules(Set<ResourceDto> modules, String stringToReplace, String replacementString, ComponentKeyUpdaterMapper mapper) { | |||
for (ResourceDto module : modules) { | |||
String newKey = computeNewKey(module, stringToReplace, replacementString); | |||
checkArgument(isValidModuleKey(newKey), "Malformed key for '%s'. Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit.", newKey); | |||
@@ -179,7 +179,7 @@ public class ResourceKeyUpdaterDao implements Dao { | |||
} | |||
} | |||
private ResourceKeyUpdaterMapper mapper(DbSession dbSession) { | |||
return dbSession.getMapper(ResourceKeyUpdaterMapper.class); | |||
private static ComponentKeyUpdaterMapper mapper(DbSession dbSession) { | |||
return dbSession.getMapper(ComponentKeyUpdaterMapper.class); | |||
} | |||
} |
@@ -25,7 +25,7 @@ import org.apache.ibatis.annotations.Param; | |||
/** | |||
* @since 3.2 | |||
*/ | |||
public interface ResourceKeyUpdaterMapper { | |||
public interface ComponentKeyUpdaterMapper { | |||
int countResourceByKey(String key); | |||
@@ -1,7 +1,7 @@ | |||
<?xml version="1.0" encoding="UTF-8" ?> | |||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
<mapper namespace="org.sonar.db.component.ResourceKeyUpdaterMapper"> | |||
<mapper namespace="org.sonar.db.component.ComponentKeyUpdaterMapper"> | |||
<resultMap id="resourceResultMap" type="Resource"> | |||
<id property="id" column="id"/> |
@@ -34,7 +34,7 @@ import static org.assertj.core.api.Assertions.entry; | |||
import static org.sonar.db.component.ComponentTesting.newFileDto; | |||
import static org.sonar.db.component.ComponentTesting.newProjectDto; | |||
public class ResourceKeyUpdaterDaoTest { | |||
public class ComponentKeyUpdaterDaoTest { | |||
@Rule | |||
public ExpectedException thrown = ExpectedException.none(); | |||
@@ -44,7 +44,7 @@ public class ResourceKeyUpdaterDaoTest { | |||
private DbSession dbSession = db.getSession(); | |||
ComponentDbTester componentDb = new ComponentDbTester(db); | |||
ResourceKeyUpdaterDao underTest = db.getDbClient().resourceKeyUpdaterDao(); | |||
ComponentKeyUpdaterDao underTest = db.getDbClient().componentKeyUpdaterDao(); | |||
@Test | |||
public void shouldUpdateKey() { |