diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java b/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java index c62ad1d3e3..2f29d870b5 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java @@ -33,10 +33,15 @@ package sonia.scm.plugin; +//~--- JDK imports ------------------------------------------------------------ + +import javax.xml.bind.annotation.XmlRootElement; + /** * * @author Sebastian Sdorra */ +@XmlRootElement(name = "plugin-information") public class PluginInformation { diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java new file mode 100644 index 0000000000..99a68b27e1 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/PluginResource.java @@ -0,0 +1,112 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.api.rest.resources; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import sonia.scm.plugin.Plugin; +import sonia.scm.plugin.PluginInformation; +import sonia.scm.plugin.PluginManager; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +/** + * + * @author Sebastian Sdorra + */ +@Singleton +@Path("plugins") +public class PluginResource +{ + + /** + * Constructs ... + * + * + * @param pluginManager + */ + @Inject + public PluginResource(PluginManager pluginManager) + { + Collection pluginCollection = pluginManager.getPlugins(); + List informations = new ArrayList(); + + if (pluginCollection != null) + { + for (Plugin plugin : pluginCollection) + { + PluginInformation pluginInfo = plugin.getInformation(); + + if (pluginInfo != null) + { + informations.add(pluginInfo); + } + } + } + + plugins = informations.toArray(new PluginInformation[0]); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @GET + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + public PluginInformation[] getPlugins() + { + return plugins; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private PluginInformation[] plugins; +} diff --git a/scm-webapp/src/main/webapp/index.html b/scm-webapp/src/main/webapp/index.html index c5a2687e4a..36fed234fb 100644 --- a/scm-webapp/src/main/webapp/index.html +++ b/scm-webapp/src/main/webapp/index.html @@ -57,6 +57,7 @@ + diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js b/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js new file mode 100644 index 0000000000..e6d147d887 --- /dev/null +++ b/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js @@ -0,0 +1,79 @@ +/* * + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + +// register namespace +Ext.ns("Sonia.plugin"); + +// pluginGrid + +Sonia.plugin.Grid = Ext.extend(Sonia.rest.Grid, { + + initComponent: function(){ + + var pluginStore = new Sonia.rest.JsonStore({ + url: restUrl + 'plugins.json', + root: 'plugin-information', + fields: [ 'name', 'author', 'description', 'url', 'version' ], + sortInfo: { + field: 'name' + } + }); + + var pluginColModel = new Ext.grid.ColumnModel({ + defaults: { + sortable: true, + scope: this, + width: 125 + }, + columns: [ + {id: 'name', header: 'Name', dataIndex: 'name'}, + {id: 'author', header: 'Author', dataIndex: 'author' }, + {id: 'description', header: 'Description', dataIndex: 'description'}, + {id: 'version', header: 'Version', dataIndex: 'version'}, + {id: 'Url', header: 'Url', dataIndex: 'url', renderer: this.renderUrl, width: 250} + ] + }); + + var config = { + autoExpandColumn: 'description', + store: pluginStore, + colModel: pluginColModel + }; + + + Ext.apply(this, Ext.apply(this.initialConfig, config)); + Sonia.plugin.Grid.superclass.initComponent.apply(this, arguments); + } + +}); + +// register xtype +Ext.reg('pluginGrid', Sonia.plugin.Grid); \ No newline at end of file diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.scm.js b/scm-webapp/src/main/webapp/resources/js/sonia.scm.js index 2689583703..fdfd31582b 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.scm.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.scm.js @@ -132,6 +132,11 @@ Ext.onReady(function(){ fn: function(){ addTabPanel('repositoryConfig', 'repositoryConfig', 'Repository Config'); } + },{ + label: 'Plugins', + fn: function(){ + addTabPanel('plugins', 'pluginGrid', 'Plugins') + } }] },{ title: 'Security',