diff --git a/plugins/scm-git-plugin/src/main/resources/sonia/scm/git.config.js b/plugins/scm-git-plugin/src/main/resources/sonia/scm/git.config.js index a452710302..651e9e4f54 100644 --- a/plugins/scm-git-plugin/src/main/resources/sonia/scm/git.config.js +++ b/plugins/scm-git-plugin/src/main/resources/sonia/scm/git.config.js @@ -37,11 +37,6 @@ registerConfigPanel({ name: 'repositoryDirectory', fieldLabel: 'Repository directory', allowBlank : false - },{ - xtype: 'textfield', - name: 'baseUrl', - fieldLabel: 'Base URL', - allowBlank : false }], onSubmit: function(values){ diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java index fbe6e1f848..5da06c30ee 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java @@ -63,7 +63,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; -import java.util.logging.Level; /** * @@ -131,6 +130,20 @@ public class HgRepositoryHandler extends AbstractRepositoryHandler storeRepository(repository, hgDirectory); } + /** + * Method description + * + * + * @param repository + * + * @return + */ + @Override + public String createResourcePath(Repository repository) + { + return "/hg/".concat(repository.getName()); + } + /** * Method description * @@ -361,7 +374,6 @@ public class HgRepositoryHandler extends AbstractRepositoryHandler repository = new Repository(); repository.setType(TYPE_NAME); repository.setName(name); - repository.setUrl(buildUrl(repository)); loadRepository(repository, hgDirectory); } } diff --git a/plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js b/plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js index 7f5e37da8b..3e96a5c130 100644 --- a/plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js +++ b/plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js @@ -47,11 +47,6 @@ registerConfigPanel({ name: 'repositoryDirectory', fieldLabel: 'Repository directory', allowBlank : false - },{ - xtype: 'textfield', - name: 'baseUrl', - fieldLabel: 'Base URL', - allowBlank : false }], onSubmit: function(values){ diff --git a/plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.config.js b/plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.config.js index 5f132daf9f..70915091af 100644 --- a/plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.config.js +++ b/plugins/scm-svn-plugin/src/main/resources/sonia/scm/svn.config.js @@ -37,16 +37,6 @@ registerConfigPanel({ name: 'repositoryDirectory', fieldLabel: 'Repository directory', allowBlank : false - },{ - xtype: 'textfield', - name: 'baseUrl', - fieldLabel: 'Base URL', - allowBlank : false - },{ - xtype: 'textfield', - name: 'svnAccessFile', - fieldLabel: 'Svn Accessfile', - allowBlank : true }], onSubmit: function(values){ diff --git a/scm-core/src/main/java/sonia/scm/repository/AbstractRepositoryHandler.java b/scm-core/src/main/java/sonia/scm/repository/AbstractRepositoryHandler.java index 91a2ee357f..bf2dbba2c8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/AbstractRepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/AbstractRepositoryHandler.java @@ -41,7 +41,6 @@ import org.slf4j.LoggerFactory; import sonia.scm.ConfigChangedListener; import sonia.scm.SCMContextProvider; import sonia.scm.util.IOUtil; -import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -60,7 +59,7 @@ import javax.xml.bind.JAXB; * * @param */ -public abstract class AbstractRepositoryHandler +public abstract class AbstractRepositoryHandler implements RepositoryHandler { @@ -213,31 +212,6 @@ public abstract class AbstractRepositoryHandler //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param repository - * - * @return - */ - protected String buildUrl(Repository repository) - { - String url = config.getBaseUrl(); - - if (Util.isNotEmpty(url)) - { - if (!url.endsWith("/")) - { - url = url.concat("/"); - } - - url = url.concat(repository.getName()); - } - - return url; - } - /** * Method description * @@ -247,7 +221,6 @@ public abstract class AbstractRepositoryHandler protected void initNewRepository(Repository repository) { repository.setId(UUID.randomUUID().toString()); - repository.setUrl(buildUrl(repository)); repository.setCreationDate(System.currentTimeMillis()); } diff --git a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java index 24b8056801..46a937c575 100644 --- a/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java +++ b/scm-core/src/main/java/sonia/scm/repository/AbstractSimpleRepositoryHandler.java @@ -43,7 +43,6 @@ import sonia.scm.SCMContextProvider; import sonia.scm.io.CommandResult; import sonia.scm.io.ExtendedCommand; import sonia.scm.util.IOUtil; -import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ @@ -105,6 +104,24 @@ public abstract class AbstractSimpleRepositoryHandler, - ListenerSupport {} + ListenerSupport +{ + + /** + * Method description + * + * + * @return + */ + public String createResourcePath( Repository repository ); +} diff --git a/scm-core/src/main/java/sonia/scm/repository/SimpleRepositoryConfig.java b/scm-core/src/main/java/sonia/scm/repository/SimpleRepositoryConfig.java index 3ef47dfb65..774e16b6f2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/SimpleRepositoryConfig.java +++ b/scm-core/src/main/java/sonia/scm/repository/SimpleRepositoryConfig.java @@ -39,7 +39,7 @@ import java.io.File; * * @author Sebastian Sdorra */ -public class SimpleRepositoryConfig extends BasicRepositoryConfig +public class SimpleRepositoryConfig { /** diff --git a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java index fac8b3da34..46136c9809 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java +++ b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java @@ -349,7 +349,7 @@ public class ScmServletModule extends ServletModule { try { - JAXB.unmarshal(file, ScmConfiguration.class); + config = JAXB.unmarshal(file, ScmConfiguration.class); } catch (Exception ex) { diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java index 86037e965c..d243404565 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java @@ -29,6 +29,8 @@ * */ + + package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- @@ -36,8 +38,10 @@ package sonia.scm.api.rest.resources; import com.google.inject.Inject; import com.google.inject.Singleton; +import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryException; +import sonia.scm.repository.RepositoryHandler; import sonia.scm.repository.RepositoryManager; //~--- JDK imports ------------------------------------------------------------ @@ -46,8 +50,11 @@ import java.io.IOException; import java.util.Collection; +import javax.servlet.http.HttpServletRequest; + import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; /** @@ -63,6 +70,23 @@ public class RepositoryResource extends AbstractResource /** Field description */ public static final String PATH_PART = "repositories"; + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + * + * @param configuration + * @param repositoryManager + */ + @Inject + public RepositoryResource(ScmConfiguration configuration, + RepositoryManager repositoryManager) + { + this.configuration = configuration; + this.repositoryManager = repositoryManager; + } + //~--- methods -------------------------------------------------------------- /** @@ -126,9 +150,15 @@ public class RepositoryResource extends AbstractResource protected Repository[] getAllItems() { Collection repositoryCollection = repositoryManager.getAll(); + Repository[] repositories = + repositoryCollection.toArray(new Repository[repositoryCollection.size()]); - return repositoryCollection.toArray( - new Repository[repositoryCollection.size()]); + for (Repository repository : repositories) + { + appendUrl(repository); + } + + return repositories; } /** @@ -157,7 +187,11 @@ public class RepositoryResource extends AbstractResource @Override protected Repository getItem(String id) { - return repositoryManager.get(id); + Repository repository = repositoryManager.get(id); + + appendUrl(repository); + + return repository; } /** @@ -172,9 +206,46 @@ public class RepositoryResource extends AbstractResource return PATH_PART; } + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param repository + */ + private void appendUrl(Repository repository) + { + StringBuilder url = new StringBuilder(request.getScheme()); + + url.append("://").append(configuration.getServername()); + url.append(":").append(request.getLocalPort()); + + String ctxPath = request.getContextPath(); + + url.append(ctxPath); + + if (ctxPath.endsWith("/")) + { + ctxPath.substring(0, ctxPath.length() - 1); + } + + RepositoryHandler handler = + repositoryManager.getHandler(repository.getType()); + + url.append(handler.createResourcePath(repository)); + repository.setUrl(url.toString()); + } + //~--- fields --------------------------------------------------------------- /** Field description */ - @Inject + private ScmConfiguration configuration; + + /** Field description */ private RepositoryManager repositoryManager; + + /** TODO path request direct to method */ + @Context + private HttpServletRequest request; }