generate repository urls

This commit is contained in:
Sebastian Sdorra
2010-11-19 19:17:54 +01:00
parent f8699c3318
commit 7bbcacf2b0
11 changed files with 121 additions and 136 deletions

View File

@@ -349,7 +349,7 @@ public class ScmServletModule extends ServletModule
{
try
{
JAXB.unmarshal(file, ScmConfiguration.class);
config = JAXB.unmarshal(file, ScmConfiguration.class);
}
catch (Exception ex)
{

View File

@@ -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<Repository>
/** 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<Repository>
protected Repository[] getAllItems()
{
Collection<Repository> 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<Repository>
@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<Repository>
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;
}