You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2008/03/08 00:28:32 UTC

svn commit: r634862 - in /wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup: MarkupCache.java MarkupResourceStream.java

Author: jcompagner
Date: Fri Mar  7 15:28:32 2008
New Revision: 634862

URL: http://svn.apache.org/viewvc?rev=634862&view=rev
Log:
WICKET-1370

Modified:
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupCache.java
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupResourceStream.java

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupCache.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupCache.java?rev=634862&r1=634861&r2=634862&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupCache.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupCache.java Fri Mar  7 15:28:32 2008
@@ -56,7 +56,10 @@
 	private static final Logger log = LoggerFactory.getLogger(MarkupCache.class);
 
 	/** Map of markup tags by class (exactly what is in the file). */
-	private final ICache markupCache;
+	private final ICache /* <String(LocationString),Markup> */markupCache;
+
+	/** Map of markup tags by class (exactly what is in the file). */
+	private final ICache /* <String(CacheKey),String(LocationString)> */markupKeyCache;
 
 	/** The markup cache key provider used by MarkupCache */
 	private IMarkupCacheKeyProvider markupCacheKeyProvider;
@@ -80,6 +83,7 @@
 		this.application = application;
 
 		markupCache = newCacheImplementation();
+		markupKeyCache = newCacheImplementation();
 		if (markupCache == null)
 		{
 			throw new WicketRuntimeException("The map used to cache markup must not be null");
@@ -92,6 +96,7 @@
 	public final void clear()
 	{
 		markupCache.clear();
+		markupKeyCache.clear();
 	}
 
 	/**
@@ -101,6 +106,7 @@
 	public void shutdown()
 	{
 		markupCache.shutdown();
+		markupKeyCache.shutdown();
 	}
 
 	/**
@@ -120,10 +126,11 @@
 
 		// Remove the markup and any other markup which depends on it
 		// (inheritance)
-		Markup markup = (Markup)markupCache.get(cacheKey);
+		String locationString = (String)markupKeyCache.get(cacheKey);
+		Markup markup = (Markup)markupCache.get(locationString);
 		if (markup != null)
 		{
-			markupCache.remove(cacheKey);
+			markupCache.remove(locationString);
 
 			// In practice markup inheritance has probably not more than 3 or 4
 			// levels. And since markup reloading is only enabled in development
@@ -145,7 +152,9 @@
 					if (resourceData != null)
 					{
 						String baseCacheKey = resourceData.getResource().getCacheKey();
-						if (markupCache.get(baseCacheKey) == null)
+						String baseLocationString = (String)markupKeyCache.get(baseCacheKey);
+						if (baseLocationString != null &&
+							markupCache.get(baseLocationString) == null)
 						{
 							if (log.isDebugEnabled())
 							{
@@ -177,7 +186,9 @@
 					{
 						MarkupResourceStream resourceStream = (MarkupResourceStream)modifiable;
 						String resourceCacheKey = resourceStream.getCacheKey();
-						if (markupCache.containsKey(resourceCacheKey) == false)
+						String resouceLocationString = (String)markupKeyCache.get(resourceCacheKey);
+						if (resouceLocationString != null &&
+							markupCache.containsKey(resouceLocationString) == false)
 						{
 							iter.remove();
 						}
@@ -342,19 +353,19 @@
 	 * Put the markup into the cache if cacheKey is not null and the cache does not yet contain the
 	 * cacheKey. Return the markup stored in the cache if cacheKey is present already.
 	 * 
-	 * @param cacheKey
+	 * @param locationString
 	 *            If null, than ignore the cache
 	 * @param markup
 	 * @return markup The markup provided, except if the cacheKey already existed in the cache, than
 	 *         the markup from the cache is provided.
 	 */
-	protected Markup putIntoCache(final String cacheKey, Markup markup)
+	protected Markup putIntoCache(final String locationString, Markup markup)
 	{
-		if (cacheKey != null)
+		if (locationString != null)
 		{
-			if (markupCache.containsKey(cacheKey) == false)
+			if (markupCache.containsKey(locationString) == false)
 			{
-				markupCache.put(cacheKey, markup);
+				markupCache.put(locationString, markup);
 			}
 			else
 			{
@@ -365,7 +376,7 @@
 				// loading in avg takes less than 100ms, it is not really an
 				// issue. For consistency reasons however, we should always use
 				// the markup loaded first which is why it gets returned.
-				markup = (Markup)markupCache.get(cacheKey);
+				markup = (Markup)markupCache.get(locationString);
 			}
 		}
 		return markup;
@@ -385,7 +396,11 @@
 	{
 		if (cacheKey != null)
 		{
-			return (Markup)markupCache.get(cacheKey);
+			String locationString = (String)markupKeyCache.get(cacheKey);
+			if (locationString != null)
+			{
+				return (Markup)markupCache.get(locationString);
+			}
 		}
 		return null;
 	}
@@ -406,13 +421,21 @@
 		final MarkupResourceStream markupResourceStream, final boolean enforceReload)
 	{
 		String cacheKey = markupResourceStream.getCacheKey();
+		String locationString = markupResourceStream.locationAsString();
+		if (locationString == null)
+		{
+			// set the cache key as location string, because location string
+			// couldn't be resolved.
+			locationString = cacheKey;
+		}
 		try
 		{
 			Markup markup = getMarkupLoader().loadMarkup(container, markupResourceStream, null,
 				enforceReload);
 
 			// add the markup to the cache.
-			return putIntoCache(cacheKey, markup);
+			markupKeyCache.put(cacheKey, locationString);
+			return putIntoCache(locationString, markup);
 		}
 		catch (ResourceStreamNotFoundException e)
 		{
@@ -450,6 +473,20 @@
 		final MarkupResourceStream markupResourceStream, final boolean enforceReload)
 	{
 		final String cacheKey = markupResourceStream.getCacheKey();
+		// get the location String
+		String locationString = markupResourceStream.locationAsString();
+		if (locationString == null)
+		{
+			// set the cache key as location string, because location string
+			// couldn't be resolved.
+			locationString = cacheKey;
+		}
+		Markup markup = (Markup)markupCache.get(locationString);
+		if (markup != null)
+		{
+			markupKeyCache.put(cacheKey, locationString);
+			return markup;
+		}
 		if (cacheKey != null)
 		{
 			// Watch file in the future

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupResourceStream.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupResourceStream.java?rev=634862&r1=634861&r2=634862&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupResourceStream.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupResourceStream.java Fri Mar  7 15:28:32 2008
@@ -21,6 +21,7 @@
 import java.util.Locale;
 
 import org.apache.wicket.util.lang.Classes;
+import org.apache.wicket.util.resource.IFixedLocationResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.time.Time;
@@ -31,7 +32,7 @@
  * 
  * @author Juergen Donnerstag
  */
-public class MarkupResourceStream implements IResourceStream
+public class MarkupResourceStream implements IResourceStream, IFixedLocationResourceStream
 {
 	private static final long serialVersionUID = 1846489965076612828L;
 
@@ -77,7 +78,7 @@
 	 * @param markupClass
 	 */
 	public MarkupResourceStream(final IResourceStream resourceStream,
-			final ContainerInfo containerInfo, final Class markupClass)
+		final ContainerInfo containerInfo, final Class markupClass)
 	{
 		this.resourceStream = resourceStream;
 		this.containerInfo = containerInfo;
@@ -87,6 +88,15 @@
 		{
 			throw new IllegalArgumentException("Parameter 'resourceStream' must not be null");
 		}
+	}
+
+	public String locationAsString()
+	{
+		if (resourceStream instanceof IFixedLocationResourceStream)
+		{
+			return ((IFixedLocationResourceStream)resourceStream).locationAsString();
+		}
+		return null;
 	}
 
 	/**