At line 15 changed 2 lines. |
* [4] Modify User Service Junit test |
* [5] Run User Service Junit test |
* [4] Modify UserManagerTest Junit test |
* [5] Run UserManagerTest Junit test |
At line 25 added 2 lines. |
UserInputSource needs to extend interface FOPSource which should be in src/service/**/fop/FOPSource.java (source attached at the end of this tutorial). |
|
At line 37 changed 1 line. |
public class UserInputSource extends InputSource { |
public class UserInputSource extends InputSource implements FOPSource { |
At line 69 added 2 lines. |
|
|
At line 79 added 2 lines. |
|
|
At line 81 changed 1 line. |
This class depends on two helper classes, AbstractObjectReader and EasyGenerationContentHandlerProxy that need to be added to src/service/**/util. These files are downloadable at the end of this tutorial. |
This class depends on two helper classes, AbstractObjectReader and EasyGenerationContentHandlerProxy that need to be added to src/service/**/fop. These files are downloadable at the end of this tutorial. |
At line 101 changed 1 line. |
import org.appfuse.util.AbstractObjectReader; |
import org.appfuse.fop.AbstractObjectReader; |
At line 146 added 3 lines. |
|
|
|
At line 169 changed 1 line. |
processUserDetails(user); |
processUserDetails(user); |
At line 197 added 1 line. |
|
At line 207 changed 1 line. |
Place the user2fo.xsl stylesheet in src/web/**/fop/user2fo.xsl. |
Place the user2fo.xsl stylesheet in src/service/**/fop/xsl/user2fo.xsl. |
At line 323 changed 1 line. |
!!Modify User Junit test [#4] |
!!Modify UserManagerTest.java Junit test [#4] |
At line 325 changed 1 line. |
To support the execution of the User service level test, we need another helper file. This file (attached at the end) is called FOPHelper.java and lives in src/service/**/utils. |
To support the execution of the User service level test, we need another helper file. This file (attached at the end) is called FOPHelper.java and lives in src/service/**/fop. |
At line 356 changed 1 line. |
import org.appfuse.utils.FOPHelper; |
import org.appfuse.fop.FOPHelper; |
At line 360 changed 32 lines. |
|
try { |
User testData = new User(); |
testData.setUsername("tomcat"); |
testData.getRoles().add(new Role("user")); |
// set expected behavior on dao |
userDAO.expects(once()).method("getUser") |
.with(eq("tomcat")).will(returnValue(testData)); |
|
user = userManager.getUser("tomcat"); |
|
File baseDir = new File("."); |
File xslFile = new File(baseDir, "./src/web/org/appfuse/webapp/fop/user2fo.xsl"); |
if (xslFile.exists()) { |
log.info("xslFile exists"); |
} |
File pdfFile = new File(baseDir, "user.pdf"); |
File xmlFile = new File(baseDir, "user.xml"); |
|
log.debug("Input: a User object"); |
log.debug("Stylesheet: " + xslFile); |
log.debug("Output: PDF (" + pdfFile + ")"); |
log.debug("Transforming..."); |
|
FOPHelper fopHelper = new FOPHelper(); |
fopHelper.convertUser2PDF(user, xslFile, pdfFile); |
fopHelper.convertUser2XML(user, xmlFile); |
|
} |
catch (Throwable e) { |
log.error("Error [" + e.getMessage() + "]", e); |
} |
|
log.info("Inside testGeneratePSF"); |
User testData = new User(); |
testData.setUsername("tomcat"); |
testData.getRoles().add(new Role("user")); |
// set expected behavior on dao |
userDAO.expects(once()).method("getUser") |
.with(eq("tomcat")).will(returnValue(testData)); |
|
user = userManager.getUser("tomcat"); |
UserInputSource uis = new UserInputSource(user); |
|
// Setup directories |
File baseDir = new File("."); |
File outDir = new File("."); |
outDir.mkdirs(); |
|
//Setup input and output |
File xslFile = new File(baseDir, "./src/service/org/appfuse/fop/xsl/user2fo.xsl"); |
File pdfFile = new File(outDir, "user.pdf"); |
File xmlFile = new File(outDir, "user.xml"); |
File foFile = new File(outDir, "user.fo"); |
|
log.debug("Input: a UserInputSource object"); |
log.debug("Stylesheet: " + xslFile); |
log.debug("Output: PDF (" + pdfFile + ")"); |
log.debug("Output: FO (" + foFile + ")"); |
log.debug("Transforming..."); |
|
FOPHelper fopHelper = new FOPHelper(); |
fopHelper.convertPOJO2PDF(uis, xslFile, pdfFile, foFile); |
fopHelper.convertPOJO2XML(uis, xmlFile); |
At line 404 changed 2 lines. |
[junit] [appfuse] DEBUG [main] UserManagerTest.testGeneratePDF(88) | Input: a User object |
[junit] [appfuse] DEBUG [main] UserManagerTest.testGeneratePDF(89) | Stylesheet: ././src/web/org/appfuse/webapp/fop/user2fo.xsl |
[junit] [appfuse] DEBUG [main] UserManagerTest.testGeneratePDF(88) | Input: a UserInputSource object |
[junit] [appfuse] DEBUG [main] UserManagerTest.testGeneratePDF(89) | Stylesheet: ././src/service/org/appfuse/fop/xsl/user2fo.xsl |
At line 419 changed 1 line. |
|
|
At line 423 changed 1 line. |
|
import org.appfuse.fop.UserXMLReader; |
import org.appfuse.fop.FOPHelper; |
|
At line 430 changed 5 lines. |
|
import java.io.ByteArrayOutputStream; |
import java.io.File; |
import java.io.IOException; |
|
|
import java.io.*; |
import java.util.Date; |
|
At line 440 changed 1 line. |
|
|
At line 442 removed 1 line. |
import org.springframework.core.io.ClassPathResource; |
At line 445 changed 1 line. |
|
import org.springframework.core.io.*; |
import org.xml.sax.InputSource; |
|
At line 463 added 1 line. |
import javax.xml.transform.sax.SAXSource; |
At line 452 changed 1 line. |
|
|
At line 457 changed 1 line. |
* <p><a href="FopServlet.java.html"><i>View Source</i></a></p> |
* <p><a href="FOPServlet.java.html"><i>View Source</i></a></p> |
At line 463 changed 1 line. |
* display-name="Fop Servlet" |
* display-name="FOP Servlet" |
At line 470 changed 4 lines. |
|
public class FopServlet extends HttpServlet { |
|
private Logger logger = null; |
|
public class FOPServlet extends HttpServlet { |
|
private Logger logger = null; |
At line 476 changed 2 lines. |
|
|
|
|
At line 479 changed 3 lines. |
this.servletContext = getServletContext(); |
this.ctx = |
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); |
this.servletContext = getServletContext(); |
this.ctx = |
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); |
At line 483 changed 1 line. |
|
|
At line 497 changed 1 line. |
|
|
At line 511 changed 1 line. |
|
|
At line 524 changed 4 lines. |
|
ByteArrayOutputStream out = null; |
|
try { |
|
ByteArrayOutputStream out = null; |
|
try { |
At line 529 changed 1 line. |
|
|
At line 532 changed 30 lines. |
|
Driver driver = new Driver(); |
Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO); |
driver.setLogger(logger); |
MessageHandler.setScreenLogger(logger); |
driver.setRenderer(Driver.RENDER_PDF); |
|
|
// Start with a bigger buffer to avoid too many buffer reallocations |
out = new ByteArrayOutputStream(16384); |
driver.setOutputStream(out); |
|
ClassPathResource resource = new |
ClassPathResource("/org/appfuse/webapp/fop/user2fo.xsl"); |
File xslFile = resource.getFile(); |
|
//Setup XSLT |
TransformerFactory factory = TransformerFactory.newInstance(); |
Transformer transformer = factory.newTransformer(new StreamSource(xslFile)); |
|
//Setup input for XSLT transformation |
Source src = new UserInputSource(user).getSource(); |
|
//Resulting SAX events (the generated FO) must be piped through to FOP |
Result res = new SAXResult(driver.getContentHandler()); |
|
//Start XSLT transformation and FOP processing |
transformer.transform(src, res); |
|
byte[] content = out.toByteArray(); |
UserInputSource uis = new UserInputSource(user); |
|
ClassPathResource resource = |
new ClassPathResource("/org/appfuse/fop/xsl/user2fo.xsl"); |
|
byte[] content = FOPHelper.createPDF(uis, resource); |
response.setHeader("Content-Disposition", |
"attachment; filename=user-" + user.getUsername() + ".pdf"); |
At line 563 removed 2 lines. |
response.setHeader("Content-Disposition", "attachment; filename=user-" + |
user.getUserName() + ".pdf"); |
At line 568 changed 1 line. |
|
|
At line 572 changed 3 lines. |
if (out!=null) { |
out.close(); |
} |
if (out!=null) { |
out.close(); |
} |
At line 578 removed 1 line. |
|
At line 618 removed 3 lines. |
# |
|
|
At line 647 added 2 lines. |
|
|
At line 666 changed 1 line. |
Also inside the package-web target add this line: |
Also inside the package-web target add this block: |
At line 669 changed 1 line. |
<include name="**/*.xsl"/> |
|
<fileset dir="src/service"> |
<include name="**/*.xsl"/> |
</fileset> |
|
At line 678 removed 1 line. |
<include name="**/*.xsl"/> |
At line 670 added 3 lines. |
<fileset dir="src/service"> |
<include name="**/*.xsl"/> |
</fileset> |
At line 682 removed 1 line. |
which ensures the xsl file is deployed. |
At line 676 added 2 lines. |
which ensures the xsl file is deployed into our runtime classpath. |
|
At line 688 removed 2 lines. |
*src/web/org/appfuse/webapp/fop/user2fo.xsl |
*src/web/org/appfuse/webapp/action/FopServlet.java |
At line 683 added 3 lines. |
*src/web/org/appfuse/webapp/action/FOPServlet.java |
|
*src/service/org/appfuse/fop/xsl/user2fo.xsl |
At line 688 added 4 lines. |
*src/service/org/appfuse/fop/FOPSource.java |
*src/service/org/appfuse/fop/FOPHelper.java |
*src/service/org/appfuse/fop/AbstractObjectReader.java |
*src/service/org/appfuse/fop/EasyGenerationContentHandlerProxy.java |
At line 694 removed 3 lines. |
*src/service/org/appfuse/util/AbstractObjectReader.java |
*src/service/org/appfuse/util/EasyGenerationContentHandlerProxy.java |
|
At line 702 changed 2 lines. |
*Ensure the xsl file is within your webapps/appfuse/WEB-INF/classes/** runtime directory somewhere |
*Ensure the path to load the user2fo.xsl file, specified in FopServlet, is correct (in case you moved it) |
*Ensure the xsl file is within your webapps/appfuse/WEB-INF/classes/** runtime directory |
*Ensure the path to load the user2fo.xsl file, specified in FOPServlet, is correct (in case you moved it) |