NATURAL
The code base was NATURAL. NATURAL is an application development and deployment environment using a proprietary language maintained by Software AG. It was created in 1979. André describes it as Cobol's ugly, brain-damaged, BABBLING IN ALL-CAPS - but regrettably still healthy and strong - cousin.. ;-) Well, it is a procedural language structured using modules, subroutines and functions. It feels as old as it is. For example, module names are limited to eight (8!) characters and there is no way to structure the modules further. An enterprise application might contain 5.000 to 10.000 modules. To me NATURAL feels much like early Pascal: units (modules), subroutines and functions together with the eight characters DOS name limit. I really liked Pascal back then and I do not feel that bad about NATURAL. Probably also because I do not have to use it on a daily basis.
NaturalONE and NATstyle
NaturalONE is the Eclipse-based tool for NATURAL by Software AG. It looks pretty good, similar to what you would expect from Eclipse. It contains the usual features like Outline, Search, Debug and something called NATstyle. Now NATstyle - which probably on purpose sounds similar to the well known Checkstyle - is an utility to define and check the coding standard in your programs. It is used inside NaturalONE, see a NATstyle Demo by Software AG. (For more information refer to the Eclipse/NaturalONE help topic Checking Natural Code with NATstyle.)
Invoking NATstyle from outside NaturalONE
I like static code analysis and consider it a mandatory component of every delivery pipeline. As I said above, I wanted to have some static code analysis and was wondering if I would be able to run NATstyle in the pipeline? I did not find any information on the topic and was forced to experiment. I used NaturalONE 8.3.5.0.242 CE (November 2016) and figured out several ways, which were hardly documented, and might be subject to change. Likely there are other options available in newer versions of NaturalONE and NATstyle.
Invoking NATstyle from command line
NATstyle is just an Eclipse plugin inside NaturalONE. In my edition it is the folder
C:\Natural-CE\Designer\eclipse\plugins\com.softwareag.naturalone.natural.natstyle_8.3.5.0000-0242
. With the proper class path it is possible to invoke NATstyle
's main
method, which prints help on its usage:Usage: com.softwareag.naturalone.natural.natstyle.NATstyle [-options] where options include: -projectpath <directory> Specify where to find the Natural project. -rootfolder Library root folder support enabled. -c <file> Specify the configuration file. -o <file> Specify the output file. -sourcefiles <srcList> Specify list of source files to be loaded. separated with ; -libraries <libList> Specify list of libraries to be loaded. separated with ; -exclude <libList> Specify a list of libraries to exclude. separated with ; -p <directory> Specify where to find additional packages. -help Display command line options and exit. Make sure the following classes can be found in your class path: com.softwareag.naturalone.natural.auxiliary com.softwareag.naturalone.natural.common com.softwareag.naturalone.natural.parserNice, that looks like the developers from Software AG prepared NATstyle to be called stand-alone in my pipeline. +1. All the necessary classes can be found in the following plugins of Eclipse/NaturalONE:
- Folder
com.softwareag.naturalone.natural.natstyle_8.3.5.0000-0242
- Jar
com.softwareag.naturalone.natural.auxiliary_*.jar
- Folder
com.softwareag.naturalone.natural.common_8.3.5.0000-0242
- Jar
com.softwareag.naturalone.natural.parser_*.jar
- Jar
org.eclipse.equinox.common_*.jar
org.eclipse.swt.win32.*.jar
org.eclipse.ui.console_*.jar
set N1=C:\Natural-CE\Designer\eclipse\plugins set CLASSPATH=^ %N1%\com.softwareag.naturalone.natural.natstyle_8.3.5.0000-0242;^ %N1%\com.softwareag.naturalone.natural.auxiliary_8.3.5.0000-0242.jar;^ %N1%\com.softwareag.naturalone.natural.common_8.3.5.0000-0242;^ %N1%\com.softwareag.naturalone.natural.parser_8.3.5.0000-0242.jar;^ %N1%\org.eclipse.equinox.common_3.6.200.v20130402-1505.jar java com.softwareag.naturalone.natural.natstyle.NATstyle %*Download the source and see
bin/run_natstyle
for the script I used to run NATstyle directly. Copying the needed folders and Jars to another machine works well. I recommend to create a Jar from the folders before copying them around. bin/_create_jar
shows how to do that. Make sure not to include META-INF\*.RSA
or META-INF\*.SF
into the new Jars because the checksums do not match. bin/copy_jars
does the actual copying into the lib
folder.Invoking NATstyle from Ant
NaturalONE supports Ant for some automation tasks. There is no specific NATstyle Ant task, but calling it from Ant is straight forward. If the path
<path id="natstyle.classpath">
is set up to contain all the Folders and Jars, NATstyle is executed via Ant's java
task:<java taskname="natstyle" classname="com.softwareag.naturalone.natural.natstyle.NATstyle" dir="${basedir}" fork="true" maxmemory="128m" failonerror="true" classpathref="natstyle.classpath"> <arg value="-projectpath" /> <arg value="../NatUnit/NatUnit_L4N" /> ... </java>A new JVM needs to be forked because NATstyle calls
System.exit()
at the end. All parameters are the same as for the command-line invocation and are passed in via the <arg />
element. In the source, see ant/ant_NatStyle.xml
for the complete Ant script.Reporting
NATstyle writes an XML report of all files if worked and found rule violations. The structure is
<NATstyle> <file type='...' location='...'> <error severity='...' message='...' /> ... </file> ... </NATstyle>Inside the folder of NATstyle (i.e.
com.softwareag.naturalone.natural.natstyle_8.3.5.0000-0242
) there is a subfolder NATstyle
. It contains sample files. Using the provided NATstyleSimple.xsl
the report XML (e.g. NATstyleResult.xml
) can be transformed into a human-readable format (e.g. NATstyleSimple.html
). When using NATstyle stand-alone, you might want to copy this folder as well. XSLT transformation task is part of Ant and converts the XML to HTML.<xslt basedir="${basedir}" destdir="${basedir}/report" style="${basedir}/NATstyle/NATstyleSimple.xsl"> <include name="NATstyleResult_*.xml" /> </xslt>See
ant/ant_NatStyleResultToHtml.xml
for the complete Ant build script to convert the NATstyle result XML into a readable HTML report. Using your own stylesheet (.xsl
) allows you to customize the report. See how to convert the report into more complex formats.Next time I will show you how to write your own NATstyle rules.
No comments:
Post a Comment