Because I'm tired of writting always the same parsing code like:
public void init(ServletConfig config) {
try {
param = Integer.parseInt(config.getInitParameter("param"));
}
catch (NumberFormatException e) { }
}I tought it would be much easier to write instead:
public void init(ServletConfig config) {
Configuration conf = new WebConfiguration(config);
param = conf.getInt("param");
}The WebConfiguration works with 4 types of objets specified in its constructor: a ServletConfig, a ServletContext, a FilterConfig or a ServletRequest.
I wrote a test case using mock objects covering the different cases except for the FilterConfig, the mock lacks a setInitParameter() method. Also the mock for the ServletRequest sends an exception for unknown parameters instead of returning null, most of its tests break.
Emmanuel Bourg
/* * Copyright 2004 The Apache Software Foundation. * * Licensed 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.commons.configuration;
import org.apache.commons.collections.iterators.EnumerationIterator;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.FilterConfig;
import java.util.Iterator;
/**
* A configuration suitable for reading the configuration a web components
* (Servlets, filters, requests and applications).
*
* @author Emmanuel Bourg
* @version $Revision$, $Date$
*/
public class WebConfiguration extends AbstractConfiguration {
protected Object store;
/**
* Create a WebConfiguration using the request parameters.
*/
public WebConfiguration(ServletRequest request) {
store = request;
}
/**
* Create a WebConfiguration using the servlet initialization parameters.
*/
public WebConfiguration(ServletConfig config) {
store = config;
}
/**
* Create a WebConfiguration using the servlet context initialization
* parameters.
*/
public WebConfiguration(ServletContext context) {
store = context;
}
/**
* Create a WebConfiguration using the filter initialization parameters.
*/
public WebConfiguration(FilterConfig config) {
store = config;
}
protected Object getPropertyDirect(String key) {
if (store instanceof ServletRequest) {
return ((ServletRequest) store).getParameter(key);
} else if (store instanceof ServletContext) {
return ((ServletContext) store).getInitParameter(key);
} else if (store instanceof ServletConfig){
return ((ServletConfig) store).getInitParameter(key);
} else {
return ((FilterConfig) store).getInitParameter(key);
}
}
protected void addPropertyDirect(String key, Object obj) {
throw new UnsupportedOperationException("Read only configuration");
}
public boolean isEmpty() {
return !getKeys().hasNext();
}
public boolean containsKey(String key) {
return getPropertyDirect(key) != null;
}
public void clearProperty(String key) {
throw new UnsupportedOperationException("Read only configuration");
}
public Iterator getKeys() {
if (store instanceof ServletRequest) {
return new EnumerationIterator(((ServletRequest)
store).getParameterNames());
} else if (store instanceof ServletContext) {
return new EnumerationIterator(((ServletContext)
store).getInitParameterNames());
} else if (store instanceof ServletConfig){
return new EnumerationIterator(((ServletConfig)
store).getInitParameterNames());
} else {
return new EnumerationIterator(((FilterConfig)
store).getInitParameterNames());
}
}
}
/* * Copyright 2004 The Apache Software Foundation. * * Licensed 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.commons.configuration; import com.mockobjects.servlet.MockHttpServletRequest; import com.mockobjects.servlet.MockServletConfig; import com.mockobjects.servlet.MockServletContext; import junit.framework.TestCase; import javax.servlet.FilterConfig; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; /** * Test case for the [EMAIL PROTECTED] WebConfiguration} class. * * @author Emmanuel Bourg * @version $Revision$, $Date$ */ public class TestWebConfiguration extends TestCase { protected HttpServletRequest request; protected ServletContext context; protected ServletConfig servlet; protected FilterConfig filter; protected void setUp() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setupAddParameter("key1", "value1"); request.setupAddParameter("key2", "value2"); this.request = request; MockServletContext context = new MockServletContext(); context.setInitParameter("key1", "value1"); context.setInitParameter("key2", "value2"); this.context = context; MockServletConfig servlet = new MockServletConfig(); servlet.setInitParameter("key1", "value1"); servlet.setInitParameter("key2", "value2"); this.servlet = servlet; } public void testGetPropertyDirectRequest() { WebConfiguration config = new WebConfiguration(request); assertEquals("request key1", "value1", config.getPropertyDirect("key1")); assertEquals("request key2", "value2", config.getPropertyDirect("key2")); assertNull("request key3", config.getPropertyDirect("key3")); } public void testGetPropertyDirectContext() { WebConfiguration config = new WebConfiguration(context); assertEquals("servlet context key1", "value1", config.getPropertyDirect("key1")); assertEquals("servlet context key2", "value2", config.getPropertyDirect("key2")); assertNull("servlet context key3", config.getPropertyDirect("key3")); } public void testGetPropertyDirectServlet() { WebConfiguration config = new WebConfiguration(servlet); assertEquals("servlet config key1", "value1", config.getPropertyDirect("key1")); assertEquals("servlet config key2", "value2", config.getPropertyDirect("key2")); assertNull("servlet config key3", config.getPropertyDirect("key3")); } public void testIsEmptyRequest() { WebConfiguration config = new WebConfiguration(request); assertFalse("non empty request parameters", config.isEmpty()); assertTrue("empty request parameters", new WebConfiguration(new MockHttpServletRequest()).isEmpty()); } public void testIsEmptyContext() { WebConfiguration config = new WebConfiguration(context); assertFalse("non empty servlet context parameters", config.isEmpty()); assertTrue("empty servlet context parameters", new WebConfiguration(new MockServletContext()).isEmpty()); } public void testIsEmptyServlet() { WebConfiguration config = new WebConfiguration(servlet); assertFalse("non empty servlet config parameters", config.isEmpty()); assertTrue("empty servlet config parameters", new WebConfiguration(new MockServletConfig()).isEmpty()); } public void testContainsKeyRequest() { WebConfiguration config = new WebConfiguration(request); assertTrue("key1 not found in request parameters", config.containsKey("key1")); assertFalse("key3 found in request parameters", config.containsKey("key3")); } public void testContainsKeyContext() { WebConfiguration config = new WebConfiguration(context); assertTrue("key1 not found in servlet context parameters", config.containsKey("key1")); assertFalse("key3 found in servlet context parameters", config.containsKey("key3")); } public void testContainsKeyServlet() { WebConfiguration config = new WebConfiguration(servlet); assertTrue("key1 not found in servlet config parameters", config.containsKey("key1")); assertFalse("key3 found in servlet config parameters", config.containsKey("key3")); } public void testGetKeysRequest() { WebConfiguration config = new WebConfiguration(request); assertNotNull("null iterator on request parameters", config.getKeys()); assertNotNull("null iterator on request parameters", new WebConfiguration(new MockHttpServletRequest()).getKeys()); } public void testGetKeysContext() { WebConfiguration config = new WebConfiguration(context); assertNotNull("null iterator on servlet context parameters", config.getKeys()); assertNotNull("null iterator on servlet context parameters", new WebConfiguration(new MockServletContext()).getKeys()); } public void testGetKeysServlet() { WebConfiguration config = new WebConfiguration(servlet); assertNotNull("null iterator on servlet config parameters", config.getKeys()); assertNotNull("null iterator on servlet config parameters", new WebConfiguration(new MockServletConfig()).getKeys()); } }
Index: project.xml
===================================================================
RCS file: /home/cvspublic/jakarta-commons/configuration/project.xml,v
retrieving revision 1.10
diff -u -r1.10 project.xml
--- project.xml 15 Feb 2004 11:58:37 -0000 1.10
+++ project.xml 1 Mar 2004 18:00:00 -0000
@@ -193,6 +193,11 @@
</properties>
</dependency>
+ <dependency>
+ <id>servletapi</id>
+ <version>2.3</version>
+ </dependency>
+
<!-- Needed for testing -->
<dependency>
<id>junit</id>
@@ -229,6 +234,16 @@
<dependency>
<id>exml</id>
<version>dbunit1.5.1</version>
+ </dependency>
+
+ <dependency>
+ <id>mockobjects:mockobjects-core</id>
+ <version>0.09</version>
+ </dependency>
+
+ <dependency>
+ <id>mockobjects:mockobjects-jdk1.4-j2ee1.3</id>
+ <version>0.09</version>
</dependency>
</dependencies>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
