From fbc7a7dd5fa61486610cf11c09e0007f2900a3e1 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 03 Dec 2014 15:05:49 -0500
Subject: [PATCH] Add support for specifying the `Proxy-Authorization` header for the PluginManager
---
src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java | 120 +++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 78 insertions(+), 42 deletions(-)
diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java b/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java
index 7b20ade..200c8dc 100644
--- a/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/RepositoryNamePanel.java
@@ -17,18 +17,22 @@
import java.text.MessageFormat;
import java.util.ArrayList;
-import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import com.gitblit.models.ProjectModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebSession;
/**
- * A radio group panel of the 5 available authorization/access restriction combinations.
+ * A panel for naming a repository, specifying it's project, and entering a description.
*
* @author James Moger
*
@@ -37,62 +41,103 @@
private static final long serialVersionUID = 1L;
- private final RepositoryModel repository;
-
private String fullName;
+
+ private final IModel<String> projectPath;
+
+ private DropDownChoice<String> pathChoice;
+
+ private final IModel<String> repoName;
+
+ private TextField<String> nameField;
public RepositoryNamePanel(String wicketId, RepositoryModel repository) {
super(wicketId);
- this.repository = repository;
- }
-
- @Override
- protected void onInitialize() {
- super.onInitialize();
GitBlitWebSession session = GitBlitWebSession.get();
UserModel user = session.getUser();
-
- // build project list for repository destination
- String defaultProject = null;
- List<String> projects = new ArrayList<String>();
-
- if (user.canAdmin()) {
- projects.add("/");
- defaultProject = "/";
+ if (user == null) {
+ user = UserModel.ANONYMOUS;
}
- if (user.canCreate()) {
- String p = user.getPersonalPath() + "/";
- projects.add(p);
- if (defaultProject == null) {
- // only prefer personal namespace if default is not already set
- defaultProject = p;
+ // build project set for repository destination
+ String defaultPath = null;
+ String defaultName = null;
+ Set<String> pathNames = new TreeSet<String>();
+
+ // add the registered/known projects
+ for (ProjectModel project : app().projects().getProjectModels(user, false)) {
+ // TODO issue-351: user.canAdmin(project)
+ if (user.canAdmin()) {
+ if (project.isRoot) {
+ pathNames.add("/");
+ } else {
+ pathNames.add(project.name + "/");
+ }
}
}
- repository.projectPath = defaultProject;
+ // add the user's personal project namespace
+ if (user.canAdmin() || user.canCreate()) {
+ pathNames.add(user.getPersonalPath() + "/");
+ }
- add(new DropDownChoice<String>("projectPath", projects));
- add(new TextField<String>("name"));
+ if (!StringUtils.isEmpty(repository.name)) {
+ // editing a repository name
+ // set the defaultProject to the current repository project
+ if (StringUtils.isEmpty(repository.projectPath)) {
+ defaultPath = "/";
+ defaultName = repository.name;
+ } else {
+ defaultPath = repository.projectPath + "/";
+ defaultName = repository.name.substring(defaultPath.length());
+ }
+ pathNames.add(defaultPath);
+ }
+
+ // if default project is not already set, set preference based on the user permissions
+ if (defaultPath == null) {
+ if (user.canAdmin()) {
+ defaultPath = "/";
+ } else if (user.canCreate()) {
+ defaultPath = user.getPersonalPath() + "/";
+ }
+ }
+
+ projectPath = Model.of(defaultPath);
+ pathChoice = new DropDownChoice<String>("projectPath", projectPath, new ArrayList<String>(pathNames));
+ repoName = Model.of(defaultName);
+ nameField = new TextField<String>("name", repoName);
+
+ // only enable project selection if we actually have multiple choices
+ add(pathChoice.setEnabled(pathNames.size() > 1));
+ add(nameField);
+ add(new TextField<String>("description"));
+ }
+
+ public void setEditable(boolean editable) {
+ // only enable project selection if we actually have multiple choices
+ pathChoice.setEnabled(pathChoice.getChoices().size() > 1 && editable);
+ nameField.setEnabled(editable);
}
public boolean updateModel(RepositoryModel repositoryModel) {
- // confirm a project was selected
- if (StringUtils.isEmpty(repositoryModel.projectPath)) {
+ // confirm a project path was selected
+ if (StringUtils.isEmpty(projectPath.getObject())) {
error(getString("gb.pleaseSelectProject"));
return false;
}
// confirm a repository name was entered
- if (StringUtils.isEmpty(repositoryModel.name)) {
+ if (StringUtils.isEmpty(repoName.getObject())) {
error(getString("gb.pleaseSetRepositoryName"));
return false;
}
- String project = repositoryModel.projectPath;
+ String project = projectPath.getObject();
+ String name = repoName.getObject();
- fullName = (project + repositoryModel.name).trim();
+ fullName = (project + name).trim();
fullName = fullName.replace('\\', '/');
fullName = fullName.replace("//", "/");
if (fullName.charAt(0) == '/') {
@@ -119,21 +164,12 @@
}
repositoryModel.name = fullName;
- repositoryModel.projectPath = null;
return true;
- }
-
- public void resetModel(RepositoryModel repositoryModel) {
- // restore project and name fields on error condition
- repositoryModel.projectPath = StringUtils.getFirstPathElement(fullName) + "/";
- if (repositoryModel.projectPath.length() > 1) {
- repositoryModel.name = fullName.substring(repositoryModel.projectPath.length());
- }
}
@Override
protected boolean getStatelessHint() {
return false;
}
-}
+}
\ No newline at end of file
--
Gitblit v1.9.1