Merge "Suggest parent for 'create-project' in the UI."
This commit is contained in:
@@ -53,7 +53,7 @@ import com.google.gerrit.server.project.ChangeControl;
|
||||
import com.google.gerrit.server.project.CreateProject;
|
||||
import com.google.gerrit.server.project.PerRequestProjectControlCache;
|
||||
import com.google.gerrit.server.project.ProjectControl;
|
||||
import com.google.gerrit.server.project.RetrieveParentCandidates;
|
||||
import com.google.gerrit.server.project.SuggestParentCandidates;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryRewriter;
|
||||
import com.google.inject.servlet.RequestScoped;
|
||||
@@ -108,6 +108,6 @@ public class GerritRequestModule extends FactoryModule {
|
||||
factory(GroupMembers.Factory.class);
|
||||
factory(CreateProject.Factory.class);
|
||||
factory(Submit.Factory.class);
|
||||
factory(RetrieveParentCandidates.Factory.class);
|
||||
factory(SuggestParentCandidates.Factory.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,12 +19,15 @@ import com.google.gerrit.server.config.AllProjectsName;
|
||||
import com.google.gwtorm.client.OrmException;
|
||||
import com.google.inject.Inject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
public class RetrieveParentCandidates {
|
||||
public class SuggestParentCandidates {
|
||||
public interface Factory {
|
||||
RetrieveParentCandidates create();
|
||||
SuggestParentCandidates create();
|
||||
}
|
||||
|
||||
private final ProjectControl.Factory projectControlFactory;
|
||||
@@ -32,32 +35,47 @@ public class RetrieveParentCandidates {
|
||||
private final AllProjectsName allProject;
|
||||
|
||||
@Inject
|
||||
RetrieveParentCandidates(final ProjectControl.Factory projectControlFactory,
|
||||
SuggestParentCandidates(final ProjectControl.Factory projectControlFactory,
|
||||
final ProjectCache projectCache, final AllProjectsName allProject) {
|
||||
this.projectControlFactory = projectControlFactory;
|
||||
this.projectCache = projectCache;
|
||||
this.allProject = allProject;
|
||||
}
|
||||
|
||||
public Set<Project.NameKey> get() throws OrmException {
|
||||
final Set<Project.NameKey> r = new TreeSet<Project.NameKey>();
|
||||
public List<Project.NameKey> getNameKeys() throws OrmException,
|
||||
NoSuchProjectException {
|
||||
List<Project> pList = getProjects();
|
||||
final List<Project.NameKey> nameKeys =
|
||||
new ArrayList<Project.NameKey>(pList.size());
|
||||
for (Project p : pList) {
|
||||
nameKeys.add(p.getNameKey());
|
||||
}
|
||||
return nameKeys;
|
||||
}
|
||||
|
||||
public List<Project> getProjects() throws OrmException,
|
||||
NoSuchProjectException {
|
||||
Set<Project> projects = new TreeSet<Project>(new Comparator<Project>() {
|
||||
@Override
|
||||
public int compare(Project o1, Project o2) {
|
||||
return o1.getName().compareTo(o2.getName());
|
||||
}
|
||||
});
|
||||
for (Project.NameKey p : projectCache.all()) {
|
||||
try {
|
||||
final ProjectControl project = projectControlFactory.controlFor(p);
|
||||
final Project.NameKey parent = project.getProject().getParent();
|
||||
|
||||
if (parent != null) {
|
||||
ProjectControl c = projectControlFactory.controlFor(parent);
|
||||
if (c.isVisible() || c.isOwner()) {
|
||||
r.add(parent);
|
||||
final ProjectControl control = projectControlFactory.controlFor(p);
|
||||
final Project.NameKey parentK = control.getProject().getParent();
|
||||
if (parentK != null) {
|
||||
ProjectControl pControl = projectControlFactory.controlFor(parentK);
|
||||
if (pControl.isVisible() || pControl.isOwner()) {
|
||||
projects.add(pControl.getProject());
|
||||
}
|
||||
}
|
||||
} catch (NoSuchProjectException e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
r.add(allProject);
|
||||
return r;
|
||||
projects.add(projectControlFactory.controlFor(allProject).getProject());
|
||||
return new ArrayList<Project>(projects);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user