fix repository caching bug

This commit is contained in:
Sebastian Sdorra
2010-10-16 00:01:21 +02:00
parent 5c0caafd32
commit fd86fd5d76
5 changed files with 125 additions and 16 deletions

View File

@@ -0,0 +1,22 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package sonia.scm;
/**
*
* @author Sebastian Sdorra
*/
public interface ConfigChangedListener
{
/**
* Method description
*
*/
public void configChanged(Object config);
}

View File

@@ -9,6 +9,7 @@ package sonia.scm.repository;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import sonia.scm.ConfigChangedListener;
import sonia.scm.SCMContextProvider; import sonia.scm.SCMContextProvider;
import sonia.scm.util.Util; import sonia.scm.util.Util;
@@ -18,6 +19,8 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import javax.xml.bind.JAXB; import javax.xml.bind.JAXB;
@@ -42,6 +45,18 @@ public abstract class AbstractRepositoryHandler<C extends BasicRepositoryConfig>
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param listener
*/
@Override
public void addListener(ConfigChangedListener listener)
{
listenerSet.add(listener);
}
/** /**
* Method description * Method description
* *
@@ -84,6 +99,18 @@ public abstract class AbstractRepositoryHandler<C extends BasicRepositoryConfig>
} }
} }
/**
* Method description
*
*
* @param listener
*/
@Override
public void removeListener(ConfigChangedListener listener)
{
listenerSet.remove(listener);
}
/** /**
* Method description * Method description
* *
@@ -132,6 +159,7 @@ public abstract class AbstractRepositoryHandler<C extends BasicRepositoryConfig>
public void setConfig(C config) public void setConfig(C config)
{ {
this.config = config; this.config = config;
fireConfigChanged();
} }
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
@@ -174,6 +202,18 @@ public abstract class AbstractRepositoryHandler<C extends BasicRepositoryConfig>
repository.setCreationDate(new Date()); repository.setCreationDate(new Date());
} }
/**
* Method description
*
*/
private void fireConfigChanged()
{
for (ConfigChangedListener listener : listenerSet)
{
listener.configChanged(config);
}
}
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */ /** Field description */
@@ -181,4 +221,8 @@ public abstract class AbstractRepositoryHandler<C extends BasicRepositoryConfig>
/** Field description */ /** Field description */
protected File configFile; protected File configFile;
/** Field description */
private Set<ConfigChangedListener> listenerSet =
new HashSet<ConfigChangedListener>();
} }

View File

@@ -36,8 +36,8 @@ import javax.xml.bind.JAXB;
* *
* @param <T> * @param <T>
*/ */
public abstract class AbstractSimpleRepositoryHandler<T extends SimpleRepositoryConfig> public abstract class AbstractSimpleRepositoryHandler<C extends SimpleRepositoryConfig>
extends AbstractRepositoryHandler<T> extends AbstractRepositoryHandler<C>
{ {
/** Field description */ /** Field description */
@@ -343,20 +343,13 @@ public abstract class AbstractSimpleRepositoryHandler<T extends SimpleRepository
} }
else else
{ {
String url = config.getBaseUrl(); String url = buildUrl(repository);
if (Util.isNotEmpty(url)) if (Util.isNotEmpty(url))
{ {
if (!url.endsWith("/"))
{
url = url.concat("/");
}
url = url.concat(repository.getName());
}
repository.setUrl(url); repository.setUrl(url);
} }
}
return repository; return repository;
} }

View File

@@ -9,14 +9,19 @@ package sonia.scm.repository;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import sonia.scm.ConfigChangedListener;
import sonia.scm.Handler; import sonia.scm.Handler;
import sonia.scm.ListenerSupport;
/** /**
* *
* @author Sebastian Sdorra * @author Sebastian Sdorra
*
* @param <C>
*/ */
public interface RepositoryHandler public interface RepositoryHandler
extends Handler<Repository, RepositoryException> extends Handler<Repository, RepositoryException>,
ListenerSupport<ConfigChangedListener>
{ {
/** /**

View File

@@ -10,12 +10,16 @@ package sonia.scm.cache;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.name.Named;
import sonia.scm.ConfigChangedListener;
import sonia.scm.SCMContextProvider;
import sonia.scm.Undecorated;
import sonia.scm.repository.AbstractRepositoryManagerDecorator; import sonia.scm.repository.AbstractRepositoryManagerDecorator;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryException; import sonia.scm.repository.RepositoryException;
import sonia.scm.repository.RepositoryHandler;
import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.RepositoryType;
import sonia.scm.util.AssertUtil; import sonia.scm.util.AssertUtil;
import sonia.scm.util.Util; import sonia.scm.util.Util;
@@ -24,7 +28,6 @@ import sonia.scm.util.Util;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import sonia.scm.Undecorated;
/** /**
* *
@@ -32,6 +35,7 @@ import sonia.scm.Undecorated;
*/ */
public class CacheRepositoryManagerDecorator public class CacheRepositoryManagerDecorator
extends AbstractRepositoryManagerDecorator extends AbstractRepositoryManagerDecorator
implements ConfigChangedListener
{ {
/** Field description */ /** Field description */
@@ -51,8 +55,7 @@ public class CacheRepositoryManagerDecorator
*/ */
@Inject @Inject
public CacheRepositoryManagerDecorator( public CacheRepositoryManagerDecorator(
@Undecorated RepositoryManager manager, @Undecorated RepositoryManager manager, CacheManager cacheManager)
CacheManager cacheManager)
{ {
super(manager); super(manager);
cache = cacheManager.getExtendedCache(String.class, Repository.class, cache = cacheManager.getExtendedCache(String.class, Repository.class,
@@ -61,6 +64,31 @@ public class CacheRepositoryManagerDecorator
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param handler
*/
@Override
public void addHandler(RepositoryHandler handler)
{
super.addHandler(handler);
handler.addListener(this);
}
/**
* Method description
*
*
* @param config
*/
@Override
public void configChanged(Object config)
{
cache.clear();
}
/** /**
* Method description * Method description
* *
@@ -95,6 +123,23 @@ public class CacheRepositoryManagerDecorator
removeFromCache(repository); removeFromCache(repository);
} }
/**
* Method description
*
*
* @param context
*/
@Override
public void init(SCMContextProvider context)
{
super.init(context);
for (RepositoryType type : getTypes())
{
getHandler(type.getName()).addListener(this);
}
}
/** /**
* Method description * Method description
* *