Author: mrdon Date: Mon Dec 12 18:44:08 2005 New Revision: 356454 URL: http://svn.apache.org/viewcvs?rev=356454&view=rev Log: Adding scoped model interceptor
Added: struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDriven.java struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDrivenInterceptor.java struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestScopedModelDrivenInterceptor.java Added: struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDriven.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDriven.java?rev=356454&view=auto ============================================================================== --- struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDriven.java (added) +++ struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDriven.java Mon Dec 12 18:44:08 2005 @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2002-2003 by OpenSymphony + * All rights reserved. + */ +package org.apache.ti.legacy; + +import com.opensymphony.xwork.ModelDriven; + +/** + * ModelDriven Actions provide a model object to be pushed onto the ValueStack + * in addition to the Action itself, allowing a FormBean type approach like Struts. + * + * @author Jason Carreira + * Created Apr 8, 2003 6:22:42 PM + */ +public interface ScopedModelDriven extends ModelDriven { + + /** + * @return the model to be pushed onto the ValueStack instead of the Action itself + */ + void setModel(Object model); +} Added: struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDrivenInterceptor.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDrivenInterceptor.java?rev=356454&view=auto ============================================================================== --- struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDrivenInterceptor.java (added) +++ struts/sandbox/trunk/ti/phase1/jars/legacy/src/java/org/apache/ti/legacy/ScopedModelDrivenInterceptor.java Mon Dec 12 18:44:08 2005 @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2002-2003 by OpenSymphony + * All rights reserved. + */ +package org.apache.ti.legacy; + +import com.opensymphony.xwork.interceptor.ModelDrivenInterceptor; +import com.opensymphony.xwork.ActionInvocation; +import com.opensymphony.xwork.ActionContext; +import com.opensymphony.xwork.ActionProxy; +import com.opensymphony.xwork.config.entities.ActionConfig; +import com.opensymphony.xwork.ObjectFactory; + +import java.util.Map; + +public class ScopedModelDrivenInterceptor extends ModelDrivenInterceptor { + + protected void after(ActionInvocation dispatcher, String result) throws Exception { + } + + protected void before(ActionInvocation invocation) throws Exception { + Object action = invocation.getAction(); + + if (action instanceof ScopedModelDriven) { + ScopedModelDriven modelDriven = (ScopedModelDriven) action; + ActionContext ctx = ActionContext.getContext(); + ActionConfig config = invocation.getProxy().getConfig(); + String scope = (String)config.getParams().get("modelScope"); + String attr = (String)config.getParams().get("modelName"); + String clsName = (String)config.getParams().get("modelClass"); + + Object model = resolveModel(ObjectFactory.getObjectFactory(), ctx.getSession(), clsName, scope, attr); + modelDriven.setModel(model); + } + super.before(invocation); + } + + protected Object resolveModel(ObjectFactory factory, Map session, String className, String scope, String name) throws Exception { + Object model = null; + if ("session".equals(scope)) { + model = session.get(name); + if (model == null) { + model = factory.buildBean(className, null); + session.put(name, model); + } + } else { + model = factory.buildBean(className, null); + } + return model; + } + +} Added: struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestScopedModelDrivenInterceptor.java URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestScopedModelDrivenInterceptor.java?rev=356454&view=auto ============================================================================== --- struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestScopedModelDrivenInterceptor.java (added) +++ struts/sandbox/trunk/ti/phase1/jars/legacy/src/test/org/apache/ti/legacy/TestScopedModelDrivenInterceptor.java Mon Dec 12 18:44:08 2005 @@ -0,0 +1,53 @@ +package org.apache.ti.legacy; + +import junit.framework.*; +import java.io.*; +import java.util.*; +import org.apache.commons.beanutils.*; +import com.opensymphony.xwork.ObjectFactory; +import ognl.*; + +/** Description of the Class */ +public class TestScopedModelDrivenInterceptor extends TestCase { + + protected ScopedModelDrivenInterceptor inter = null; + + public TestScopedModelDrivenInterceptor(String name) throws Exception { + super(name); + } + + + public static void main(String args[]) { + junit.textui.TestRunner.run(TestScopedModelDrivenInterceptor.class); + } + + /** + * Set up instance variables required by this test case. + */ + public void setUp() throws Exception { + + inter = new ScopedModelDrivenInterceptor(); + } + + + + + public void testResolveModel() throws Exception { + ObjectFactory factory = ObjectFactory.getObjectFactory(); + Object obj = inter.resolveModel(factory, null, "java.lang.String", "request", null); + assertNotNull(obj); + assertTrue(obj instanceof String); + + HashMap session = new HashMap(); + obj = inter.resolveModel(factory, session, "java.lang.String", "request", "foo"); + assertNotNull(obj); + assertTrue(obj instanceof String); + assertTrue(obj == session.get("foo")); + + obj = inter.resolveModel(factory, session, "java.lang.String", "request", "foo"); + assertNotNull(obj); + assertTrue(obj instanceof String); + assertTrue(obj == session.get("foo")); + } +} + --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]