@Override
public Project cloneProject(Project sourceProject, ProjectCloneRequest request) {
Function<String, String> replacementFn = replacementFn(request.getReplacements());
String targetProjectDescription = replacementFn.apply(sourceProject.getDescription());
Project targetProject = structureService.newProject(
Project.of(
NameDescription.nd(request.getName(), targetProjectDescription)
)
);
doCopyProperties(sourceProject, targetProject, replacementFn, SyncPolicy.COPY);
Branch sourceBranch = structureService.getBranch(request.getSourceBranchId());
String targetBranchName = replacementFn.apply(sourceBranch.getName());
String targetBranchDescription = replacementFn.apply(sourceBranch.getDescription());
Branch targetBranch = structureService.newBranch(
Branch.of(
targetProject,
NameDescription.nd(targetBranchName, targetBranchDescription)
)
);
doCopy(sourceBranch, targetBranch, replacementFn, SyncPolicy.COPY);
return targetProject;
}