Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298HtmlMediaDecoratorTest.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298HtmlMediaDecoratorTest.java (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298HtmlMediaDecoratorTest.java (revision 0)
@@ -0,0 +1,19 @@
+package org.displaytag.jsptests;
+
+/**
+ * Tests decorator.media.html configuration.
+ *
+ * @author JBarroso
+ */
+public class Displ298HtmlMediaDecoratorTest extends Displ298HtmlTest
+{
+
+ /**
+ * @see org.displaytag.test.DisplaytagCase#getJspName()
+ */
+ public String getJspName()
+ {
+ return "DISPL-298-media-decorator.jsp";
+ }
+
+}
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298PdfTest.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298PdfTest.java (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298PdfTest.java (revision 0)
@@ -0,0 +1,63 @@
+package org.displaytag.jsptests;
+
+import java.io.InputStream;
+
+import org.displaytag.export.ExportViewFactory;
+import org.displaytag.properties.MediaTypeEnum;
+import org.displaytag.tags.TableTagParameters;
+import org.displaytag.test.DisplaytagCase;
+import org.displaytag.util.ParamEncoder;
+
+import com.lowagie.text.pdf.PdfReader;
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+public class Displ298PdfTest extends DisplaytagCase {
+
+ /**
+ * @see org.displaytag.test.DisplaytagCase#getJspName()
+ */
+ public String getJspName()
+ {
+ return "DISPL-298.jsp";
+ }
+
+ /**
+ * Check that model modifications made by table decorator specified
+ * with in the decorator property the table tag show up in the pdf export.
+ *
+ * @param jspName jsp name, with full path
+ * @throws Exception any axception thrown during test.
+ */
+ public void doTest(String jspName) throws Exception
+ {
+
+ ParamEncoder encoder = new ParamEncoder("table");
+ String mediaParameter = encoder.encodeParameterName(TableTagParameters.PARAMETER_EXPORTTYPE);
+ WebRequest request = new GetMethodWebRequest(jspName);
+
+ // this will force media type initialization
+ MediaTypeEnum.registerMediaType("wpdf");
+ ExportViewFactory factory = ExportViewFactory.getInstance();
+ factory.registerExportView("wpdf", "org.displaytag.export.DefaultPdfExportView");
+ MediaTypeEnum pdfMedia = MediaTypeEnum.fromName("wpdf");
+ assertNotNull("Pdf export view not correctly registered.", pdfMedia);
+ request.setParameter(mediaParameter, Integer.toString(pdfMedia.getCode()));
+
+ WebResponse response = runner.getResponse(request);
+
+ assertEquals("Expected a different content type.", "application/pdf", response.getContentType());
+
+ InputStream stream = response.getInputStream();
+ byte[] result = new byte[3000];
+ stream.read(result);
+
+ PdfReader reader = new PdfReader(result);
+ assertEquals("Expected a valid pdf file with a single page", 1, reader.getNumberOfPages());
+
+ // TODO: assert expected content.
+
+ }
+
+}
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298RtfTest.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298RtfTest.java (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298RtfTest.java (revision 0)
@@ -0,0 +1,62 @@
+package org.displaytag.jsptests;
+
+import org.displaytag.export.ExportViewFactory;
+import org.displaytag.properties.MediaTypeEnum;
+import org.displaytag.tags.TableTagParameters;
+import org.displaytag.test.DisplaytagCase;
+import org.displaytag.util.ParamEncoder;
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+public class Displ298RtfTest extends DisplaytagCase
+{
+ /**
+ * @see org.displaytag.test.DisplaytagCase#getJspName()
+ */
+ public String getJspName()
+ {
+ return "DISPL-298.jsp";
+ }
+
+
+ /**
+ * Check that model modifications made by table decorator specified
+ * with in the decorator property the table tag show up in the rtf export.
+ *
+ * @param jspName jsp name, with full path
+ * @throws Exception any axception thrown during test.
+ */
+ public void doTest(String jspName) throws Exception
+ {
+
+ ParamEncoder encoder = new ParamEncoder("table");
+ String mediaParameter = encoder.encodeParameterName(TableTagParameters.PARAMETER_EXPORTTYPE);
+ WebRequest request = new GetMethodWebRequest(jspName);
+
+ // this will force media type initialization
+ MediaTypeEnum.registerMediaType("rtf");
+ ExportViewFactory factory = ExportViewFactory.getInstance();
+ factory.registerExportView("rtf", "org.displaytag.export.DefaultRtfExportView");
+ MediaTypeEnum rtfMedia = MediaTypeEnum.fromName("rtf");
+ assertNotNull("Pdf export view not correctly registered.", rtfMedia);
+ request.setParameter(mediaParameter, Integer.toString(rtfMedia.getCode()));
+
+ WebResponse response = runner.getResponse(request);
+
+ assertEquals("Expected a different content type.", "application/rtf", response.getContentType());
+
+ /*
+ TODO: assert expected content. No Rtf reader.
+ InputStream stream = response.getInputStream();
+ byte[] result = new byte[3000];
+ stream.read(result);
+
+ PdfReader reader = new PdfReader(result);
+ assertEquals("Expected a valid pdf file with a single page", 1, reader.getNumberOfPages());
+ */
+
+ }
+
+}
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298HtmlTest.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298HtmlTest.java (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298HtmlTest.java (revision 0)
@@ -0,0 +1,40 @@
+package org.displaytag.jsptests;
+
+import org.displaytag.decorator.ModelDecorator;
+import org.displaytag.test.DisplaytagCase;
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+public class Displ298HtmlTest extends DisplaytagCase
+{
+
+ /**
+ * @see org.displaytag.test.DisplaytagCase#getJspName()
+ */
+ public String getJspName()
+ {
+ return "DISPL-298.jsp";
+ }
+
+ /**
+ * Check that model modifications made by table decorator specified
+ * with in the decorator property the table tag show up in the html output.
+ *
+ * @param jspName jsp name, with full path
+ * @throws Exception any axception thrown during test.
+ */
+ public void doTest(String jspName) throws Exception
+ {
+ WebRequest request = new GetMethodWebRequest(jspName);
+ WebResponse response = runner.getResponse(request);
+
+ assertEquals("Expected a different content type.", "text/html", response.getContentType());
+ String responseText = response.getText();
+ boolean expectedTextPresent = responseText != null &&
+ responseText.indexOf(ModelDecorator.DECORATED_VALUE) > -1;
+ assertTrue("Missing content.", expectedTextPresent);
+ }
+
+}
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298CsvTest.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298CsvTest.java (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/jsptests/Displ298CsvTest.java (revision 0)
@@ -0,0 +1,55 @@
+package org.displaytag.jsptests;
+
+import org.displaytag.decorator.ModelDecorator;
+import org.displaytag.properties.MediaTypeEnum;
+import org.displaytag.tags.TableTagParameters;
+import org.displaytag.test.DisplaytagCase;
+import org.displaytag.util.ParamEncoder;
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+public class Displ298CsvTest extends DisplaytagCase {
+
+ protected String getMimeType() {
+ return "text/csv";
+ }
+
+ protected int getCode() {
+ return MediaTypeEnum.CSV.getCode();
+ }
+
+ /**
+ * @see org.displaytag.test.DisplaytagCase#getJspName()
+ */
+ public String getJspName()
+ {
+ return "DISPL-298.jsp";
+ }
+
+ /**
+ * Check that model modifications made by table decorator specified
+ * with in the decorator property the table tag show up in the csv export.
+ *
+ * @param jspName jsp name, with full path
+ * @throws Exception any axception thrown during test.
+ */
+ public void doTest(String jspName) throws Exception
+ {
+ ParamEncoder encoder = new ParamEncoder("table");
+ String mediaParameter = encoder.encodeParameterName(TableTagParameters.PARAMETER_EXPORTTYPE);
+
+ WebRequest request = new GetMethodWebRequest(jspName);
+ request.setParameter(mediaParameter, Integer.toString(this.getCode()));
+
+ WebResponse response = runner.getResponse(request);
+
+ assertEquals("Expected a different content type.", this.getMimeType(), response.getContentType());
+ String responseText = response.getText();
+ boolean expectedTextPresent = responseText != null &&
+ responseText.indexOf(ModelDecorator.DECORATED_VALUE) > -1;
+ assertTrue("Missing content.", expectedTextPresent);
+ }
+
+}
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/decorator/ModelDecorator.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/decorator/ModelDecorator.java (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/java/org/displaytag/decorator/ModelDecorator.java (revision 0)
@@ -0,0 +1,12 @@
+package org.displaytag.decorator;
+
+public class ModelDecorator extends TableDecorator
+{
+ public static final String DECORATED_VALUE = "decoratedValue";
+
+ public String getDecoratedValue()
+ {
+ return DECORATED_VALUE;
+ }
+
+}
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/displaytag.properties
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/displaytag.properties (revision 1071)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/displaytag.properties (working copy)
@@ -1,2 +0,0 @@
-# test the sample pdf view, not enabled by default in distribution
-export.pdf=true
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/el/DISPL-298.jsp
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/el/DISPL-298.jsp (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/el/DISPL-298.jsp (revision 0)
@@ -0,0 +1,25 @@
+
+ ]]>
+
+
+
+
+ Displaytag unit test
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/el/DISPL-298-media-decorator.jsp
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/el/DISPL-298-media-decorator.jsp (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/el/DISPL-298-media-decorator.jsp (revision 0)
@@ -0,0 +1,32 @@
+
+ ]]>
+
+
+
+
+ Displaytag unit test
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/standard/DISPL-298.jsp
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/standard/DISPL-298.jsp (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/standard/DISPL-298.jsp (revision 0)
@@ -0,0 +1,25 @@
+
+ ]]>
+
+
+
+
+ Displaytag unit test
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/standard/DISPL-298-media-decorator.jsp
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/standard/DISPL-298-media-decorator.jsp (revision 0)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/test/resources/standard/DISPL-298-media-decorator.jsp (revision 0)
@@ -0,0 +1,26 @@
+
+ ]]>
+
+
+
+
+ Displaytag unit test
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/render/ItextTableWriter.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/render/ItextTableWriter.java (revision 1071)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/render/ItextTableWriter.java (working copy)
@@ -237,14 +237,19 @@
}
/**
+ * Decorators that help render the table to an iText document must implement ItextDecorator.
* @see org.displaytag.render.TableWriterTemplate#writeDecoratedRowStart(org.displaytag.model.TableModel)
*/
protected void writeDecoratedRowStart(TableModel model)
{
- ItextDecorator decorator = (ItextDecorator) model.getTableDecorator();
- decorator.setTable(this.table);
- decorator.setFont(this.defaultFont);
- ((TableDecorator) decorator).startRow();
+ TableDecorator decorator = model.getTableDecorator();
+ if (decorator instanceof ItextDecorator)
+ {
+ ItextDecorator idecorator = (ItextDecorator) decorator;
+ idecorator.setTable(this.table);
+ idecorator.setFont(this.defaultFont);
+ }
+ decorator.startRow();
}
/**
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/properties/TableProperties.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/properties/TableProperties.java (revision 1071)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/properties/TableProperties.java (working copy)
@@ -264,12 +264,18 @@
public static final String PROPERTY_EXPORT_PREFIX = "export"; //$NON-NLS-1$
/**
- * suffix used to set the export decorator property name. The full property name is export.
- * [export type].decorator
+ * prefix used to set the media decorator property name. The full property name is
+ * decorator.media.[export type].
*/
- public static final String PROPERTY_EXPORT_DECORATOR_SUFFIX = "decorator"; //$NON-NLS-1$
+ public static final String PROPERTY_DECORATOR_SUFFIX = "decorator"; //$NON-NLS-1$
/**
+ * used to set the media decorator property name. The full property name is
+ * decorator.media.[export type]
+ */
+ public static final String PROPERTY_DECORATOR_MEDIA = "media"; //$NON-NLS-1$
+
+ /**
* property export.types: holds the list of export available export types.
*/
public static final String PROPERTY_EXPORTTYPES = "export.types"; //$NON-NLS-1$
@@ -1314,9 +1320,20 @@
* Obtain the name of the decorator configured for a given media type.
* @param thatEnum A media type
* @return The name of the decorator configured for a given media type.
+ * @deprecated Use getMediaTypeDecoratorName instead.
*/
public String getExportDecoratorName(MediaTypeEnum thatEnum)
{
- return getProperty(PROPERTY_EXPORT_PREFIX + SEP + thatEnum + SEP + PROPERTY_EXPORT_DECORATOR_SUFFIX);
+ return getProperty(PROPERTY_EXPORT_PREFIX + SEP + thatEnum + SEP + PROPERTY_DECORATOR_SUFFIX);
}
+
+ /**
+ * Obtain the name of the decorator configured for a given media type.
+ * @param thatEnum A media type
+ * @return The name of the decorator configured for a given media type.
+ */
+ public String getMediaTypeDecoratorName(MediaTypeEnum thatEnum)
+ {
+ return getProperty(PROPERTY_DECORATOR_SUFFIX + SEP + PROPERTY_DECORATOR_MEDIA + SEP + thatEnum);
+ }
}
\ No newline at end of file
Index: C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/tags/TableTag.java
===================================================================
--- C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/tags/TableTag.java (revision 1071)
+++ C:/Workshop/jluix/displaytag_now/displaytag/displaytag/src/main/java/org/displaytag/tags/TableTag.java (working copy)
@@ -1173,21 +1173,8 @@
describeEmptyTable();
}
- // TableDecorator tableDecorator = DecoratorFactory.loadTableDecorator(this.decoratorName);
- String tableDecoratorName = null;
- Object previousMediaType = this.pageContext.getAttribute(PAGE_ATTRIBUTE_MEDIA);
- if (MediaTypeEnum.HTML.equals(this.currentMediaType)
- && (previousMediaType == null || MediaTypeEnum.HTML.equals(previousMediaType)))
- {
- tableDecoratorName = this.decoratorName;
- }
- else if (!MediaTypeEnum.HTML.equals(this.currentMediaType))
- {
- tableDecoratorName = this.properties.getExportDecoratorName(this.currentMediaType);
- }
- TableDecorator tableDecorator = this.properties.getDecoratorFactoryInstance().loadTableDecorator(
- this.pageContext,
- tableDecoratorName);
+ TableDecorator tableDecorator = this.properties.getDecoratorFactoryInstance().
+ loadTableDecorator(this.pageContext, getConfiguredDecoratorName());
if (tableDecorator != null)
{
@@ -1212,6 +1199,7 @@
// check for nested tables
// Object previousMediaType = this.pageContext.getAttribute(PAGE_ATTRIBUTE_MEDIA);
+ Object previousMediaType = this.pageContext.getAttribute(PAGE_ATTRIBUTE_MEDIA);
if (MediaTypeEnum.HTML.equals(this.currentMediaType)
&& (previousMediaType == null || MediaTypeEnum.HTML.equals(previousMediaType)))
{
@@ -1240,6 +1228,26 @@
}
/**
+ * Returns the name of the table decorator that should be applied to this table,
+ * which is either the decorator configured in the property "decorator", or if
+ * none is configured in said property, a decorator configured with the
+ * "decorator.media.[media type]" property, or null if none is configured.
+ *
+ * @return Name of the table decorator that should be applied to this table.
+ */
+ private String getConfiguredDecoratorName()
+ {
+ String
+ tableDecoratorName = (this.decoratorName == null) ?
+ this.properties.getMediaTypeDecoratorName(this.currentMediaType) :
+ this.decoratorName;
+ tableDecoratorName = (tableDecoratorName == null) ?
+ this.properties.getExportDecoratorName(this.currentMediaType) :
+ tableDecoratorName;
+ return tableDecoratorName;
+ }
+
+ /**
* clean up instance variables, but not the ones representing tag attributes.
*/
private void cleanUp()