Merge "Suggest parent for 'create-project' in the UI."

This commit is contained in:
Martin Fick
2012-02-22 10:48:19 -08:00
committed by gerrit code review
10 changed files with 139 additions and 23 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}
}