private static Set<ResourceDto> collectAllModules(String projectUuid, String stringToReplace, ComponentKeyUpdaterMapper mapper, boolean includeDisabled) { ResourceDto project = mapper.selectProjectByUuid(projectUuid); Set<ResourceDto> modules = new HashSet<>(); if (project.getKey().contains(stringToReplace) && (project.isEnabled() || includeDisabled)) { modules.add(project); } for (ResourceDto submodule : mapper.selectDescendantProjects(projectUuid)) { modules.addAll(collectAllModules(submodule.getUuid(), stringToReplace, mapper, includeDisabled)); } return modules; }
/** * * @return a map with currentKey/newKey is a bulk update was executed */ public Map<String, String> simulateBulkUpdateKey(DbSession dbSession, String projectUuid, String stringToReplace, String replacementString) { return collectAllModules(projectUuid, stringToReplace, mapper(dbSession), false) .stream() .collect(Collectors.toMap( ResourceDto::getKey, component -> { String newKey = computeNewKey(component.getKey(), stringToReplace, replacementString); checkProjectKey(newKey); return newKey; })); }
ComponentKeyUpdaterMapper mapper = session.getMapper(ComponentKeyUpdaterMapper.class); Set<ResourceDto> modules = collectAllModules(projectUuid, stringToReplace, mapper, true); checkNewNameOfAllModules(modules, stringToReplace, replacementString, mapper); .filter(branch -> !projectUuid.equals(branch.getUuid())) .forEach(branch -> { Set<ResourceDto> branchModules = collectAllModules(branch.getUuid(), stringToReplace, mapper, true); modules.addAll(branchModules); branchModules.forEach(module -> branchBaseKeys.put(module.getKey(), branchBaseKey(module.getKey())));
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)) { modules.add(project); } for (ResourceDto submodule : mapper.selectDescendantProjects(projectUuid)) { modules.addAll(collectAllModules(submodule.getUuid(), stringToReplace, mapper)); } return modules; }
/** * * @return a map with currentKey/newKey is a bulk update was executed */ public Map<String, String> simulateBulkUpdateKey(DbSession dbSession, String projectUuid, String stringToReplace, String replacementString) { return collectAllModules(projectUuid, stringToReplace, mapper(dbSession)) .stream() .collect(Collectors.toMap( ResourceDto::getKey, component -> { String newKey = computeNewKey(component.getKey(), stringToReplace, replacementString); checkModuleKey(newKey); return newKey; })); }
public void bulkUpdateKey(DbSession session, String projectUuid, String stringToReplace, String replacementString) { ComponentKeyUpdaterMapper mapper = session.getMapper(ComponentKeyUpdaterMapper.class); // must SELECT first everything Set<ResourceDto> modules = collectAllModules(projectUuid, stringToReplace, mapper); checkNewNameOfAllModules(modules, stringToReplace, replacementString, mapper); Map<ResourceDto, List<ResourceDto>> allResourcesByModuleMap = Maps.newHashMap(); for (ResourceDto module : modules) { allResourcesByModuleMap.put(module, mapper.selectProjectResources(module.getUuid())); } // and then proceed with the batch UPDATE at once for (ResourceDto module : modules) { String oldModuleKey = module.getKey(); String newModuleKey = computeNewKey(module.getKey(), stringToReplace, replacementString); Collection<ResourceDto> resources = Lists.newArrayList(module); resources.addAll(allResourcesByModuleMap.get(module)); runBatchUpdateForAllResources(resources, oldModuleKey, newModuleKey, mapper); } }
public Map<String, String> checkModuleKeysBeforeRenaming(String projectUuid, String stringToReplace, String replacementString) { SqlSession session = mybatis.openSession(false); ComponentKeyUpdaterMapper mapper = session.getMapper(ComponentKeyUpdaterMapper.class); Map<String, String> result = Maps.newHashMap(); try { Set<ResourceDto> modules = collectAllModules(projectUuid, stringToReplace, mapper); for (ResourceDto module : modules) { String newKey = computeNewKey(module.getKey(), stringToReplace, replacementString); if (mapper.countResourceByKey(newKey) > 0) { result.put(module.getKey(), "#duplicate_key#"); } else { result.put(module.getKey(), newKey); } } } finally { MyBatis.closeQuietly(session); } return result; }