Author: hermanns Date: Fri Apr 24 08:08:43 2009 New Revision: 768217 URL: http://svn.apache.org/viewvc?rev=768217&view=rev Log: WW-2742 Paramters not being set in JFreeChart Plugin
Modified: struts/struts2/trunk/plugins/jfreechart/pom.xml struts/struts2/trunk/plugins/jfreechart/src/main/java/org/apache/struts2/dispatcher/ChartResult.java struts/struts2/trunk/plugins/jfreechart/src/test/java/org/apache/struts2/dispatcher/ChartResultTest.java Modified: struts/struts2/trunk/plugins/jfreechart/pom.xml URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/jfreechart/pom.xml?rev=768217&r1=768216&r2=768217&view=diff ============================================================================== --- struts/struts2/trunk/plugins/jfreechart/pom.xml (original) +++ struts/struts2/trunk/plugins/jfreechart/pom.xml Fri Apr 24 08:08:43 2009 @@ -43,7 +43,7 @@ <dependency> <groupId>jfree</groupId> <artifactId>jcommon</artifactId> - <version>1.0.2</version> + <version>1.0.12</version> <scope>provided</scope> <exclusions> <exclusion> @@ -55,7 +55,7 @@ <dependency> <groupId>jfree</groupId> <artifactId>jfreechart</artifactId> - <version>1.0.1</version> + <version>1.0.9</version> <scope>provided</scope> <exclusions> <exclusion> @@ -70,6 +70,31 @@ <version>0.09</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-core</artifactId> + <scope>compile</scope> + <version>${pom.version}</version> + </dependency> + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-junit-plugin</artifactId> + <version>${pom.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.4</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>jsp-api</artifactId> + <version>2.0</version> + <scope>provided</scope> + </dependency> </dependencies> Modified: struts/struts2/trunk/plugins/jfreechart/src/main/java/org/apache/struts2/dispatcher/ChartResult.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/jfreechart/src/main/java/org/apache/struts2/dispatcher/ChartResult.java?rev=768217&r1=768216&r2=768217&view=diff ============================================================================== --- struts/struts2/trunk/plugins/jfreechart/src/main/java/org/apache/struts2/dispatcher/ChartResult.java (original) +++ struts/struts2/trunk/plugins/jfreechart/src/main/java/org/apache/struts2/dispatcher/ChartResult.java Fri Apr 24 08:08:43 2009 @@ -23,7 +23,8 @@ import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; -import com.opensymphony.xwork2.Result; +import com.opensymphony.xwork2.util.logging.Logger; +import com.opensymphony.xwork2.util.logging.LoggerFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; @@ -97,7 +98,9 @@ * </result> * <!-- END SNIPPET: example --></pre> */ -public class ChartResult implements Result { +public class ChartResult extends StrutsResultSupport { + + private final static Logger LOG = LoggerFactory.getLogger(ChartResult.class); private static final long serialVersionUID = -6484761870055986612L; private static final String DEFAULT_TYPE = "png"; @@ -105,7 +108,7 @@ private JFreeChart chart; // the JFreeChart to render private boolean chartSet; - Integer height, width; + String height, width; String type = DEFAULT_TYPE; // supported are jpg, jpeg or png, defaults to png String value = DEFAULT_VALUE; // defaults to 'chart' @@ -115,7 +118,7 @@ super(); } - public ChartResult(JFreeChart chart, int height, int width) { + public ChartResult(JFreeChart chart, String height, String width) { this.chart = chart; this.height = height; this.width = width; @@ -123,19 +126,19 @@ // ACCESSORS ---------------------------- - public Integer getHeight() { + public String getHeight() { return height; } - public void setHeight(Integer height) { + public void setHeight(String height) { this.height = height; } - public Integer getWidth() { + public String getWidth() { return width; } - public void setWidth(Integer width) { + public void setWidth(String width) { this.width = width; } @@ -174,7 +177,10 @@ * @param invocation an encapsulation of the action execution state. * @throws Exception if an error occurs when creating or writing the chart to the servlet output stream. */ - public void execute(ActionInvocation invocation) throws Exception { + public void doExecute(String finalLocation, ActionInvocation invocation) throws Exception { + + initializeProperties(invocation); + if (!chartSet) // if our chart hasn't been set (by the testcase), we'll look it up in the value stack chart = (JFreeChart) invocation.getStack().findValue(value, JFreeChart.class); if (chart == null) // we need to have a chart object - if not, blow up @@ -190,13 +196,48 @@ try { // check the type to see what kind of output we have to produce if ("png".equalsIgnoreCase(type)) - ChartUtilities.writeChartAsPNG(os, chart, width, height); + ChartUtilities.writeChartAsPNG(os, chart, getIntValueFromString(width), getIntValueFromString(height)); else if ("jpg".equalsIgnoreCase(type) || "jpeg".equalsIgnoreCase(type)) - ChartUtilities.writeChartAsJPEG(os, chart, width, height); + ChartUtilities.writeChartAsJPEG(os, chart, getIntValueFromString(width), getIntValueFromString(height)); else throw new IllegalArgumentException(type + " is not a supported render type (only JPG and PNG are)."); } finally { if (os != null) os.flush(); } } + + /** + * Sets up result properties, parsing etc. + * + * @param invocation Current invocation. + * @throws Exception on initialization error. + */ + private void initializeProperties(ActionInvocation invocation) throws Exception { + + if (height != null) { + height = conditionalParse(height, invocation); + } + + if (width != null) { + width = conditionalParse(width, invocation); + } + + if (type != null) { + type = conditionalParse(type, invocation); + } + + if ( type == null) { + type = DEFAULT_TYPE; + } + } + + private Integer getIntValueFromString(String value) { + try { + return Integer.parseInt(value); + } catch (Exception e) { + LOG.error("Specified value for width or height is not of type Integer...", e); + return null; + } + } + } \ No newline at end of file Modified: struts/struts2/trunk/plugins/jfreechart/src/test/java/org/apache/struts2/dispatcher/ChartResultTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/jfreechart/src/test/java/org/apache/struts2/dispatcher/ChartResultTest.java?rev=768217&r1=768216&r2=768217&view=diff ============================================================================== --- struts/struts2/trunk/plugins/jfreechart/src/test/java/org/apache/struts2/dispatcher/ChartResultTest.java (original) +++ struts/struts2/trunk/plugins/jfreechart/src/test/java/org/apache/struts2/dispatcher/ChartResultTest.java Fri Apr 24 08:08:43 2009 @@ -23,10 +23,11 @@ import com.mockobjects.dynamic.Mock; import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsTestCase; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; -import junit.framework.TestCase; -import ognl.Ognl; +import com.opensymphony.xwork2.ActionProxy; +import com.opensymphony.xwork2.util.ValueStack; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; @@ -38,12 +39,14 @@ /** */ -public class ChartResultTest extends TestCase { +public class ChartResultTest extends StrutsTestCase { private ActionInvocation actionInvocation; private JFreeChart mockChart; private Mock responseMock; + private Mock mockActionProxy; private MockServletOutputStream os; + private ValueStack stack; public void testChart() throws Exception { @@ -53,8 +56,8 @@ result.setChart(mockChart); - result.setHeight(10); - result.setWidth(10); + result.setHeight("10"); + result.setWidth("10"); result.execute(actionInvocation); responseMock.verify(); @@ -77,19 +80,59 @@ assertFalse(os.isWritten()); } + + public void testChartWithOGNLProperties() throws Exception { + responseMock.expectAndReturn("getOutputStream", os); + + + ChartResult result = new ChartResult(); + + result.setChart(mockChart); + + result.setHeight("${myHeight}"); + result.setWidth("${myWidth}"); + + ValueStack stack = ActionContext.getContext().getValueStack(); + stack.set("myHeight", 250); + stack.set("myWidth", 150); + + result.execute(actionInvocation); + + responseMock.verify(); + assertEquals(result.getHeight(), stack.findValue("myHeight").toString()); + assertEquals(result.getWidth(), stack.findValue("myWidth").toString()); + assertEquals("250", result.getHeight().toString()); + assertEquals("150", result.getWidth().toString()); + assertTrue(os.isWritten()); + } + protected void setUp() throws Exception { + super.setUp(); + DefaultPieDataset data = new DefaultPieDataset(); data.setValue("Java", new Double(43.2)); data.setValue("Visual Basic", new Double(0.0)); data.setValue("C/C++", new Double(17.5)); mockChart = ChartFactory.createPieChart("Pie Chart", data, true, true, false); + + stack = ActionContext.getContext().getValueStack(); + ActionContext.getContext().setValueStack(stack); + + + mockActionProxy = new Mock(ActionProxy.class); + mockActionProxy.expectAndReturn("getNamespace", "/html"); + Mock mockActionInvocation = new Mock(ActionInvocation.class); + + mockActionInvocation.matchAndReturn("getStack", stack); +// mockActionInvocation.expectAndReturn("getProxy", mockActionProxy.proxy()); + actionInvocation = (ActionInvocation) mockActionInvocation.proxy(); + os = new MockServletOutputStream(); responseMock = new Mock(HttpServletResponse.class); - ActionContext.setContext(new ActionContext(Ognl.createDefaultContext(null))); ServletActionContext.setResponse((HttpServletResponse) responseMock.proxy()); } @@ -97,6 +140,8 @@ actionInvocation = null; os = null; responseMock = null; + stack = null; + mockActionProxy = null; }