James Moger
2011-12-17 3a2c57e652e5b688261fee02baa3853526e9893a
Edit and store per-repository mail recipients in site and RPC
7 files modified
55 ■■■■ changed files
src/com/gitblit/GitBlit.java 12 ●●●●● patch | view | raw | blame | history
src/com/gitblit/MailExecutor.java 9 ●●●● patch | view | raw | blame | history
src/com/gitblit/client/EditRepositoryDialog.java 9 ●●●● patch | view | raw | blame | history
src/com/gitblit/models/RepositoryModel.java 1 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/GitBlitWebApp.properties 2 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/EditRepositoryPage.html 7 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/EditRepositoryPage.java 15 ●●●●● patch | view | raw | blame | history
src/com/gitblit/GitBlit.java
@@ -731,6 +731,8 @@
                    "gitblit", null, "preReceiveScript")));
            model.postReceiveScripts = new ArrayList<String>(Arrays.asList(config.getStringList(
                    "gitblit", null, "postReceiveScript")));
            model.mailRecipients = new ArrayList<String>(Arrays.asList(config.getStringList(
                    "gitblit", null, "mailRecipient")));
        }
        r.close();
        return model;
@@ -950,8 +952,16 @@
        config.setString("gitblit", null, "federationStrategy",
                repository.federationStrategy.name());
        config.setBoolean("gitblit", null, "isFederated", repository.isFederated);
        if (repository.preReceiveScripts != null) {
        config.setStringList("gitblit", null, "preReceiveScript", repository.preReceiveScripts);
        config.setStringList("gitblit", null, "postReceiveScript", repository.postReceiveScripts);
        }
        if (repository.postReceiveScripts != null) {
            config.setStringList("gitblit", null, "postReceiveScript",
                    repository.postReceiveScripts);
        }
        if (repository.mailRecipients != null) {
            config.setStringList("gitblit", null, "mailRecipient", repository.mailRecipients);
        }
        try {
            config.save();
        } catch (IOException e) {
src/com/gitblit/MailExecutor.java
@@ -154,7 +154,12 @@
            InternetAddress from = new InternetAddress(fromAddress, "Gitblit");
            message.setFrom(from);
            Set<String> uniques = new HashSet<String>(toAddresses);
            // determine unique set of addresses
            Set<String> uniques = new HashSet<String>();
            for (String address : toAddresses) {
                uniques.add(address.toLowerCase());
            }
            Pattern validEmail = Pattern
                    .compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
            List<InternetAddress> tos = new ArrayList<InternetAddress>();
@@ -169,7 +174,7 @@
                    }
                }
            }
            message.setRecipients(Message.RecipientType.TO,
            message.setRecipients(Message.RecipientType.BCC,
                    tos.toArray(new InternetAddress[tos.size()]));
            message.setSentDate(new Date());
        } catch (Exception e) {
src/com/gitblit/client/EditRepositoryDialog.java
@@ -52,7 +52,6 @@
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.TeamModel;
import com.gitblit.utils.StringUtils;
/**
@@ -89,6 +88,8 @@
    private JCheckBox skipSummaryMetrics;
    private JCheckBox isFrozen;
    private JTextField mailRecipientsField;
    private JComboBox accessRestriction;
@@ -159,6 +160,9 @@
                anRepository.skipSummaryMetrics);
        isFrozen = new JCheckBox(Translation.get("gb.isFrozenDescription"), anRepository.isFrozen);
        mailRecipientsField = new JTextField(anRepository.mailRecipients == null ? ""
                : StringUtils.flattenStrings(anRepository.mailRecipients, " "), 50);
        accessRestriction = new JComboBox(AccessRestrictionType.values());
        accessRestriction.setRenderer(new AccessRestrictionRenderer());
        accessRestriction.setSelectedItem(anRepository.accessRestriction);
@@ -190,6 +194,7 @@
        fieldsPanel
                .add(newFieldPanel(Translation.get("gb.skipSummaryMetrics"), skipSummaryMetrics));
        fieldsPanel.add(newFieldPanel(Translation.get("gb.isFrozen"), isFrozen));
        fieldsPanel.add(newFieldPanel(Translation.get("gb.mailRecipients"), mailRecipientsField));
        usersPalette = new JPalette<String>();
        JPanel accessPanel = new JPanel(new BorderLayout(5, 5));
@@ -348,6 +353,8 @@
        repository.skipSummaryMetrics = skipSummaryMetrics.isSelected();
        repository.isFrozen = isFrozen.isSelected();
        repository.mailRecipients = StringUtils.getStringsFromValue(mailRecipientsField.getText().trim(), " ");
        repository.accessRestriction = (AccessRestrictionType) accessRestriction.getSelectedItem();
        repository.federationStrategy = (FederationStrategy) federationStrategy.getSelectedItem();
src/com/gitblit/models/RepositoryModel.java
@@ -57,6 +57,7 @@
    public String size;
    public List<String> preReceiveScripts;
    public List<String> postReceiveScripts;
    public List<String> mailRecipients;
    public RepositoryModel() {
        this("", "", "", new Date(0));
src/com/gitblit/wicket/GitBlitWebApp.properties
@@ -196,3 +196,5 @@
gb.permittedTeams = permitted teams
gb.emptyRepository = empty repository
gb.repositoryUrl = repository url
gb.mailRecipients = mail recipients
gb.mailRecipientsDescription = space-delimited, used by sendemail Groovy hook
src/com/gitblit/wicket/pages/EditRepositoryPage.html
@@ -21,14 +21,15 @@
                <tr><th><wicket:message key="gb.skipSizeCalculation"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="skipSizeCalculation" tabindex="9" /> &nbsp;<i><wicket:message key="gb.skipSizeCalculationDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.skipSummaryMetrics"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="skipSummaryMetrics" tabindex="10" /> &nbsp;<i><wicket:message key="gb.skipSummaryMetricsDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.isFrozen"></wicket:message></th><td class="edit"><input type="checkbox" wicket:id="isFrozen" tabindex="11" /> &nbsp;<i><wicket:message key="gb.isFrozenDescription"></wicket:message></i></td></tr>
                <tr><th><wicket:message key="gb.mailRecipients"></wicket:message></th><td class="edit"><input class="span9" type="text" wicket:id="mailRecipients" size="40" tabindex="12" /> &nbsp;<i><wicket:message key="gb.mailRecipientsDescription"></wicket:message></i></td></tr>
                <tr><td colspan="2"><hr></hr></td></tr>
                <tr><th><wicket:message key="gb.accessRestriction"></wicket:message></th><td class="edit"><select class="span6" wicket:id="accessRestriction" tabindex="12" /></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>
                <tr><td colspan="2"><hr></hr></td></tr>        
                <tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span6" wicket:id="federationStrategy" tabindex="13" /></td></tr>
                <tr><th><wicket:message key="gb.federationStrategy"></wicket:message></th><td class="edit"><select class="span6" wicket:id="federationStrategy" tabindex="14" /></td></tr>
                <tr><th style="vertical-align: top;"><wicket:message key="gb.federationSets"></wicket:message></th><td style="padding:2px;"><span wicket:id="federationSets"></span></td></tr>
                <tr><th></th><td class="editButton"><input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="14" /> &nbsp; <input class="btn primary" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" tabindex="15" /> </td></tr>
                <tr><th></th><td class="editButton"><input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="15" /> &nbsp; <input class="btn primary" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" tabindex="16" /> </td></tr>
            </tbody>
        </table>
    </form>    
src/com/gitblit/wicket/pages/EditRepositoryPage.java
@@ -33,6 +33,8 @@
import org.apache.wicket.markup.html.form.IChoiceRenderer;
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;
@@ -52,6 +54,8 @@
    private final boolean isCreate;
    private boolean isAdmin;
    private IModel<String> mailRecipients;
    public EditRepositoryPage() {
        // create constructor
@@ -87,7 +91,6 @@
            }
            federationSets.addAll(repositoryModel.federationSets);
        }        
        final String oldName = repositoryModel.name;
        // users palette
@@ -169,6 +172,13 @@
                        }
                    }
                    // set mail recipients
                    String ml = mailRecipients.getObject();
                    if (!StringUtils.isEmpty(ml)) {
                        List<String> list = StringUtils.getStringsFromValue(ml.trim(), " ");
                        repositoryModel.mailRecipients = list;
                    }
                    // save the repository
                    GitBlit.self().updateRepositoryModel(oldName, repositoryModel, isCreate);
@@ -230,6 +240,9 @@
        form.add(new CheckBox("showReadme"));
        form.add(new CheckBox("skipSizeCalculation"));
        form.add(new CheckBox("skipSummaryMetrics"));
        mailRecipients = new Model<String>(repositoryModel.mailRecipients == null ? ""
                : StringUtils.flattenStrings(repositoryModel.mailRecipients, " "));
        form.add(new TextField<String>("mailRecipients", mailRecipients));
        form.add(usersPalette);
        form.add(teamsPalette);
        form.add(federationSetsPalette);