[CONF] Confluence Changes in the last 24 hours
- This is a daily summary of all recent changes in Confluence. - Updated Spaces: - OpenJPA (openjpa) http://cwiki.apache.org/confluence/display/openjpa | |-Pages Added or Edited in This Space |-- Releasing OpenJPA was last edited by [EMAIL PROTECTED] (01:32 PM). | http://cwiki.apache.org/confluence/display/openjpa/Releasing+OpenJPA Apache Directory Community & Resources (directory) http://cwiki.apache.org/confluence/display/directory | |-Pages Added or Edited in This Space |-- Mailing lists and IRC was last edited by szoerner (11:36 AM). | http://cwiki.apache.org/confluence/display/directory/Mailing+lists+and+IRC Apache CXF 2.0 Documentation (CXF20DOC) http://cwiki.apache.org/confluence/display/CXF20DOC | |-Pages Added or Edited in This Space |-- Jax-WS Java First with jms Transport was last edited by [EMAIL PROTECTED] (05:31 PM). | http://cwiki.apache.org/confluence/display/CXF20DOC/Jax-WS+Java+First+with+jms+Transport |-- Idea for new Index was last edited by jeff.yu (02:31 AM). | http://cwiki.apache.org/confluence/display/CXF20DOC/Idea+for+new+Index Apache Roller (ROLLER) http://cwiki.apache.org/confluence/display/ROLLER | |-New Comments in This Space |-- http://cwiki.apache.org/confluence/display/ROLLER/Roller+4.0+with+LDAP+and+CAS (1) Apache Struts 2 Documentation (WW) http://cwiki.apache.org/confluence/display/WW | |-Pages Added or Edited in This Space |-- What are the fundamental differences between Struts and JSF was created by mrdon (07:11 PM). | http://cwiki.apache.org/confluence/display/WW/What+are+the+fundamental+differences+between+Struts+and+JSF |-- FAQs was last edited by mrdon (07:12 PM). | http://cwiki.apache.org/confluence/display/WW/FAQs Apache Wicket Website (WICKETxSITE) http://cwiki.apache.org/confluence/display/WICKETxSITE | |-Pages Added or Edited in This Space |-- QuickStart was last edited by almaw (06:47 AM). | http://cwiki.apache.org/confluence/display/WICKETxSITE/QuickStart Apache Tuscany (TUSCANY) http://cwiki.apache.org/confluence/display/TUSCANY | |-Pages Added or Edited in This Space |-- RDB DAS CPP - WorkingWithNameMapping was created by adriano_crestani (09:25 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+WorkingWithNameMapping |-- RDB DAS CPP - WorkingWithConventions was created by adriano_crestani (09:10 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+WorkingWithConventions |-- RDB DAS CPP - WorkingWithRelationships was last edited by adriano_crestani (10:10 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+WorkingWithRelationships |-- RDB DAS CPP - WorkingWithOptimisticConcurrencyControl was last edited by adriano_crestani (10:09 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+WorkingWithOptimisticConcurrencyControl |-- RDB DAS CPP - ConventionOverConfiguration was last edited by adriano_crestani (10:04 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+ConventionOverConfiguration |-- RDB DAS C++ - User Guide was last edited by adriano_crestani (10:02 PM). | http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=69441 |-- RDB DAS CPP - ChangeSummaryProcessing was created by adriano_crestani (10:01 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+ChangeSummaryProcessing |-- RDB DAS CPP - ForeignKeyRepresentationAndManagement was last edited by adriano_crestani (09:58 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+ForeignKeyRepresentationAndManagement |-- RDB DAS CPP - ResultSetDrivenDataObjectTypes was last edited by adriano_crestani (09:57 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+ResultSetDrivenDataObjectTypes |-- RDB DAS CPP - WriteOperationOrdering was last edited by adriano_crestani (09:57 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+WriteOperationOrdering |-- RDB DAS CPP - OptimisticConcurrencyControl was last edited by adriano_crestani (09:57 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+OptimisticConcurrencyControl |-- RDB DAS CPP - PartialUpdate was last edited by adriano_crestani (09:56 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+PartialUpdate |-- RDB DAS CPP - WorkingWithBasicCrud was last edited by adriano_crestani (09:56 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/RDB+DAS+CPP+-+WorkingWithBasicCrud |-- WorkingWithNameMapping was last edited by adriano_crestani (09:19 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/WorkingWithNameMapping |-- RDB DAS CPP - WorkingWithCompoundKeys was created by adriano_crestani (09:17 PM). |
svn commit: r589059 - in /struts/sandbox/trunk/struts2-rest-plugin: pom.xml src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java src/main/resources/struts-plugin.xml src/test/java/org/
Author: mrdon Date: Sat Oct 27 00:41:58 2007 New Revision: 589059 URL: http://svn.apache.org/viewvc?rev=589059&view=rev Log: Adding ability to override handlers by specifying another alias for an extension Added: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/ContentTypeHandlerManagerTest.java Modified: struts/sandbox/trunk/struts2-rest-plugin/pom.xml struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml Modified: struts/sandbox/trunk/struts2-rest-plugin/pom.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/pom.xml?rev=589059&r1=589058&r2=589059&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/pom.xml (original) +++ struts/sandbox/trunk/struts2-rest-plugin/pom.xml Sat Oct 27 00:41:58 2007 @@ -46,6 +46,13 @@ test + +mockobjects +mockobjects-core +0.09 +test + + Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java?rev=589059&r1=589058&r2=589059&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java Sat Oct 27 00:41:58 2007 @@ -20,43 +20,53 @@ */ package org.apache.struts2.rest; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.config.entities.ActionConfig; +import com.opensymphony.xwork2.inject.Container; +import com.opensymphony.xwork2.inject.Inject; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.rest.handler.ContentTypeHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import static javax.servlet.http.HttpServletResponse.SC_OK; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Set; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import static javax.servlet.http.HttpServletResponse.SC_OK; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.rest.handler.ContentTypeHandler; - -import com.opensymphony.xwork2.ModelDriven; -import com.opensymphony.xwork2.config.entities.ActionConfig; -import com.opensymphony.xwork2.inject.Container; -import com.opensymphony.xwork2.inject.Inject; - /** * Manages [EMAIL PROTECTED] ContentTypeHandler} instances and uses them to * process results */ public class ContentTypeHandlerManager { -private Map handlers = new HashMap(); -private String defaultHandlerName; +Map handlers = new HashMap(); +String defaultHandlerName; +public static final String STRUTS_REST_HANDLER_OVERRIDE_PREFIX = "struts.rest.handlerOverride."; @Inject("struts.rest.defaultHandlerName") public void setDefaultHandlerName(String name) { this.defaultHandlerName = name; } - + @Inject public void setContainer(Container container) { Set names = container.getInstanceNames(ContentTypeHandler.class); for (String name : names) { ContentTypeHandler handler = container.getInstance(ContentTypeHandler.class, name); + +// Check for overriding handlers for the current extension +String overrideName = container.getInstance(String.class, STRUTS_REST_HANDLER_OVERRIDE_PREFIX +handler.getExtension()); +if (overrideName != null) { +if (!handlers.containsKey(handler.getExtension())) { +handler = container.getInstance(ContentTypeHandler.class, overrideName); +} else { +// overriding handler has already been registered +continue; +} +} this.handlers.put(handler.getExtension(), handler); } } Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml?rev=589059&r1=589058&r2=589059&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml Sat Oct 27 00:41:5
svn commit: r589071 - in /struts/sandbox/trunk/struts2-rest-plugin: ./ src/main/java/org/apache/struts2/rest/ src/test/java/org/apache/struts2/rest/
Author: mrdon Date: Sat Oct 27 03:47:25 2007 New Revision: 589071 URL: http://svn.apache.org/viewvc?rev=589071&view=rev Log: Adding automatic support for conditional gets Added: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java Modified: struts/sandbox/trunk/struts2-rest-plugin/pom.xml struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/ContentTypeHandlerManagerTest.java Modified: struts/sandbox/trunk/struts2-rest-plugin/pom.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/pom.xml?rev=589071&r1=589070&r2=589071&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/pom.xml (original) +++ struts/sandbox/trunk/struts2-rest-plugin/pom.xml Sat Oct 27 03:47:25 2007 @@ -53,6 +53,13 @@ test + +org.springframework +spring-mock +1.2.8 +true + + Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java?rev=589071&r1=589070&r2=589071&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java Sat Oct 27 03:47:25 2007 @@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import static javax.servlet.http.HttpServletResponse.SC_NOT_MODIFIED; import static javax.servlet.http.HttpServletResponse.SC_OK; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -101,13 +102,20 @@ if (target instanceof ModelDriven) { target = ((ModelDriven)target).getModel(); } - + boolean statusNotOk = false; if (methodResult instanceof HttpHeaders) { HttpHeaders info = (HttpHeaders) methodResult; resultCode = info.apply(req, res, target); if (info.getStatus() != SC_OK) { -statusNotOk = true; + +// Don't return content on a not modified +if (info.getStatus() == SC_NOT_MODIFIED) { +target = null; +} else { +statusNotOk = true; +} + } } else { resultCode = (String) methodResult; @@ -117,20 +125,22 @@ if (!statusNotOk && !"get".equalsIgnoreCase(req.getMethod())) { target = null; } - + ContentTypeHandler handler = getHandlerForRequest(req); -String extCode = resultCode+"-"+handler.getExtension(); -if (actionConfig.getResults().get(extCode) != null) { -resultCode = extCode; -} else { -ByteArrayOutputStream bout = new ByteArrayOutputStream(); - -resultCode = handler.fromObject(target, resultCode, bout); -if (bout.size() > 0) { -res.setContentLength(bout.size()); -res.setContentType(handler.getContentType()); -res.getOutputStream().write(bout.toByteArray()); -res.getOutputStream().close(); +if (handler != null) { +String extCode = resultCode+"-"+handler.getExtension(); +if (actionConfig.getResults().get(extCode) != null) { +resultCode = extCode; +} else { +ByteArrayOutputStream bout = new ByteArrayOutputStream(); + +resultCode = handler.fromObject(target, resultCode, bout); +if (bout.size() > 0) { +res.setContentLength(bout.size()); +res.setContentType(handler.getContentType()); +res.getOutputStream().write(bout.toByteArray()); +res.getOutputStream().close(); +} } } return resultCode; Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java?rev=589071&r1=589070&r2=589071&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/
svn commit: r589074 - /struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java
Author: mrdon Date: Sat Oct 27 04:05:59 2007 New Revision: 589074 URL: http://svn.apache.org/viewvc?rev=589074&view=rev Log: Removing generated javadoc Modified: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java Modified: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java?rev=589074&r1=589073&r2=589074&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java Sat Oct 27 04:05:59 2007 @@ -27,13 +27,6 @@ import static javax.servlet.http.HttpServletResponse.*; import java.util.Date; -/** - * Created by IntelliJ IDEA. - * User: mrdon - * Date: 27/10/2007 - * Time: 18:14:48 - * To change this template use File | Settings | File Templates. - */ public class DefaultHttpHeadersTest extends TestCase { private MockHttpServletResponse mockResponse; private MockHttpServletRequest mockRequest;
svn commit: r589083 - in /struts/sandbox/trunk/struts2-rest-plugin/src: main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java main/resources/struts-plugin.xml test/java/org/apache/struts2/r
Author: mrdon Date: Sat Oct 27 05:05:20 2007 New Revision: 589083 URL: http://svn.apache.org/viewvc?rev=589083&view=rev Log: Renamed default extension variable to be more clear Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/ContentTypeHandlerManagerTest.java Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java?rev=589083&r1=589082&r2=589083&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/ContentTypeHandlerManager.java Sat Oct 27 05:05:20 2007 @@ -44,12 +44,12 @@ public class ContentTypeHandlerManager { Map handlers = new HashMap(); -String defaultHandlerName; +String defaultExtension; public static final String STRUTS_REST_HANDLER_OVERRIDE_PREFIX = "struts.rest.handlerOverride."; -@Inject("struts.rest.defaultHandlerName") -public void setDefaultHandlerName(String name) { -this.defaultHandlerName = name; +@Inject("struts.rest.defaultExtension") +public void setDefaultExtension(String name) { +this.defaultExtension = name; } @Inject @@ -80,7 +80,7 @@ public ContentTypeHandler getHandlerForRequest(HttpServletRequest req) { String extension = findExtension(req.getRequestURI()); if (extension == null) { -extension = defaultHandlerName; +extension = defaultExtension; } return handlers.get(extension); } Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml?rev=589083&r1=589082&r2=589083&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml Sat Oct 27 05:05:20 2007 @@ -18,7 +18,7 @@ - + Modified: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/ContentTypeHandlerManagerTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/ContentTypeHandlerManagerTest.java?rev=589083&r1=589082&r2=589083&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/ContentTypeHandlerManagerTest.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/ContentTypeHandlerManagerTest.java Sat Oct 27 05:05:20 2007 @@ -78,7 +78,7 @@ public String getExtension() { return "foo"; } }; mgr.handlers.put("xml", handler); -mgr.defaultHandlerName = "xml"; +mgr.defaultExtension = "xml"; mgr.handleResult(new ActionConfig(), new DefaultHttpHeaders().withStatus(SC_OK), obj); assertEquals(obj.getBytes().length, mockResponse.getContentLength());
svn commit: r589114 - in /struts/sandbox/trunk/struts2-rest-plugin/src: main/java/org/apache/struts2/rest/RestActionMapper.java test/java/org/apache/struts2/rest/RestActionMapperTest.java
Author: mrdon Date: Sat Oct 27 07:28:10 2007 New Revision: 589114 URL: http://svn.apache.org/viewvc?rev=589114&view=rev Log: Adding support for Rails 2-stye 'animals/dog/edit'-style mappings where the last bit is interpreted as a method name Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java?rev=589114&r1=589113&r2=589114&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java Sat Oct 27 07:28:10 2007 @@ -20,21 +20,19 @@ */ package org.apache.struts2.rest; -import java.util.HashMap; -import java.util.Iterator; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.dispatcher.mapper.DefaultActionMapper; - import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationManager; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.dispatcher.mapper.ActionMapping; +import org.apache.struts2.dispatcher.mapper.DefaultActionMapper; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Iterator; /** * @@ -186,8 +184,18 @@ int lastSlashPos = fullName.lastIndexOf('/'); String id = null; if (lastSlashPos > -1) { + +// fun trickery to parse 'actionName/id/methodName' in the case of 'animals/dog/edit' +int prevSlashPos = fullName.lastIndexOf('/', lastSlashPos - 1); +if (prevSlashPos > -1) { +mapping.setMethod(fullName.substring(lastSlashPos+1)); +fullName = fullName.substring(0, lastSlashPos); +lastSlashPos = prevSlashPos; +} id = fullName.substring(lastSlashPos+1); } + + // If a method hasn't been explicitly named, try to guess using ReST-style patterns if (mapping.getMethod() == null) { Modified: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java?rev=589114&r1=589113&r2=589114&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java Sat Oct 27 07:28:10 2007 @@ -1,28 +1,30 @@ package org.apache.struts2.rest; -import java.util.HashMap; - -import org.apache.struts2.dispatcher.mapper.ActionMapping; - import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationManager; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.impl.DefaultConfiguration; - import junit.framework.TestCase; +import org.apache.struts2.dispatcher.mapper.ActionMapping; +import org.springframework.mock.web.MockHttpServletRequest; public class RestActionMapperTest extends TestCase { private RestActionMapper mapper; private ConfigurationManager configManager; private Configuration config; +private MockHttpServletRequest req; protected void setUp() throws Exception { super.setUp(); +req = new MockHttpServletRequest(); +req.setContextPath("/myapp"); +req.setMethod("GET"); + mapper = new RestActionMapper(); config = new DefaultConfiguration(); -PackageConfig pkg = new PackageConfig("myns", "/my/namespace", false, null); +PackageConfig pkg = new PackageConfig("myns", "/animals", false, null); PackageConfig pkg2 = new PackageConfig("my", "/my", false, null); config.addPackageConfig("mvns", pkg); config.addPackageConfig("my", pkg2); @@ -31,6 +33,93 @@ return config; } }; +} + +public void testGet
svn commit: r589115 - /struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java
Author: mrdon Date: Sat Oct 27 07:29:08 2007 New Revision: 589115 URL: http://svn.apache.org/viewvc?rev=589115&view=rev Log: Added test for Rails 1.2-style ;edit urls Modified: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java Modified: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java?rev=589115&r1=589114&r2=589115&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java Sat Oct 27 07:29:08 2007 @@ -122,6 +122,19 @@ assertEquals("edit", mapping.getMethod()); } +public void testEditSemicolonMapping() throws Exception { +req.setRequestURI("/myapp/animals/dog/fido;edit"); +req.setServletPath("/animals/dog/fido;edit"); +req.setMethod("GET"); + +ActionMapping mapping = mapper.getMapping(req, configManager); + +assertEquals("/animals", mapping.getNamespace()); +assertEquals("dog", mapping.getName()); +assertEquals("fido", ((String[])mapping.getParams().get("id"))[0]); +assertEquals("edit", mapping.getMethod()); +} + public void testParseNameAndNamespace() { tryUri("/foo/23", "", "foo/23"); tryUri("/foo/", "", "foo/");
svn commit: r589117 - /struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java
Author: mrdon Date: Sat Oct 27 07:33:16 2007 New Revision: 589117 URL: http://svn.apache.org/viewvc?rev=589117&view=rev Log: Updating docs for new edit url style Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java?rev=589117&r1=589116&r2=589117&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestActionMapper.java Sat Oct 27 07:33:16 2007 @@ -81,6 +81,7 @@ * GET:/movies=> method="index" * GET:/movies/Thrillers => method="show", id="Thrillers" * GET:/movies/Thrillers;edit => method="edit", id="Thrillers" + * GET:/movies/Thrillers/edit => method="edit", id="Thrillers" * GET:/movies/new=> method="editNew" * POST: /movies=> method="create" * PUT:/movies/Thrillers => method="update", id="Thrillers"
svn commit: r589222 - /struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml
Author: mrdon Date: Sat Oct 27 14:51:20 2007 New Revision: 589222 URL: http://svn.apache.org/viewvc?rev=589222&view=rev Log: Fixing misnamed controller scanner Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml?rev=589222&r1=589221&r2=589222&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml Sat Oct 27 14:51:20 2007 @@ -9,7 +9,7 @@ - +
svn commit: r589240 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java
Author: mrdon Date: Sat Oct 27 16:36:15 2007 New Revision: 589240 URL: http://svn.apache.org/viewvc?rev=589240&view=rev Log: Adding automatic mode for message store interceptor WW-2276 Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java?rev=589240&r1=589239&r2=589240&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java Sat Oct 27 16:36:15 2007 @@ -25,6 +25,8 @@ import java.util.LinkedHashMap; import java.util.Map; +import org.apache.struts2.dispatcher.ServletRedirectResult; + import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ValidationAware; @@ -42,12 +44,19 @@ * * * In the 'STORE' mode, the interceptor will store the [EMAIL PROTECTED] ValidationAware} action's message / errors - * and field errors into Http session. + * and field errors into HTTP session. * * * * In the 'RETRIEVE' mode, the interceptor will retrieve the stored action's message / errors and field * errors and put them back into the [EMAIL PROTECTED] ValidationAware} action. + * + * + * + * In the 'AUTOMATIC' mode, the interceptor will always retrieve the stored action's message / errors + * and field errors and put them back into the [EMAIL PROTECTED] ValidationAware} action, and after Action execution, + * if the [EMAIL PROTECTED] Result} is an instance of [EMAIL PROTECTED] ServletRedirectResult}, the action's message / errors + * and field errors into automatically be stored in the HTTP session.. * * * @@ -84,7 +93,7 @@ * requestParameterSwitch - The request parameter that will indicate what mode this * interceptor is in. * operationMode - The operation mode this interceptor should be in - * (either 'STORE', 'RETRIEVE' or 'NONE'). 'NONE' being the default. + * (either 'STORE', 'RETRIEVE', 'AUTOMATIC', or 'NONE'). 'NONE' being the default. * * * @@ -141,7 +150,7 @@ private static final Logger LOG = LoggerFactory.getLogger(MessageStoreInterceptor.class); - +public static final String AUTOMATIC_MODE = "AUTOMATIC"; public static final String STORE_MODE = "STORE"; public static final String RETRIEVE_MODE = "RETRIEVE"; public static final String NONE = "NONE"; @@ -209,7 +218,8 @@ String reqOperationMode = getRequestOperationMode(invocation); if (RETRIEVE_MODE.equalsIgnoreCase(reqOperationMode) || -RETRIEVE_MODE.equalsIgnoreCase(operationMode)) { +RETRIEVE_MODE.equalsIgnoreCase(operationMode) || +AUTOMATIC_MODE.equalsIgnoreCase(operationMode)) { Object action = invocation.getAction(); if (action instanceof ValidationAware) { @@ -255,8 +265,10 @@ protected void after(ActionInvocation invocation, String result) throws Exception { String reqOperationMode = getRequestOperationMode(invocation); +boolean isRedirect = invocation.getResult() instanceof ServletRedirectResult; if (STORE_MODE.equalsIgnoreCase(reqOperationMode) || -STORE_MODE.equalsIgnoreCase(operationMode)) { +STORE_MODE.equalsIgnoreCase(operationMode) || +(AUTOMATIC_MODE.equalsIgnoreCase(operationMode) && isRedirect)) { Object action = invocation.getAction(); if (action instanceof ValidationAware) { Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java?rev=589240&r1=589239&r2=589240&view=diff == --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/MessageStoreInterceptorTest.java Sat Oct 27 16:36:15 2007 @@ -27,6 +27,7 @@ import java.util.Map; import org.apache.struts2.StrutsTestCase; +import org.apache.struts2.dispatcher.ServletActionRedirectResult; import org.easymock.EasyMock; import com.opensymphony.xwork2.Action; @@ -74,7 +75,9 @@
svn commit: r589244 - in /struts/sandbox/trunk/struts2-rest-plugin: showcase/src/main/java/org/apache/struts2/rest/example/ showcase/src/main/webapp/ src/main/resources/
Author: mrdon Date: Sat Oct 27 16:52:09 2007 New Revision: 589244 URL: http://svn.apache.org/viewvc?rev=589244&view=rev Log: Adding automatic message storing across redirect default, using action messages across redirect to give feedback operation was successful Removed: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-success.jsp Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-index.jsp struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java?rev=589244&r1=589243&r2=589244&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java Sat Oct 27 16:52:09 2007 @@ -6,6 +6,9 @@ import java.util.List; import java.util.Map; +import org.apache.struts2.config.Result; +import org.apache.struts2.config.Results; +import org.apache.struts2.dispatcher.ServletActionRedirectResult; import org.apache.struts2.interceptor.ParameterAware; import org.apache.struts2.rest.DefaultHttpHeaders; import org.apache.struts2.rest.HttpHeaders; @@ -14,6 +17,9 @@ import com.opensymphony.xwork2.Validateable; import com.opensymphony.xwork2.ValidationAwareSupport; [EMAIL PROTECTED]({ +@Result(name="success", type=ServletActionRedirectResult.class, value="orders") +}) public class OrdersController extends ValidationAwareSupport implements ModelDriven, ParameterAware, Validateable{ private Order model = new Order(); @@ -46,11 +52,13 @@ public String destroy() { orders.remove(model.getId()); +addActionMessage("Order removed successfully"); return "success"; } public HttpHeaders create() { orders.put(model.getId(), model); +addActionMessage("New order created successfully"); return new DefaultHttpHeaders() .setLocationId(model.getId()) .renderResult("success"); @@ -58,6 +66,7 @@ public String update() { orders.put(model.getId(), model); +addActionMessage("Order updated successfully"); return "success"; } @@ -66,7 +75,7 @@ return new DefaultHttpHeaders() .renderResult("index") -.withETag("2323"); +.disableCaching(); } public Object getModel() { Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-index.jsp URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-index.jsp?rev=589244&r1=589243&r2=589244&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-index.jsp (original) +++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-index.jsp Sat Oct 27 16:52:09 2007 @@ -9,6 +9,7 @@ Orders + ID Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml?rev=589244&r1=589243&r2=589244&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml Sat Oct 27 16:52:09 2007 @@ -28,6 +28,7 @@ +
svn commit: r589250 - in /struts/sandbox/trunk/struts2-rest-plugin: showcase/src/main/java/org/apache/struts2/rest/example/ src/main/java/org/apache/struts2/rest/
Author: mrdon Date: Sat Oct 27 17:19:11 2007 New Revision: 589250 URL: http://svn.apache.org/viewvc?rev=589250&view=rev Log: Changing example to return better headers, new constructors for DefaultHttpHeader Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java?rev=589250&r1=589249&r2=589250&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java Sat Oct 27 17:19:11 2007 @@ -39,6 +39,43 @@ order.setAmount(getAmount()); order.setClientName(getClientName()); } + +@Override +public int hashCode() { +final int prime = 31; +int result = 1; +result = prime * result + amount; +result = prime * result ++ ((clientName == null) ? 0 : clientName.hashCode()); +result = prime * result + ((id == null) ? 0 : id.hashCode()); +return result; +} + +@Override +public boolean equals(Object obj) { +if (this == obj) +return true; +if (obj == null) +return false; +if (getClass() != obj.getClass()) +return false; +final Order other = (Order) obj; +if (amount != other.amount) +return false; +if (clientName == null) { +if (other.clientName != null) +return false; +} else if (!clientName.equals(other.clientName)) +return false; +if (id == null) { +if (other.id != null) +return false; +} else if (!id.equals(other.id)) +return false; +return true; +} + + } Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java?rev=589250&r1=589249&r2=589250&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java Sat Oct 27 17:19:11 2007 @@ -38,8 +38,8 @@ } } -public String show() { -return "show"; +public HttpHeaders show() { +return new DefaultHttpHeaders("show"); } public String edit() { @@ -73,8 +73,7 @@ public HttpHeaders index() { list = new ArrayList(orders.values()); -return new DefaultHttpHeaders() -.renderResult("index") +return new DefaultHttpHeaders("index") .disableCaching(); } Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java?rev=589250&r1=589249&r2=589250&view=diff == --- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java (original) +++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java Sat Oct 27 17:19:11 2007 @@ -39,6 +39,12 @@ boolean noETag = false; Date lastModified; +public DefaultHttpHeaders() {} + +public DefaultHttpHeaders(String result) { +resultCode = result; +} + public DefaultHttpHeaders renderResult(String code) { this.resultCode = code; return this;