|welcome to the AMORPH project.|
Amorph Usage ExamplesAmorph usage from within Java code:
First you have to "grab" the definition for the amorph engine "what to do" - the so called recipe - into a JDOM Element (the XML node). The recipe tells amorph which DataGetter to use, which transformations should be applied, which DataPutter should be invoked. In this case we grab the recipe node by applying a XPath expression to our XML config file.
For examples of how recipes look like, see the file "docs/examples/example.rcp.xml" within the amorph distribution (or directly look at the CVS file here: http://amorph.cvs.sourceforge.net/amorph/amorph/docs/example/example.rcp.xml?view=markup
A short example of a recipe that is needed for parsing and transforming a .CSV file could look like this:
<example-xml> <recipe> <!-- type "builtin" allows ommiting the default package: com.lbslogics.amorph.input. --> <prepare type="builtin" class="CsvPreparator"> <param name="delimiter" value=";"/> </prepare> <!-- there can exist multiple transform-elements specifying a stylesheet to applicate --> <transform type="xslt" file="docs\\example\\xslt\\example-xmlout.xslt" /> <!-- postprocess node is optional: if it would be required to transform the resulting XML to a specific format (like CSV or something else), a PostProcessor would have be to configured at this place --> <!-- simple output of the result to the specified output stream (file) --> <putter type="builtin" class="StreamPutter"/> </recipe> </example-xml>This is all the amorph engine needs to know. The actual transformation Java code is only some lines:
Element recipe = (Element) xprec.selectSingleNode(recipeDoc); /** now instantiate the amorph Recipe an pass the XML node * and a map representing the runtime context (can be empty * by default) */ Recipe rec = new DefaultXMLRecipe(recipe, new HashMap()); /** the "chopper" is the amorph transformation engine, it cooks your * data as you specified it in your recipe: */ Chopper chop = new Chopper(rec); // now set the input/output stuff, even if null // the chopper has to handle that: chop.setInputFilename(inputFilename); chop.setOutputFilename(outputFilename); // now do the work: chop.cook();Thats it: your data has been transformed as you wanted