You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/11/17 03:29:20 UTC
svn commit: r718160 - in /wicket/sandbox/knopp/experimental/wicket/src:
main/java/org/apache/_wicket/request/encoder/
main/java/org/apache/_wicket/request/handler/resource/
main/java/org/apache/_wicket/resource/
test/java/org/apache/_wicket/request/enc...
Author: knopp
Date: Sun Nov 16 18:29:19 2008
New Revision: 718160
URL: http://svn.apache.org/viewvc?rev=718160&view=rev
Log:
ResourceReferenceEncoder + test
Added:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoder.java (with props)
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoder.java (with props)
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceReferenceRequestHandler.java (with props)
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoderTest.java (with props)
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoderTest.java (with props)
Modified:
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceRequestHandler.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReference.java
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReferenceRegistry.java
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java?rev=718160&r1=718159&r2=718160&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractEncoder.java Sun Nov 16 18:29:19 2008
@@ -85,9 +85,9 @@
else
{
return s.substring(2, s.length() - 1);
- }
+ }
}
-
+
/**
* Returns true if the given url starts with specified segments. Segments that contain
* placelhoders are not compared.
@@ -287,7 +287,8 @@
--segmentsToSkip;
}
- if (getPageComponentInfo(urlCopy) != null)
+ if (!urlCopy.getQueryParameters().isEmpty() &&
+ Strings.isEmpty(urlCopy.getQueryParameters().get(0).getValue()))
{
urlCopy.getQueryParameters().remove(0);
}
Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoder.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoder.java?rev=718160&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoder.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoder.java Sun Nov 16 18:29:19 2008
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.encoder;
+
+import java.util.Locale;
+
+import org.apache._wicket.request.Url;
+import org.apache._wicket.request.Url.QueryParameter;
+import org.apache._wicket.resource.ResourceReference;
+import org.apache.wicket.util.string.Strings;
+
+/**
+ * Base class for encoding and decoding {@link ResourceReference}s
+ *
+ * @author Matej Knopp
+ */
+public abstract class AbstractResourceReferenceEncoder extends AbstractEncoder
+{
+
+ protected static class ResourceReferenceAttributes
+ {
+ protected Locale locale;
+ protected String style;
+ };
+
+ protected static String encodeResourceReferenceAttributes(ResourceReferenceAttributes attributes)
+ {
+ if (attributes == null || (attributes.locale == null && attributes.style == null))
+ {
+ return null;
+ }
+ else
+ {
+ StringBuilder res = new StringBuilder();
+ if (attributes.locale != null)
+ {
+ res.append(attributes.locale.toString());
+ }
+ if (!Strings.isEmpty(attributes.style))
+ {
+ res.append("-");
+ res.append(attributes.style);
+ }
+ return res.toString();
+ }
+ };
+
+ protected static ResourceReferenceAttributes decodeResourceReferenceAttributes(String attributes)
+ {
+ ResourceReferenceAttributes res = new ResourceReferenceAttributes();
+ if (!Strings.isEmpty(attributes))
+ {
+ String split[] = attributes.split("-", 2);
+ res.locale = parseLocale(split[0]);
+ if (split.length == 2)
+ {
+ res.style = split[1];
+ }
+ }
+ return res;
+ }
+
+ private static Locale parseLocale(String locale)
+ {
+ if (Strings.isEmpty(locale))
+ {
+ return null;
+ }
+ else
+ {
+ String parts[] = locale.toLowerCase().split("_", 3);
+ if (parts.length == 1)
+ {
+ return new Locale(parts[0]);
+ }
+ else if (parts.length == 2)
+ {
+ return new Locale(parts[0], parts[1]);
+ }
+ else if (parts.length == 3)
+ {
+ return new Locale(parts[0], parts[1], parts[2]);
+ }
+ else
+ {
+ return null;
+ }
+ }
+ }
+
+ protected void encodeResourceReferenceAttributes(Url url, ResourceReference reference)
+ {
+ ResourceReferenceAttributes attributes = new ResourceReferenceAttributes();
+ attributes.locale = reference.getLocale();
+ attributes.style = reference.getStyle();
+ String encoded = encodeResourceReferenceAttributes(attributes);
+ if (!Strings.isEmpty(encoded))
+ {
+ url.getQueryParameters().add(new Url.QueryParameter(encoded, ""));
+ }
+ }
+
+ protected ResourceReferenceAttributes getResourceReferenceAttributes(Url url)
+ {
+ if (url == null)
+ {
+ throw new IllegalStateException("Argument 'url' may not be null.");
+ }
+ if (url.getQueryParameters().size() > 0)
+ {
+ QueryParameter param = url.getQueryParameters().get(0);
+ if (Strings.isEmpty(param.getValue()))
+ {
+ return decodeResourceReferenceAttributes(param.getName());
+ }
+ }
+ return new ResourceReferenceAttributes();
+ }
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java?rev=718160&r1=718159&r2=718160&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/EncoderContext.java Sun Nov 16 18:29:19 2008
@@ -18,6 +18,7 @@
import org.apache._wicket.IPage;
import org.apache._wicket.PageParameters;
+import org.apache._wicket.resource.ResourceReferenceRegistry;
import org.apache.wicket.RequestListenerInterface;
/**
@@ -66,6 +67,16 @@
public String getBookmarkableIdentifier();
/**
+ * @return identifier for resources
+ */
+ public String getResourceIdentifier();
+
+ /**
+ * @return {@link ResourceReferenceRegistry}
+ */
+ public ResourceReferenceRegistry getResourceReferenceRegistry();
+
+ /**
* Returns the listener interface name as string.
*
* @param listenerInterface
Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoder.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoder.java?rev=718160&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoder.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoder.java Sun Nov 16 18:29:19 2008
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.encoder;
+
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.Url;
+import org.apache._wicket.request.encoder.parameters.PageParametersEncoder;
+import org.apache._wicket.request.encoder.parameters.SimplePageParametersEncoder;
+import org.apache._wicket.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache._wicket.request.handler.resource.ResourceRequestHandler;
+import org.apache._wicket.request.request.Request;
+import org.apache._wicket.resource.Resource;
+import org.apache._wicket.resource.ResourceReference;
+import org.apache.wicket.util.lang.Classes;
+
+/**
+ * Generic {@link ResourceReference} encoder that encodes and decodes non-mounted
+ * {@link ResourceReference}s.
+ *
+ * @author Matej Knopp
+ */
+public class ResourceReferenceEncoder extends AbstractResourceReferenceEncoder
+{
+ private final PageParametersEncoder pageParametersEncoder;
+
+ /**
+ * Construct.
+ *
+ * @param pageParametersEncoder
+ */
+ public ResourceReferenceEncoder(PageParametersEncoder pageParametersEncoder)
+ {
+ this.pageParametersEncoder = pageParametersEncoder;
+ }
+
+ /**
+ * Construct.
+ */
+ public ResourceReferenceEncoder()
+ {
+ this(new SimplePageParametersEncoder());
+ }
+
+ protected EncoderContext getContext()
+ {
+ return null;
+ };
+
+ public RequestHandler decode(Request request)
+ {
+ Url url = request.getUrl();
+ if (url.getSegments().size() >= 4 &&
+ urlStartsWith(url, getContext().getNamespace(), getContext().getResourceIdentifier()))
+ {
+ String className = url.getSegments().get(2);
+ StringBuilder name = new StringBuilder();
+ for (int i = 3; i < url.getSegments().size(); ++i)
+ {
+ if (name.length() > 0)
+ {
+ name.append("/");
+ }
+ name.append(url.getSegments().get(i));
+ }
+
+ ResourceReferenceAttributes attributes = getResourceReferenceAttributes(url);
+
+ // extract the PageParameters from URL if there are any
+ PageParameters pageParameters = extractPageParameters(url,
+ request.getRequestParameters(), url.getSegments().size(), pageParametersEncoder);
+
+ Class<?> scope = resolveClass(className);
+ if (scope != null)
+ {
+ ResourceReference res = getContext().getResourceReferenceRegistry()
+ .getResourceReference(scope, name.toString(), attributes.locale,
+ attributes.style, false);
+ if (res != null)
+ {
+ Resource resource = res.getResource();
+ if (resource != null)
+ {
+ ResourceRequestHandler handler = new ResourceRequestHandler(resource,
+ attributes.locale, attributes.style, pageParameters);
+ return handler;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ protected Class<?> resolveClass(String name)
+ {
+ return Classes.resolveClass(name);
+ }
+
+ protected String getClassName(Class<?> scope)
+ {
+ return scope.getName();
+ }
+
+ public Url encode(RequestHandler requestHandler)
+ {
+ if (requestHandler instanceof ResourceReferenceRequestHandler)
+ {
+ ResourceReferenceRequestHandler referenceRequestHandler = (ResourceReferenceRequestHandler)requestHandler;
+ ResourceReference reference = referenceRequestHandler.getResourceReference();
+ Url url = new Url();
+ url.getSegments().add(getContext().getNamespace());
+ url.getSegments().add(getContext().getResourceIdentifier());
+ url.getSegments().add(getClassName(reference.getScope()));
+ String nameParts[] = reference.getName().split("/");
+ for (String name : nameParts)
+ {
+ url.getSegments().add(name);
+ }
+ encodeResourceReferenceAttributes(url, reference);
+ PageParameters parameters = referenceRequestHandler.getPageParameters();
+ if (parameters != null)
+ {
+ parameters = new PageParameters(parameters);
+ // need to remove indexed parameters otherwise the URL won't be able to decode
+ parameters.clearIndexedParameters();
+ url = encodePageParameters(url, parameters, pageParametersEncoder);
+ }
+ return url;
+ }
+ return null;
+ }
+
+ public int getMachingSegmentsCount(Request request)
+ {
+ // always return 0 here so that the mounts have higher priority
+ return 0;
+ }
+
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceReferenceRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceReferenceRequestHandler.java?rev=718160&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceReferenceRequestHandler.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceReferenceRequestHandler.java Sun Nov 16 18:29:19 2008
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.handler.resource;
+
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.RequestCycle;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.resource.ResourceReference;
+
+/**
+ * Request handler for {@link ResourceReference}. This handler is only used to generate URLs.
+ *
+ * @author Matej Knopp
+ */
+public class ResourceReferenceRequestHandler implements RequestHandler
+{
+ private final ResourceReference resourceReference;
+ private final PageParameters pageParameters;
+
+ /**
+ * Construct.
+ *
+ * @param resourceReference
+ * @param pageParameters
+ */
+ public ResourceReferenceRequestHandler(ResourceReference resourceReference, PageParameters pageParameters)
+ {
+ if (resourceReference == null)
+ {
+ throw new IllegalArgumentException("Argument 'resourceReference' may not be null.");
+ }
+ this.resourceReference = resourceReference;
+ this.pageParameters = pageParameters;
+ }
+
+ /**
+ * @return resource reference
+ */
+ public ResourceReference getResourceReference()
+ {
+ return resourceReference;
+ }
+
+ /**
+ * @return page parameters
+ */
+ public PageParameters getPageParameters()
+ {
+ return pageParameters;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ }
+
+ public void respond(RequestCycle requestCycle)
+ {
+ }
+
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceReferenceRequestHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceRequestHandler.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceRequestHandler.java?rev=718160&r1=718159&r2=718160&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceRequestHandler.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/handler/resource/ResourceRequestHandler.java Sun Nov 16 18:29:19 2008
@@ -56,6 +56,38 @@
this.pageParameters = pageParameters != null ? pageParameters : new PageParameters();
}
+ /**
+ * @return locale
+ */
+ public Locale getLocale()
+ {
+ return locale;
+ }
+
+ /**
+ * @return style
+ */
+ public String getStyle()
+ {
+ return style;
+ }
+
+ /**
+ * @return page parameters
+ */
+ public PageParameters getPageParameters()
+ {
+ return pageParameters;
+ }
+
+ /**
+ * @return resource
+ */
+ public Resource getResource()
+ {
+ return resource;
+ }
+
public void respond(RequestCycle requestCycle)
{
Resource.Attributes a = new Resource.Attributes(requestCycle.getRequest(),
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReference.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReference.java?rev=718160&r1=718159&r2=718160&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReference.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReference.java Sun Nov 16 18:29:19 2008
@@ -19,6 +19,7 @@
import java.util.Locale;
import org.apache.wicket.util.lang.Classes;
+import org.apache.wicket.util.lang.Objects;
/**
* Reference to a resource. Can be used to reference global resources.
@@ -28,7 +29,7 @@
public abstract class ResourceReference
{
private final String scope;
- private final String path;
+ private final String name;
private final Locale locale;
private String style;
@@ -37,34 +38,34 @@
*
* @param scope
* mandatory parameter
- * @param path
+ * @param name
* mandatory parameter
* @param locale
* @param style
*/
- public ResourceReference(Class<?> scope, String path, Locale locale, String style)
+ public ResourceReference(Class<?> scope, String name, Locale locale, String style)
{
if (scope == null)
{
throw new IllegalArgumentException("Argument 'scope' can not be null.");
}
this.scope = scope.getName();
-
- if (path == null)
+
+ if (name == null)
{
throw new IllegalArgumentException("Argument 'path' can not be null.");
}
- this.path = path;
+ this.name = name;
this.locale = locale;
this.style = style;
}
/**
- * @return path
+ * @return name
*/
- public String getPath()
+ public String getName()
{
- return path;
+ return name;
}
/**
@@ -91,6 +92,30 @@
return style;
}
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+ if (obj instanceof ResourceReference == false)
+ {
+ return false;
+ }
+ ResourceReference that = (ResourceReference)obj;
+ return Objects.equal(scope, that.scope) && //
+ Objects.equal(name, that.name) && //
+ Objects.equal(locale, that.locale) && //
+ Objects.equal(style, that.style);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hashCode(scope, name, locale, style);
+ }
+
/**
* Creates new resource.
*
Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReferenceRegistry.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReferenceRegistry.java?rev=718160&r1=718159&r2=718160&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReferenceRegistry.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/resource/ResourceReferenceRegistry.java Sun Nov 16 18:29:19 2008
@@ -32,23 +32,23 @@
private static class Key
{
private final String scope;
- private final String path;
+ private final String name;
private final Locale locale;
private final String style;
- public Key(String scope, String path, Locale locale, String style)
+ public Key(String scope, String name, Locale locale, String style)
{
if (scope == null)
{
throw new IllegalArgumentException("Argument 'scope' can not be null.");
}
- this.scope = scope.toString();
+ this.scope = scope;
- if (path == null)
+ if (name == null)
{
- throw new IllegalArgumentException("Argument 'path' can not be null.");
+ throw new IllegalArgumentException("Argument 'name' can not be null.");
}
- this.path = path;
+ this.name = name;
this.locale = locale;
this.style = style;
}
@@ -60,13 +60,13 @@
{
return true;
}
- if (obj instanceof Key)
+ if (obj instanceof Key == false)
{
return false;
}
Key that = (Key)obj;
return Objects.equal(scope, that.scope) && //
- Objects.equal(path, that.path) && //
+ Objects.equal(name, that.name) && //
Objects.equal(locale, that.locale) && //
Objects.equal(style, that.style);
}
@@ -74,11 +74,11 @@
@Override
public int hashCode()
{
- return Objects.hashCode(scope, path, locale, style);
+ return Objects.hashCode(scope, name, locale, style);
}
};
- private static Map<Key, ResourceReference> map = new ConcurrentHashMap<Key, ResourceReference>();
+ private Map<Key, ResourceReference> map = new ConcurrentHashMap<Key, ResourceReference>();
/**
* Registers the given {@link ResourceReference}.
@@ -91,7 +91,7 @@
{
throw new IllegalArgumentException("Argument 'reference' may not be null.");
}
- Key key = new Key(reference.getScope().getName(), reference.getPath(),
+ Key key = new Key(reference.getScope().getName(), reference.getName(),
reference.getLocale(), reference.getStyle());
map.put(key, reference);
}
@@ -107,7 +107,7 @@
{
throw new IllegalArgumentException("Argument 'reference' may not be null.");
}
- Key key = new Key(reference.getScope().getName(), reference.getPath(),
+ Key key = new Key(reference.getScope().getName(), reference.getName(),
reference.getLocale(), reference.getStyle());
map.remove(key);
}
Added: wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoderTest.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoderTest.java?rev=718160&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoderTest.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoderTest.java Sun Nov 16 18:29:19 2008
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.encoder;
+
+import java.util.Locale;
+
+import org.apache._wicket.resource.Resource;
+import org.apache._wicket.resource.ResourceReference;
+
+/**
+ * @author Matej Knopp
+ */
+public class AbstractResourceReferenceEncoderTest extends AbstractEncoderTest
+{
+
+ /**
+ * Construct.
+ */
+ public AbstractResourceReferenceEncoderTest()
+ {
+ }
+
+ protected final Resource resource1 = new Resource()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void respond(Attributes attributes)
+ {
+ }
+ };
+
+ protected final Resource resource2 = new Resource()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void respond(Attributes attributes)
+ {
+ }
+ };
+
+ protected final Resource resource3 = new Resource()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void respond(Attributes attributes)
+ {
+ }
+ };
+
+ protected final Resource resource4 = new Resource()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void respond(Attributes attributes)
+ {
+ }
+ };
+
+ protected String CLASS_NAME = AbstractResourceReferenceEncoderTest.class.getName();
+
+ protected ResourceReference reference1 = new ResourceReference(
+ AbstractResourceReferenceEncoderTest.class, "reference1", null, null)
+ {
+ public Resource getResource()
+ {
+ return resource1;
+ };
+ };
+
+ protected ResourceReference reference2 = new ResourceReference(
+ AbstractResourceReferenceEncoderTest.class, "reference2/name2", new Locale("en", "en"), null)
+ {
+ public Resource getResource()
+ {
+ return resource2;
+ };
+ };
+
+ protected ResourceReference reference3 = new ResourceReference(
+ AbstractResourceReferenceEncoderTest.class, "reference3", null, "style")
+ {
+ public Resource getResource()
+ {
+ return resource3;
+ };
+ };
+
+ protected ResourceReference reference4 = new ResourceReference(
+ AbstractResourceReferenceEncoderTest.class, "reference4", Locale.ENGLISH, "style")
+ {
+ public Resource getResource()
+ {
+ return resource4;
+ };
+ };
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ context.getResourceReferenceRegistry().registerResourceReference(reference1);
+ context.getResourceReferenceRegistry().registerResourceReference(reference2);
+ context.getResourceReferenceRegistry().registerResourceReference(reference3);
+ context.getResourceReferenceRegistry().registerResourceReference(reference4);
+ }
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/AbstractResourceReferenceEncoderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoderTest.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoderTest.java?rev=718160&view=auto
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoderTest.java (added)
+++ wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoderTest.java Sun Nov 16 18:29:19 2008
@@ -0,0 +1,348 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.encoder;
+
+import java.util.Locale;
+
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.Url;
+import org.apache._wicket.request.handler.resource.ResourceReferenceRequestHandler;
+import org.apache._wicket.request.handler.resource.ResourceRequestHandler;
+
+/**
+ * @author Matej Knopp
+ */
+public class ResourceReferenceEncoderTest extends AbstractResourceReferenceEncoderTest
+{
+ /**
+ * Construct.
+ */
+ public ResourceReferenceEncoderTest()
+ {
+ }
+
+ private final ResourceReferenceEncoder encoder = new ResourceReferenceEncoder()
+ {
+ @Override
+ protected EncoderContext getContext()
+ {
+ return context;
+ }
+ };
+
+ /**
+ *
+ */
+ public void testDecode1()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference1");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource1, h.getResource());
+ assertEquals(null, h.getLocale());
+ assertEquals(null, h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
+ }
+
+ /**
+ *
+ */
+ public void testDecode1A()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference1?en");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource1, h.getResource());
+ assertEquals(Locale.ENGLISH, h.getLocale());
+ assertEquals(null, h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
+ }
+
+ /**
+ *
+ */
+ public void testDecode2()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference1?p1=v1&p2=v2");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource1, h.getResource());
+ assertEquals(null, h.getLocale());
+ assertEquals(null, h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
+ assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
+ }
+
+ /**
+ *
+ */
+ public void testDecode2A()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference1?-style&p1=v1&p2=v2");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource1, h.getResource());
+ assertEquals(null, h.getLocale());
+ assertEquals("style", h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
+ assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
+ }
+
+ /**
+ *
+ */
+ public void testDecode3()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource2, h.getResource());
+ assertEquals(new Locale("en", "en"), h.getLocale());
+ assertEquals(null, h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
+ }
+
+ /**
+ *
+ */
+ public void testDecode3A()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN-style");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource2, h.getResource());
+ assertEquals(new Locale("en", "en"), h.getLocale());
+ assertEquals("style", h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
+ }
+
+ /**
+ *
+ */
+ public void testDecode3B()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference2/name2");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertNull(handler);
+ }
+
+ /**
+ *
+ */
+ public void testDecode4()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN&p1=v1&p2=v2");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource2, h.getResource());
+ assertEquals(new Locale("en", "en"), h.getLocale());
+ assertEquals(null, h.getStyle());
+ assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
+ assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
+ }
+
+ /**
+ *
+ */
+ public void testDecode5()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference3?-style");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource3, h.getResource());
+ assertEquals(null, h.getLocale());
+ assertEquals("style", h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
+ }
+
+ /**
+ *
+ */
+ public void testDecode6()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference3?-style&p1=v1&p2=v2");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource3, h.getResource());
+ assertEquals(null, h.getLocale());
+ assertEquals("style", h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
+ assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
+ }
+
+
+ /**
+ *
+ */
+ public void testDecode7()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference4?en-style");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource4, h.getResource());
+ assertEquals(Locale.ENGLISH, h.getLocale());
+ assertEquals("style", h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals(0, h.getPageParameters().getNamedParameterKeys().size());
+ }
+
+ /**
+ *
+ */
+ public void testDecode7A()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference4?sk");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertNull(handler);
+ }
+
+ /**
+ *
+ */
+ public void testDecode8()
+ {
+ Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/reference4?en-style&p1=v1&p2=v2");
+ RequestHandler handler = encoder.decode(getRequest(url));
+ assertTrue(handler instanceof ResourceRequestHandler);
+ ResourceRequestHandler h = (ResourceRequestHandler) handler;
+ assertEquals(resource4, h.getResource());
+ assertEquals(Locale.ENGLISH, h.getLocale());
+ assertEquals("style", h.getStyle());
+ assertEquals(0, h.getPageParameters().getIndexedParamsCount());
+ assertEquals("v1", h.getPageParameters().getNamedParameter("p1").toString());
+ assertEquals("v2", h.getPageParameters().getNamedParameter("p2").toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode1()
+ {
+ ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference1, null);
+ Url url = encoder.encode(handler);
+ assertEquals("wicket/resource/" + CLASS_NAME + "/reference1", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode2()
+ {
+ PageParameters parameters = new PageParameters();
+ parameters.setIndexedParameter(0, "X");
+ parameters.addNamedParameter("p1", "v1");
+ parameters.addNamedParameter("p2", "v2");
+ ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference1, parameters);
+
+ Url url = encoder.encode(handler);
+ assertEquals("wicket/resource/" + CLASS_NAME + "/reference1?p1=v1&p2=v2", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode3()
+ {
+ ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference2, null);
+ Url url = encoder.encode(handler);
+ assertEquals("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode4()
+ {
+ PageParameters parameters = new PageParameters();
+ parameters.setIndexedParameter(0, "X");
+ parameters.addNamedParameter("p1", "v1");
+ parameters.addNamedParameter("p2", "v2");
+ ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference2, parameters);
+
+ Url url = encoder.encode(handler);
+ assertEquals("wicket/resource/" + CLASS_NAME + "/reference2/name2?en_EN&p1=v1&p2=v2", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode5()
+ {
+ ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference3, null);
+ Url url = encoder.encode(handler);
+ assertEquals("wicket/resource/" + CLASS_NAME + "/reference3?-style", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode6()
+ {
+ PageParameters parameters = new PageParameters();
+ parameters.setIndexedParameter(0, "X");
+ parameters.addNamedParameter("p1", "v1");
+ parameters.addNamedParameter("p2", "v2");
+ ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference3, parameters);
+
+ Url url = encoder.encode(handler);
+ assertEquals("wicket/resource/" + CLASS_NAME + "/reference3?-style&p1=v1&p2=v2", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode7()
+ {
+ ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference4, null);
+ Url url = encoder.encode(handler);
+ assertEquals("wicket/resource/" + CLASS_NAME + "/reference4?en-style", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode8()
+ {
+ PageParameters parameters = new PageParameters();
+ parameters.setIndexedParameter(0, "X");
+ parameters.addNamedParameter("p1", "v1");
+ parameters.addNamedParameter("p2", "v2");
+ ResourceReferenceRequestHandler handler = new ResourceReferenceRequestHandler(reference4, parameters);
+
+ Url url = encoder.encode(handler);
+ assertEquals("wicket/resource/" + CLASS_NAME + "/reference4?en-style&p1=v1&p2=v2", url.toString());
+ }
+}
Propchange: wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/ResourceReferenceEncoderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java?rev=718160&r1=718159&r2=718160&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/TestEncoderContext.java Sun Nov 16 18:29:19 2008
@@ -19,6 +19,7 @@
import org.apache._wicket.IPage;
import org.apache._wicket.MockPage;
import org.apache._wicket.PageParameters;
+import org.apache._wicket.resource.ResourceReferenceRegistry;
import org.apache.wicket.RequestListenerInterface;
import org.apache.wicket.WicketRuntimeException;
@@ -51,7 +52,19 @@
{
return "page";
}
+
+ public String getResourceIdentifier()
+ {
+ return "resource";
+ }
+ public ResourceReferenceRegistry getResourceReferenceRegistry()
+ {
+ return registry;
+ }
+
+ private ResourceReferenceRegistry registry = new ResourceReferenceRegistry();
+
private boolean bookmarkable = true;
/**