From 2e8481e63f834307e8db49f758c53dbf77d0edec Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 15 Jun 2012 18:30:34 +0200 Subject: [PATCH 1/4] mark url of repository as deprecated --- .../java/sonia/scm/repository/Repository.java | 25 +++++++- .../sonia/scm/repository/RepositoryTest.java | 61 +++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 scm-core/src/test/java/sonia/scm/repository/RepositoryTest.java diff --git a/scm-core/src/main/java/sonia/scm/repository/Repository.java b/scm-core/src/main/java/sonia/scm/repository/Repository.java index 965f601d65..ea022d4538 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Repository.java +++ b/scm-core/src/main/java/sonia/scm/repository/Repository.java @@ -39,6 +39,7 @@ import com.google.common.base.Objects; import sonia.scm.BasicPropertiesAware; import sonia.scm.ModelObject; +import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; import sonia.scm.util.ValidationUtil; @@ -164,6 +165,22 @@ public class Repository extends BasicPropertiesAware implements ModelObject repository.setArchived(archived); } + /** + * Creates the url of the repository. + * + * + * @param baseUrl base url of the server including the context path + * + * @return url of the repository + * @since 1.17 + */ + public String createUrl(String baseUrl) + { + String url = HttpUtil.append(baseUrl, type); + + return HttpUtil.append(url, name); + } + /** * Returns true if the {@link Repository} is the same as the obj argument. * @@ -343,7 +360,9 @@ public class Repository extends BasicPropertiesAware implements ModelObject * * * @return base url + * @deprecated use {@link #createUrl(String)} */ + @Deprecated public String getUrl() { return url; @@ -511,7 +530,9 @@ public class Repository extends BasicPropertiesAware implements ModelObject * * * @param url base url + * @deprecated */ + @Deprecated public void setUrl(String url) { this.url = url; @@ -550,6 +571,8 @@ public class Repository extends BasicPropertiesAware implements ModelObject /** Field description */ private String type; - /** Field description */ + /** + * @deprecated use {@link #createUrl(java.lang.String)} instead + */ private String url; } diff --git a/scm-core/src/test/java/sonia/scm/repository/RepositoryTest.java b/scm-core/src/test/java/sonia/scm/repository/RepositoryTest.java new file mode 100644 index 0000000000..5a7ac8c4fb --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/repository/RepositoryTest.java @@ -0,0 +1,61 @@ +/** + * 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.repository; + +//~--- non-JDK imports -------------------------------------------------------- + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * + * @author Sebastian Sdorra + */ +public class RepositoryTest +{ + + /** + * Method description + * + */ + @Test + public void testCreateUrl() + { + Repository repository = new Repository("123", "hg", "test/repo"); + + assertEquals("http://localhost:8080/scm/hg/test/repo", + repository.createUrl("http://localhost:8080/scm")); + assertEquals("http://localhost:8080/scm/hg/test/repo", + repository.createUrl("http://localhost:8080/scm/")); + } +} From b95a275cb86fc3e253faf0973510abf65a27ff17 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 15 Jun 2012 18:37:45 +0200 Subject: [PATCH 2/4] use createUrl instead of deprecated getUrl --- .../cli/cmd/CreateRepositorySubCommand.java | 2 +- .../scm/cli/cmd/GetRepositorySubCommand.java | 2 +- .../cli/cmd/ListRepositoriesSubCommand.java | 2 +- .../cli/cmd/ModifyRepositorySubCommand.java | 2 +- .../scm/cli/cmd/PermissionSubCommand.java | 2 +- .../scm/cli/wrapper/RepositoryWrapper.java | 23 +++++++++++++++++-- .../sonia/scm/cli/wrapper/WrapperUtil.java | 9 ++++++-- 7 files changed, 33 insertions(+), 9 deletions(-) diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateRepositorySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateRepositorySubCommand.java index 79e8c5a96f..52828eba25 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateRepositorySubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateRepositorySubCommand.java @@ -170,7 +170,7 @@ public class CreateRepositorySubCommand extends TemplateSubCommand Map env = new HashMap(); - env.put("repository", new RepositoryWrapper(repository)); + env.put("repository", new RepositoryWrapper(config, repository)); renderTemplate(env, GetRepositorySubCommand.TEMPLATE); } diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetRepositorySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetRepositorySubCommand.java index 9e9c0fbe29..c7c497bacf 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetRepositorySubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetRepositorySubCommand.java @@ -104,7 +104,7 @@ public class GetRepositorySubCommand extends TemplateSubCommand { Map env = new HashMap(); - env.put("repository", new RepositoryWrapper(repository)); + env.put("repository", new RepositoryWrapper(config, repository)); renderTemplate(env, TEMPLATE); } else diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListRepositoriesSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListRepositoriesSubCommand.java index 518bd062d5..2235781791 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListRepositoriesSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListRepositoriesSubCommand.java @@ -74,7 +74,7 @@ public class ListRepositoriesSubCommand extends TemplateSubCommand List repositories = session.getRepositoryHandler().getAll(); Map env = new HashMap(); - env.put("repositories", WrapperUtil.wrapRepositories(repositories)); + env.put("repositories", WrapperUtil.wrapRepositories(config, repositories)); renderTemplate(env, TEMPLATE); } } diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyRepositorySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyRepositorySubCommand.java index 1f991fa746..5ec4c59519 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyRepositorySubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyRepositorySubCommand.java @@ -214,7 +214,7 @@ public class ModifyRepositorySubCommand extends TemplateSubCommand Map env = new HashMap(); - env.put("repository", new RepositoryWrapper(repository)); + env.put("repository", new RepositoryWrapper(config, repository)); renderTemplate(env, GetRepositorySubCommand.TEMPLATE); } else diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/PermissionSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/PermissionSubCommand.java index c701a45808..a6b5eba2f5 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/PermissionSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/PermissionSubCommand.java @@ -120,7 +120,7 @@ public abstract class PermissionSubCommand extends TemplateSubCommand Map env = new HashMap(); - env.put("repository", new RepositoryWrapper(repository)); + env.put("repository", new RepositoryWrapper(config, repository)); renderTemplate(env, GetRepositorySubCommand.TEMPLATE); } else diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/wrapper/RepositoryWrapper.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/wrapper/RepositoryWrapper.java index 68d5131cbc..216afde624 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/wrapper/RepositoryWrapper.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/wrapper/RepositoryWrapper.java @@ -35,6 +35,7 @@ package sonia.scm.cli.wrapper; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.cli.config.ServerConfig; import sonia.scm.repository.Permission; import sonia.scm.repository.Repository; @@ -54,10 +55,25 @@ public class RepositoryWrapper extends AbstractWrapper * Constructs ... * * + * @param config * @param repository */ - public RepositoryWrapper(Repository repository) + public RepositoryWrapper(ServerConfig config, Repository repository) { + this(config.getServerUrl(), repository); + } + + /** + * Constructs ... + * + * + * + * @param baseUrl + * @param repository + */ + public RepositoryWrapper(String baseUrl, Repository repository) + { + this.baseUrl = baseUrl; this.repository = repository; } @@ -159,7 +175,7 @@ public class RepositoryWrapper extends AbstractWrapper */ public String getUrl() { - return repository.getUrl(); + return repository.createUrl(baseUrl); } /** @@ -186,6 +202,9 @@ public class RepositoryWrapper extends AbstractWrapper //~--- fields --------------------------------------------------------------- + /** Field description */ + private String baseUrl; + /** Field description */ private Repository repository; } diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/wrapper/WrapperUtil.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/wrapper/WrapperUtil.java index dce0bef3fc..f508b45039 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/wrapper/WrapperUtil.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/wrapper/WrapperUtil.java @@ -35,6 +35,7 @@ package sonia.scm.cli.wrapper; //~--- non-JDK imports -------------------------------------------------------- +import sonia.scm.cli.config.ServerConfig; import sonia.scm.group.Group; import sonia.scm.repository.Repository; import sonia.scm.user.User; @@ -76,18 +77,22 @@ public class WrapperUtil * Method description * * + * + * @param baseUrl + * + * @param config * @param repositories * * @return */ - public static List wrapRepositories( + public static List wrapRepositories(ServerConfig config, Collection repositories) { List wrappers = new ArrayList(); for (Repository r : repositories) { - wrappers.add(new RepositoryWrapper(r)); + wrappers.add(new RepositoryWrapper(config.getServerUrl(), r)); } return wrappers; From 48eaca73ef620897b9c7be6f831f30155ce22ecf Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 15 Jun 2012 18:58:26 +0200 Subject: [PATCH 3/4] create repository url from repository type and name --- .../js/repository/sonia.repository.grid.js | 14 ++++++++++---- .../js/repository/sonia.repository.infopanel.js | 4 ++-- .../resources/js/repository/sonia.repository.js | 10 ++++++++++ .../main/webapp/resources/js/util/sonia.util.js | 15 +++++++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.grid.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.grid.js index 4d157f0dcb..a9428d2413 100644 --- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.grid.js +++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.grid.js @@ -86,8 +86,6 @@ Sonia.repository.Grid = Ext.extend(Sonia.rest.Grid, { name: 'description' },{ name: 'creationDate' - },{ - name:'url' },{ name: 'public' },{ @@ -150,8 +148,9 @@ Sonia.repository.Grid = Ext.extend(Sonia.rest.Grid, { },{ id: 'Url', header: this.colUrlText, - dataIndex: 'url', - renderer: this.renderUrl, + dataIndex: 'name', + renderer: this.renderRepositoryUrl, + scope: this, width: 250 },{ id: 'Archive', @@ -219,6 +218,13 @@ Sonia.repository.Grid = Ext.extend(Sonia.rest.Grid, { } }, + renderRepositoryUrl: function(name, meta, record){ + var type = record.get('type'); + return this.renderUrl( + Sonia.repository.createUrl(type, name) + ); + }, + renderArchive: function(v){ return v ? ' + v + ' : ''; }, diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.infopanel.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.infopanel.js index 20c40c62a7..01f4bdffa9 100644 --- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.infopanel.js +++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.infopanel.js @@ -74,7 +74,7 @@ Sonia.repository.InfoPanel = Ext.extend(Ext.Panel, { text: this.urlText },{ xtype: 'box', - html: String.format(this.linkTemplate, this.item.url) + html: String.format(this.linkTemplate, Sonia.repository.createUrlFromObject(this.item)) }]; var config = { @@ -105,7 +105,7 @@ Sonia.repository.InfoPanel = Ext.extend(Ext.Panel, { }, getRepositoryUrlWithUsername: function(){ - var uri = this.item.url; + var uri = Sonia.repository.createUrlFromObject(this.item); if ( state.user.name != 'anonymous' ){ var index = uri.indexOf("://"); if ( index > 0 ){ diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.js index 13d1d1af56..0c3dad29f8 100644 --- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.js +++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.js @@ -78,6 +78,16 @@ Sonia.repository.setEditPanel = function(panels){ editPanel.doLayout(); } +Sonia.repository.createUrl = function(type, name){ + return Sonia.util.getBaseUrl() + '/' + type + '/' + name +} + +Sonia.repository.createUrlFromObject = function(repository){ + var url = Sonia.repository.createUrl(repository.type, repository.name); + console.debug(url); + return url; +} + /** * default panel */ diff --git a/scm-webapp/src/main/webapp/resources/js/util/sonia.util.js b/scm-webapp/src/main/webapp/resources/js/util/sonia.util.js index 450ba16a57..4f80ed7b09 100644 --- a/scm-webapp/src/main/webapp/resources/js/util/sonia.util.js +++ b/scm-webapp/src/main/webapp/resources/js/util/sonia.util.js @@ -59,6 +59,21 @@ Sonia.util.getContextPath = function(){ return path; } +Sonia.util.getBaseUrl = function(){ + var url = location.href; + var i = url.indexOf('#'); + if ( i > 0 ){ + url = url.substring(0, i); + } + + if ( url.endsWith('/index.html') ){ + url = url.substring(0, url.length - '/index.html'.length); + } else if ( url.endsWith('/') ){ + url = url.substring(0, url.length -1); + } + return url; +} + Sonia.util.getName = function(path){ var name = path; var index = path.lastIndexOf('/'); From e6d4f081a20b1b82cfa521582efc3e39b2388238 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 20 Jun 2012 08:31:54 +0200 Subject: [PATCH 4/4] close branch issue-156