diff options
author | James Moger <james.moger@gitblit.com> | 2011-12-21 17:13:00 -0500 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2011-12-21 17:13:00 -0500 |
commit | 0b911946c4d81df6c8f411089f2e3036b4251e2b (patch) | |
tree | 0f77fb768f8733f66228de36193518db21b920ae /src | |
parent | eb96eab513101783a750c13419de6bdce3d2fa4c (diff) | |
download | gitblit-0b911946c4d81df6c8f411089f2e3036b4251e2b.tar.gz gitblit-0b911946c4d81df6c8f411089f2e3036b4251e2b.zip |
Support mailing lists for Teams
Diffstat (limited to 'src')
-rw-r--r-- | src/com/gitblit/ConfigUserService.java | 13 | ||||
-rw-r--r-- | src/com/gitblit/FileUserService.java | 9 | ||||
-rw-r--r-- | src/com/gitblit/GitBlit.java | 3 | ||||
-rw-r--r-- | src/com/gitblit/client/EditTeamDialog.java | 30 | ||||
-rw-r--r-- | src/com/gitblit/models/TeamModel.java | 8 | ||||
-rw-r--r-- | src/com/gitblit/utils/StringUtils.java | 5 | ||||
-rw-r--r-- | src/com/gitblit/wicket/GitBlitWebApp.properties | 3 | ||||
-rw-r--r-- | src/com/gitblit/wicket/pages/EditRepositoryPage.html | 2 | ||||
-rw-r--r-- | src/com/gitblit/wicket/pages/EditTeamPage.html | 4 | ||||
-rw-r--r-- | src/com/gitblit/wicket/pages/EditTeamPage.java | 26 | ||||
-rw-r--r-- | src/com/gitblit/wicket/pages/EditUserPage.html | 3 |
11 files changed, 91 insertions, 15 deletions
diff --git a/src/com/gitblit/ConfigUserService.java b/src/com/gitblit/ConfigUserService.java index a0a38e6a..b899d924 100644 --- a/src/com/gitblit/ConfigUserService.java +++ b/src/com/gitblit/ConfigUserService.java @@ -62,6 +62,8 @@ public class ConfigUserService implements IUserService { private static final String REPOSITORY = "repository";
private static final String ROLE = "role";
+
+ private static final String MAILINGLIST = "mailingList";
private final File realmFile;
@@ -303,7 +305,7 @@ public class ConfigUserService implements IUserService { List<String> list = new ArrayList<String>(teams.keySet());
return list;
}
-
+
/**
* Returns the list of all users who are allowed to bypass the access
* restriction placed on the specified repository.
@@ -648,6 +650,14 @@ public class ConfigUserService implements IUserService { if (model.users != null) {
config.setStringList(TEAM, model.name, USER, new ArrayList<String>(model.users));
}
+
+ // null check on "final" mailing lists because JSON-sourced
+ // TeamModel
+ // can have a null users object
+ if (model.mailingLists != null) {
+ config.setStringList(TEAM, model.name, MAILINGLIST, new ArrayList<String>(
+ model.mailingLists));
+ }
}
config.save();
@@ -714,6 +724,7 @@ public class ConfigUserService implements IUserService { team.addRepositories(Arrays.asList(config.getStringList(TEAM, teamname,
REPOSITORY)));
team.addUsers(Arrays.asList(config.getStringList(TEAM, teamname, USER)));
+ team.addMailingLists(Arrays.asList(config.getStringList(TEAM, teamname, MAILINGLIST)));
teams.put(team.name.toLowerCase(), team);
diff --git a/src/com/gitblit/FileUserService.java b/src/com/gitblit/FileUserService.java index 880ca7b8..27892f71 100644 --- a/src/com/gitblit/FileUserService.java +++ b/src/com/gitblit/FileUserService.java @@ -618,15 +618,19 @@ public class FileUserService extends FileSettings implements IUserService { TeamModel team = new TeamModel(username.substring(1));
List<String> repositories = new ArrayList<String>();
List<String> users = new ArrayList<String>();
+ List<String> mailingLists = new ArrayList<String>();
for (String role : roles) {
if (role.charAt(0) == '!') {
users.add(role.substring(1));
+ } else if (role.charAt(0) == '&') {
+ mailingLists.add(role.substring(1));
} else {
repositories.add(role);
}
}
team.addRepositories(repositories);
team.addUsers(users);
+ team.addMailingLists(mailingLists);
teams.put(team.name.toLowerCase(), team);
} else {
// user definition
@@ -832,6 +836,11 @@ public class FileUserService extends FileSettings implements IUserService { sb.append(user);
sb.append(',');
}
+ for (String address : model.mailingLists) {
+ sb.append('&');
+ sb.append(address);
+ sb.append(',');
+ }
// trim trailing comma
sb.setLength(sb.length() - 1);
allUsers.remove("@" + teamname);
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java index 835aa132..c818dd50 100644 --- a/src/com/gitblit/GitBlit.java +++ b/src/com/gitblit/GitBlit.java @@ -25,6 +25,7 @@ import java.lang.reflect.Field; import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -1505,7 +1506,7 @@ public class GitBlit implements ServletContextListener { * @param message
* @param toAddresses
*/
- public void sendMail(String subject, String message, ArrayList<String> toAddresses) {
+ public void sendMail(String subject, String message, Collection<String> toAddresses) {
this.sendMail(subject, message, toAddresses.toArray(new String[0]));
}
diff --git a/src/com/gitblit/client/EditTeamDialog.java b/src/com/gitblit/client/EditTeamDialog.java index 4297599c..a04ed2cf 100644 --- a/src/com/gitblit/client/EditTeamDialog.java +++ b/src/com/gitblit/client/EditTeamDialog.java @@ -65,6 +65,8 @@ public class EditTeamDialog extends JDialog { private JTextField teamnameField;
+ private JTextField mailingListsField;
+
private JPalette<String> repositoryPalette;
private JPalette<String> userPalette;
@@ -105,16 +107,20 @@ public class EditTeamDialog extends JDialog { private void initialize(int protocolVersion, TeamModel aTeam) {
teamnameField = new JTextField(aTeam.name == null ? "" : aTeam.name, 25);
+ mailingListsField = new JTextField(aTeam.mailingLists == null ? ""
+ : StringUtils.flattenStrings(aTeam.mailingLists, " "), 50);
+
JPanel fieldsPanel = new JPanel(new GridLayout(0, 1));
fieldsPanel.add(newFieldPanel(Translation.get("gb.teamName"), teamnameField));
+ fieldsPanel.add(newFieldPanel(Translation.get("gb.mailingLists"), mailingListsField));
final Insets _insets = new Insets(5, 5, 5, 5);
repositoryPalette = new JPalette<String>();
userPalette = new JPalette<String>();
-
+
JPanel fieldsPanelTop = new JPanel(new BorderLayout());
fieldsPanelTop.add(fieldsPanel, BorderLayout.NORTH);
-
+
JPanel repositoriesPanel = new JPanel(new BorderLayout()) {
private static final long serialVersionUID = 1L;
@@ -140,7 +146,6 @@ public class EditTeamDialog extends JDialog { panel.addTab(Translation.get("gb.teamMembers"), usersPanel);
panel.addTab(Translation.get("gb.restrictedRepositories"), repositoriesPanel);
-
JButton createButton = new JButton(Translation.get("gb.save"));
createButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
@@ -162,7 +167,7 @@ public class EditTeamDialog extends JDialog { JPanel controls = new JPanel();
controls.add(cancelButton);
controls.add(createButton);
-
+
JPanel centerPanel = new JPanel(new BorderLayout(5, 5)) {
private static final long serialVersionUID = 1L;
@@ -218,9 +223,22 @@ public class EditTeamDialog extends JDialog { }
team.name = tname;
+ String ml = mailingListsField.getText();
+ if (!StringUtils.isEmpty(ml)) {
+ Set<String> list = new HashSet<String>();
+ for (String address : ml.split("(,|\\s)")) {
+ if (StringUtils.isEmpty(address)) {
+ continue;
+ }
+ list.add(address.toLowerCase());
+ }
+ team.mailingLists.clear();
+ team.mailingLists.addAll(list);
+ }
+
team.repositories.clear();
team.repositories.addAll(repositoryPalette.getSelections());
-
+
team.users.clear();
team.users.addAll(userPalette.getSelections());
return true;
@@ -251,7 +269,7 @@ public class EditTeamDialog extends JDialog { }
repositoryPalette.setObjects(restricted, selected);
}
-
+
public void setUsers(List<String> users, List<String> selected) {
Collections.sort(users);
if (selected != null) {
diff --git a/src/com/gitblit/models/TeamModel.java b/src/com/gitblit/models/TeamModel.java index 195b9d5c..3258ef6c 100644 --- a/src/com/gitblit/models/TeamModel.java +++ b/src/com/gitblit/models/TeamModel.java @@ -18,6 +18,7 @@ package com.gitblit.models; import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
/**
@@ -35,6 +36,7 @@ public class TeamModel implements Serializable, Comparable<TeamModel> { public String name;
public final Set<String> users = new HashSet<String>();
public final Set<String> repositories = new HashSet<String>();
+ public final Set<String> mailingLists = new HashSet<String>();
public TeamModel(String name) {
this.name = name;
@@ -76,6 +78,12 @@ public class TeamModel implements Serializable, Comparable<TeamModel> { users.remove(name.toLowerCase());
}
+ public void addMailingLists(Collection<String> addresses) {
+ for (String address:addresses) {
+ mailingLists.add(address.toLowerCase());
+ }
+ }
+
@Override
public String toString() {
return name;
diff --git a/src/com/gitblit/utils/StringUtils.java b/src/com/gitblit/utils/StringUtils.java index a51c157f..1e478999 100644 --- a/src/com/gitblit/utils/StringUtils.java +++ b/src/com/gitblit/utils/StringUtils.java @@ -19,6 +19,7 @@ import java.io.UnsupportedEncodingException; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -127,7 +128,7 @@ public class StringUtils { * @param values
* @return flattened list
*/
- public static String flattenStrings(List<String> values) {
+ public static String flattenStrings(Collection<String> values) {
return flattenStrings(values, " ");
}
@@ -139,7 +140,7 @@ public class StringUtils { * @param separator
* @return flattened list
*/
- public static String flattenStrings(List<String> values, String separator) {
+ public static String flattenStrings(Collection<String> values, String separator) {
StringBuilder sb = new StringBuilder();
for (String value : values) {
sb.append(value).append(separator);
diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties index c0b0010d..aead2c41 100644 --- a/src/com/gitblit/wicket/GitBlitWebApp.properties +++ b/src/com/gitblit/wicket/GitBlitWebApp.properties @@ -200,4 +200,5 @@ gb.mailingLists = mailing lists gb.mailingListsDescription = used by the sendmail hook
gb.preReceiveScripts = pre-receive scripts
gb.postReceiveScripts = post-receive scripts
-gb.hookScripts = hook scripts
\ No newline at end of file +gb.hookScripts = hook scripts
+gb.accessPermissions = access permissions
\ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/EditRepositoryPage.html b/src/com/gitblit/wicket/pages/EditRepositoryPage.html index 310f59e5..9381344b 100644 --- a/src/com/gitblit/wicket/pages/EditRepositoryPage.html +++ b/src/com/gitblit/wicket/pages/EditRepositoryPage.html @@ -23,7 +23,7 @@ <tr><th><wicket:message key="gb.skipSummaryMetrics"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="skipSummaryMetrics" tabindex="10" /> <span class="help-inline"><wicket:message key="gb.skipSummaryMetricsDescription"></wicket:message></span></td></tr>
<tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="isFrozen" tabindex="11" /> <span class="help-inline"><wicket:message key="gb.isFrozenDescription"></wicket:message></span></td></tr>
<tr><th><wicket:message key="gb.mailingLists"></wicket:message></th><td class="edit"><input class="span12" type="text" wicket:id="mailingLists" size="40" tabindex="12" /> <span class="help-inline"><wicket:message key="gb.mailingListsDescription"></wicket:message></span></td></tr>
- <tr><td colspan="2"><h3><wicket:message key="gb.accessRestriction"></wicket:message></h3></td></tr>
+ <tr><td colspan="2"><h3><wicket:message key="gb.accessPermissions"></wicket:message></h3></td></tr>
<tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span6" wicket:id="accessRestriction" tabindex="13" /></td></tr>
<tr><th style="vertical-align: top;"><wicket:message key="gb.permittedUsers"></wicket:message></th><td style="padding:2px;"><span wicket:id="users"></span></td></tr>
<tr><th style="vertical-align: top;"><wicket:message key="gb.permittedTeams"></wicket:message></th><td style="padding:2px;"><span wicket:id="teams"></span></td></tr>
diff --git a/src/com/gitblit/wicket/pages/EditTeamPage.html b/src/com/gitblit/wicket/pages/EditTeamPage.html index 614f0aa1..537d78d2 100644 --- a/src/com/gitblit/wicket/pages/EditTeamPage.html +++ b/src/com/gitblit/wicket/pages/EditTeamPage.html @@ -10,8 +10,10 @@ <form style="padding-top:5px;" wicket:id="editForm">
<table class="plain">
<tbody class="settings">
+ <tr><td colspan="2"><h3><wicket:message key="gb.general"></wicket:message></h3></td></tr>
<tr><th><wicket:message key="gb.teamName"></wicket:message></th><td class="edit"><input type="text" wicket:id="name" id="name" size="30" tabindex="1" /></td></tr>
- <tr><td colspan="2"><hr></hr></td></tr>
+ <tr><th><wicket:message key="gb.mailingLists"></wicket:message></th><td class="edit"><input class="span12" type="text" wicket:id="mailingLists" size="40" tabindex="2" /> <span class="help-inline"><wicket:message key="gb.mailingListsDescription"></wicket:message></span></td></tr>
+ <tr><td colspan="2" style="padding-top:10px;"><h3><wicket:message key="gb.accessPermissions"></wicket:message></h3></td></tr>
<tr><th style="vertical-align: top;"><wicket:message key="gb.teamMembers"></wicket:message></th><td style="padding:2px;"><span wicket:id="users"></span></td></tr>
<tr><td colspan="2"><hr></hr></td></tr>
<tr><th style="vertical-align: top;"><wicket:message key="gb.restrictedRepositories"></wicket:message></th><td style="padding:2px;"><span wicket:id="repositories"></span></td></tr>
diff --git a/src/com/gitblit/wicket/pages/EditTeamPage.java b/src/com/gitblit/wicket/pages/EditTeamPage.java index 47f3568f..c5c240fd 100644 --- a/src/com/gitblit/wicket/pages/EditTeamPage.java +++ b/src/com/gitblit/wicket/pages/EditTeamPage.java @@ -18,8 +18,10 @@ package com.gitblit.wicket.pages; import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import org.apache.wicket.PageParameters;
import org.apache.wicket.extensions.markup.html.form.palette.Palette;
@@ -28,6 +30,8 @@ import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
import org.apache.wicket.model.util.CollectionModel;
import org.apache.wicket.model.util.ListModel;
@@ -45,6 +49,8 @@ public class EditTeamPage extends RootSubPage { private final boolean isCreate;
+ private IModel<String> mailingLists;
+
public EditTeamPage() {
// create constructor
super();
@@ -128,6 +134,20 @@ public class EditTeamPage extends RootSubPage { teamModel.users.clear();
teamModel.users.addAll(members);
+ // set mailing lists
+ String ml = mailingLists.getObject();
+ if (!StringUtils.isEmpty(ml)) {
+ Set<String> list = new HashSet<String>();
+ for (String address : ml.split("(,|\\s)")) {
+ if (StringUtils.isEmpty(address)) {
+ continue;
+ }
+ list.add(address.toLowerCase());
+ }
+ teamModel.mailingLists.clear();
+ teamModel.mailingLists.addAll(list);
+ }
+
try {
GitBlit.self().updateTeamModel(oldName, teamModel, isCreate);
} catch (GitBlitException e) {
@@ -149,8 +169,12 @@ public class EditTeamPage extends RootSubPage { // field names reflective match TeamModel fields
form.add(new TextField<String>("name"));
- form.add(repositories);
form.add(users);
+ mailingLists = new Model<String>(teamModel.mailingLists == null ? ""
+ : StringUtils.flattenStrings(teamModel.mailingLists, " "));
+ form.add(new TextField<String>("mailingLists", mailingLists));
+
+ form.add(repositories);
form.add(new Button("save"));
Button cancel = new Button("cancel") {
diff --git a/src/com/gitblit/wicket/pages/EditUserPage.html b/src/com/gitblit/wicket/pages/EditUserPage.html index 319a2b65..87263c24 100644 --- a/src/com/gitblit/wicket/pages/EditUserPage.html +++ b/src/com/gitblit/wicket/pages/EditUserPage.html @@ -10,12 +10,13 @@ <form style="padding-top:5px;" wicket:id="editForm">
<table class="plain">
<tbody class="settings">
+ <tr><td colspan="2"><h3><wicket:message key="gb.general"></wicket:message></h3></td></tr>
<tr><th><wicket:message key="gb.username"></wicket:message></th><td class="edit"><input type="text" wicket:id="username" id="username" size="30" tabindex="1" /></td></tr>
<tr><th><wicket:message key="gb.password"></wicket:message></th><td class="edit"><input type="password" wicket:id="password" size="30" tabindex="2" /></td></tr>
<tr><th><wicket:message key="gb.confirmPassword"></wicket:message></th><td class="edit"><input type="password" wicket:id="confirmPassword" size="30" tabindex="3" /></td></tr>
<tr><th><wicket:message key="gb.canAdmin"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="canAdmin" tabindex="6" /> <span class="help-inline"><wicket:message key="gb.canAdminDescription"></wicket:message></span></td></tr>
<tr><th><wicket:message key="gb.excludeFromFederation"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="excludeFromFederation" tabindex="7" /> <span class="help-inline"><wicket:message key="gb.excludeFromFederationDescription"></wicket:message></span></td></tr>
- <tr><td colspan="2"><hr></hr></td></tr>
+ <tr><td colspan="2" style="padding-top:10px;"><h3><wicket:message key="gb.accessPermissions"></wicket:message></h3></td></tr>
<tr><th style="vertical-align: top;"><wicket:message key="gb.teamMemberships"></wicket:message></th><td style="padding:2px;"><span wicket:id="teams"></span></td></tr>
<tr><td colspan="2"><hr></hr></td></tr>
<tr><th style="vertical-align: top;"><wicket:message key="gb.restrictedRepositories"></wicket:message></th><td style="padding:2px;"><span wicket:id="repositories"></span></td></tr>
|