[ https://issues.apache.org/jira/browse/TORQUE-71?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thomas Fischer closed TORQUE-71. -------------------------------- Resolution: Fixed Fix Version/s: 3.3-RC3 Patch applied, thanks > custom velocity renderer to have nicely trimmed generated code > -------------------------------------------------------------- > > Key: TORQUE-71 > URL: https://issues.apache.org/jira/browse/TORQUE-71 > Project: Torque > Issue Type: Improvement > Components: Generator > Reporter: Thoralf Rickert > Priority: Minor > Fix For: 3.3-RC3 > > Attachments: patch.txt, TorqueDataModelTask.java > > > The current Torque templates have spaces and tabs in front of Velocity > commands (#foreach, #set, #end,...). The Velocity renderer puts this spaces > and tabs into the generated code - that is the reason why the code in > generated Base* class files looks sometimes a little bit ugly. If we remove > the leading spaces in front of Velocity commands we can avoid this problem. > My solution is to override the rendering method in > org.apache.velocity.texen.ant.TexenTask that Torque uses to render the > templates and replace the template loader with our own. Therefor we can > remove the leading spaces. > /** > * This method filters the template and replaces some > * unwanted characters. For example it removes leading > * spaces in front of velocity commands and replaces > * tabs with spaces to prevent bounces in different > * code editors with different tab-width-setting. > */ > protected byte[] filter(String template, String encoding) throws Exception { > StringReader stringReader = new StringReader(template); > LineNumberReader lineNumberReader = new LineNumberReader(stringReader); > String line = null; > ByteArrayOutputStream baos = new ByteArrayOutputStream(); > PrintStream ps = new PrintStream(baos,true,encoding); > while ((line = lineNumberReader.readLine()) != null) { > // remove leading spaces in front of velocity commands and comments > line = line.replaceAll("^\\s*#", "#"); > // replace tabs with spaces to prevent bounces in editors > line = line.replaceAll("\t"," "); > ps.println(line); > } > ps.flush(); > ps.close(); > return baos.toByteArray(); > } > The only problem is, that this would generate an error if you use empty > statements in #if or #foreach commands, for example > #if (something) > #end > This would create an error in velocity's render engine if you remove the > leading spaces - because empty statements are not allowed in Velocity. But > this can be avoided by add a single new line: > #if (something) > #end > A patch for the current generator comes in the next days. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]