]> source.dussan.org Git - gitblit.git/commitdiff
Web UI done for Custom Fields. Changed variable names to be consistent with "custom...
authorJohn Crygier <john.crygier@aon.com>
Fri, 4 May 2012 18:24:01 +0000 (13:24 -0500)
committerJohn Crygier <john.crygier@aon.com>
Fri, 4 May 2012 18:24:01 +0000 (13:24 -0500)
distrib/gitblit.properties
src/com/gitblit/GitBlit.java
src/com/gitblit/models/RepositoryModel.java
src/com/gitblit/wicket/GitBlitWebApp.properties
src/com/gitblit/wicket/pages/EditRepositoryPage.html
src/com/gitblit/wicket/pages/EditRepositoryPage.java
tests/com/gitblit/tests/RepositoryModelTest.java

index 8bfa417e985bece2e12b39a2a7fa632f25661665..e04f2c8faafadc0a1b483d6fc9a6f0d853e5d35f 100644 (file)
@@ -816,3 +816,13 @@ server.storePassword = gitblit
 # SINCE 0.5.0\r
 # RESTART REQUIRED\r
 server.shutdownPort = 8081\r
+\r
+# Custom Defined Properties for Repositories\r
+# Space delimited (use quotes if labels have spaces) list of custom properties\r
+# to show up on the "Edit Repository" page, with labels.  Thes custom properties will\r
+# then be available for hooks.\r
+#\r
+# E.g. "commit-msg-regex=Commit Message Regualar Expression" another-property=Another\r
+#\r
+# SINCE 1.0.0\r
+repository.customFields = 
\ No newline at end of file
index a95e4f74004eb58b234ff2a598899d1d58e8a78e..8ba080afd0c247f724b7c4b2444c1d17803a2a3e 100644 (file)
@@ -859,9 +859,9 @@ public class GitBlit implements ServletContextListener {
                                        "gitblit", null, "indexBranch")));\r
                        \r
                        // Custom defined properties\r
-                       model.userDefinedProperties = new HashMap<String, String>();\r
+                       model.customDefinedProperties = new HashMap<String, String>();\r
                        for (String aProperty : config.getNames(Constants.CUSTOM_DEFINED_PROP_SECTION, Constants.CUSTOM_DEFINED_PROP_SUBSECTION)) {\r
-                               model.userDefinedProperties.put(aProperty, config.getString(Constants.CUSTOM_DEFINED_PROP_SECTION, Constants.CUSTOM_DEFINED_PROP_SUBSECTION, aProperty));\r
+                               model.customDefinedProperties.put(aProperty, config.getString(Constants.CUSTOM_DEFINED_PROP_SECTION, Constants.CUSTOM_DEFINED_PROP_SUBSECTION, aProperty));\r
                        }\r
                }\r
                model.HEAD = JGitUtils.getHEADRef(r);\r
@@ -1111,7 +1111,7 @@ public class GitBlit implements ServletContextListener {
                updateList(config, "indexBranch", repository.indexedBranches);\r
                \r
                // User Defined Properties\r
-               for (Entry<String, String> singleProperty : repository.userDefinedProperties.entrySet()) {\r
+               for (Entry<String, String> singleProperty : repository.customDefinedProperties.entrySet()) {\r
                        config.setString(Constants.CUSTOM_DEFINED_PROP_SECTION, Constants.CUSTOM_DEFINED_PROP_SUBSECTION, singleProperty.getKey(), singleProperty.getValue());\r
                }\r
 \r
index 539aa5133101db9cc578e9cdf17a6ae5a55e4f86..92fc2373d9d822f9460fb132e4755aab4231036b 100644 (file)
@@ -64,7 +64,7 @@ public class RepositoryModel implements Serializable, Comparable<RepositoryModel
        public List<String> preReceiveScripts;\r
        public List<String> postReceiveScripts;\r
        public List<String> mailingLists;\r
-       public Map<String, String> userDefinedProperties;\r
+       public Map<String, String> customDefinedProperties;\r
        private String displayName;\r
        \r
        public RepositoryModel() {\r
index 57ccd68f38bf8cdc824d30aabd3996711bc5b49c..b96a32ed9859eedc221f78bd68c38d19824daf60 100644 (file)
@@ -202,6 +202,8 @@ gb.mailingLists = mailing lists
 gb.preReceiveScripts = pre-receive scripts\r
 gb.postReceiveScripts = post-receive scripts\r
 gb.hookScripts = hook scripts\r
+gb.customDefinedProperties = custom defined properties\r
+gb.customDefinedPropertiesDescription = custom properties available to groovy hooks\r
 gb.accessPermissions = access permissions\r
 gb.filters = filters\r
 gb.generalDescription = common settings\r
index d84573ecbc08b5fa5682c0d8ad0b87a44324850c..e144f38257c92f82ad8cb06931450728c5d9050e 100644 (file)
                                <tr><td colspan="2"><h3><wicket:message key="gb.hookScripts"></wicket:message> &nbsp;<small><wicket:message key="gb.hookScriptsDescription"></wicket:message></small></h3></td></tr>    \r
                                <tr><th style="vertical-align: top;"><wicket:message key="gb.preReceiveScripts"></wicket:message><p></p><span wicket:id="inheritedPreReceive"></span></th><td style="padding:2px;"><span wicket:id="preReceiveScripts"></span></td></tr>\r
                                <tr><th style="vertical-align: top;"><wicket:message key="gb.postReceiveScripts"></wicket:message><p></p><span wicket:id="inheritedPostReceive"></span></th><td style="padding:2px;"><span wicket:id="postReceiveScripts"></span></td></tr>\r
-                               <tr><td colspan='2'><div class="form-actions"><input class="btn btn-primary" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" tabindex="16" /> &nbsp; <input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="17" /></div></td></tr>\r
+                               <div wicket:id="customDefinedPropertiesSection">\r
+                                       <tr><td colspan="2"><h3><wicket:message key="gb.customDefinedProperties"></wicket:message> &nbsp;<small><wicket:message key="gb.customDefinedPropertiesDescription"></wicket:message></small></h3></td></tr>\r
+                                       <tr wicket:id="customDefinedProperties"><th style="vertical-align: top;"><span wicket:id="customLabel"></span></th><td class="edit"><input class="span8" type="text" wicket:id="customValue" size="30" tabindex="16" /></td></tr>\r
+                               </div>\r
+                               <tr><td colspan='2'><div class="form-actions"><input class="btn btn-primary" type="submit" value="Save" wicket:message="value:gb.save" wicket:id="save" tabindex="17" /> &nbsp; <input class="btn" type="submit" value="Cancel" wicket:message="value:gb.cancel" wicket:id="cancel" tabindex="18" /></div></td></tr>\r
                        </tbody>\r
                </table>\r
        </form> \r
index af1b2b4492221dbc371e5fbf526f441c760d26fd..13b9e5a6a34646f0b174df39e3c66bf67ec26fc7 100644 (file)
@@ -16,6 +16,7 @@
 package com.gitblit.wicket.pages;\r
 \r
 import java.text.MessageFormat;\r
+import java.util.AbstractMap;\r
 import java.util.ArrayList;\r
 import java.util.Arrays;\r
 import java.util.Collections;\r
@@ -23,26 +24,32 @@ import java.util.HashSet;
 import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.Map.Entry;\r
 import java.util.Set;\r
 \r
 import org.apache.wicket.PageParameters;\r
 import org.apache.wicket.behavior.SimpleAttributeModifier;\r
 import org.apache.wicket.extensions.markup.html.form.palette.Palette;\r
+import org.apache.wicket.markup.html.WebMarkupContainer;\r
+import org.apache.wicket.markup.html.basic.Label;\r
 import org.apache.wicket.markup.html.form.Button;\r
 import org.apache.wicket.markup.html.form.CheckBox;\r
 import org.apache.wicket.markup.html.form.DropDownChoice;\r
 import org.apache.wicket.markup.html.form.Form;\r
 import org.apache.wicket.markup.html.form.IChoiceRenderer;\r
 import org.apache.wicket.markup.html.form.TextField;\r
+import org.apache.wicket.markup.html.list.ListItem;\r
+import org.apache.wicket.markup.html.list.ListItemModel;\r
+import org.apache.wicket.markup.html.list.ListView;\r
 import org.apache.wicket.model.CompoundPropertyModel;\r
 import org.apache.wicket.model.IModel;\r
 import org.apache.wicket.model.Model;\r
 import org.apache.wicket.model.util.CollectionModel;\r
 import org.apache.wicket.model.util.ListModel;\r
 \r
+import com.gitblit.Constants;\r
 import com.gitblit.Constants.AccessRestrictionType;\r
 import com.gitblit.Constants.FederationStrategy;\r
-import com.gitblit.Constants;\r
 import com.gitblit.GitBlit;\r
 import com.gitblit.GitBlitException;\r
 import com.gitblit.Keys;\r
@@ -149,6 +156,26 @@ public class EditRepositoryPage extends RootSubPage {
                                new ListModel<String>(postReceiveScripts), new CollectionModel<String>(GitBlit\r
                                                .self().getPostReceiveScriptsUnused(repositoryModel)),\r
                                new StringChoiceRenderer(), 12, true);\r
+               \r
+               // Dynamic Custom Defined Properties Properties\r
+               final List<Entry<String, String>> definedProperties = new ArrayList<Entry<String, String>>();\r
+               List<String> customFields = GitBlit.getStrings(Keys.repository.customFields);\r
+               for (String customFieldDef : customFields) {\r
+                       String[] customFieldProperty = customFieldDef.split("=");\r
+                       definedProperties.add(new AbstractMap.SimpleEntry<String, String>(customFieldProperty[0], customFieldProperty[1]));\r
+               }\r
+               \r
+               final ListView<Entry<String, String>> customDefinedProperties = new ListView<Entry<String, String>>("customDefinedProperties", definedProperties) {\r
+                       @Override\r
+                       protected void populateItem(ListItem<Entry<String, String>> item) {\r
+                               String value = repositoryModel.customDefinedProperties.get(item.getModelObject().getKey());\r
+                               \r
+                               item.add(new Label(item.getModelObject().getKey(), item.getModelObject().getValue()));          // Used to get the key later\r
+                               item.add(new Label("customLabel", item.getModelObject().getValue()));\r
+                               item.add(new TextField<String>("customValue", new Model<String>(value)));\r
+                       }\r
+               };\r
+               customDefinedProperties.setReuseItems(true);\r
 \r
                CompoundPropertyModel<RepositoryModel> model = new CompoundPropertyModel<RepositoryModel>(\r
                                repositoryModel);\r
@@ -249,7 +276,16 @@ public class EditRepositoryPage extends RootSubPage {
                                                postReceiveScripts.add(post.next());\r
                                        }\r
                                        repositoryModel.postReceiveScripts = postReceiveScripts;\r
-\r
+                                       \r
+                                       // Loop over each of the user defined properties\r
+                                       for (int i = 0; i < customDefinedProperties.size(); i++) {\r
+                                               ListItem<ListItemModel<String>> item = (ListItem<ListItemModel<String>>) customDefinedProperties.get(i);\r
+                                               String key = item.get(0).getId();               // Item 0 is our 'fake' label\r
+                                               String value = ((TextField<String>)item.get(2)).getValue();             // Item 2 is out text box\r
+                                               \r
+                                               repositoryModel.customDefinedProperties.put(key, value);\r
+                                       }\r
+                                       \r
                                        // save the repository\r
                                        GitBlit.self().updateRepositoryModel(oldName, repositoryModel, isCreate);\r
 \r
@@ -334,6 +370,14 @@ public class EditRepositoryPage extends RootSubPage {
                form.add(postReceivePalette);\r
                form.add(new BulletListPanel("inheritedPostReceive", "inherited", GitBlit.self()\r
                                .getPostReceiveScriptsInherited(repositoryModel)));\r
+               \r
+               WebMarkupContainer customDefinedPropertiesSection = new WebMarkupContainer("customDefinedPropertiesSection") {\r
+                       public boolean isVisible() {\r
+                               return GitBlit.getString(Keys.repository.customFields, "").isEmpty() == false;\r
+                       };\r
+               };\r
+               customDefinedPropertiesSection.add(customDefinedProperties);\r
+               form.add(customDefinedPropertiesSection);\r
 \r
                form.add(new Button("save"));\r
                Button cancel = new Button("cancel") {\r
index f74181528496adbf872befd583ad846550348724..611ed2950c124caac96f60b9e697cb280ce0c9e3 100644 (file)
@@ -67,8 +67,8 @@ public class RepositoryModelTest {
                RepositoryModel model = GitBlit.self().getRepositoryModel(
                                GitBlitSuite.getHelloworldRepository().getDirectory().getName());
                
-               assertEquals("\\d", model.userDefinedProperties.get("commitMessageRegEx"));
-               assertEquals("Hello", model.userDefinedProperties.get("anotherProperty"));
+               assertEquals("\\d", model.customDefinedProperties.get("commitMessageRegEx"));
+               assertEquals("Hello", model.customDefinedProperties.get("anotherProperty"));
        }
        
        @Test
@@ -76,17 +76,17 @@ public class RepositoryModelTest {
                RepositoryModel model = GitBlit.self().getRepositoryModel(
                                GitBlitSuite.getHelloworldRepository().getDirectory().getName());
                
-               assertEquals("\\d", model.userDefinedProperties.get("commitMessageRegEx"));
-               assertEquals("Hello", model.userDefinedProperties.get("anotherProperty"));
+               assertEquals("\\d", model.customDefinedProperties.get("commitMessageRegEx"));
+               assertEquals("Hello", model.customDefinedProperties.get("anotherProperty"));
                
-               assertEquals("Hello", model.userDefinedProperties.put("anotherProperty", "GoodBye"));
+               assertEquals("Hello", model.customDefinedProperties.put("anotherProperty", "GoodBye"));
                GitBlit.self().updateRepositoryModel(model.name, model, false);
                
                model = GitBlit.self().getRepositoryModel(
                                GitBlitSuite.getHelloworldRepository().getDirectory().getName());
                
-               assertEquals("\\d", model.userDefinedProperties.get("commitMessageRegEx"));
-               assertEquals("GoodBye", model.userDefinedProperties.get("anotherProperty"));
+               assertEquals("\\d", model.customDefinedProperties.get("commitMessageRegEx"));
+               assertEquals("GoodBye", model.customDefinedProperties.get("anotherProperty"));
        }
 
 }