Bidjic set to set
Description
+---+ +---+ | | +---> | | | | | | +---+ +---+ +---+ +---+ | | +---> | | | | | | +---+ +---+
Bidjic task parameters
|Attribute | Description | Value | Required | |-----------|-----------------------|---------------------|---------------| |todir | output dir | <dirname> | yes | |overwrite | overwrite output file | true by default | no | |-----------|-----------------------|---------------------|---------------| |Element | Description | Value | Required | |-----------|-----------------------|---------------------|---------------| |templateset| template set | | yes | |fileset | file set | | if no filelist| |filelist | file list | | if no fileset |
Example
Generates cpp - c++ classes from Model driven architecture abstraction: bidjim entities.
download set2set.tgz sample.
ant file : build.xml
<target name="cpp" description="generate cpp files"> <bidjic todir="gen" overwrite="true"> <fileset dir="MyPackage"> <include name="**/*.bidjim"/> </fileset> <templateset dir="templates"> <include name="*.ftl"/> </templateset> </bidjic> </target>
-
Model .cpp.ftl + MyPackage/MyModule/Foo.bidjim => Foo .cpp
-
Module .cpp.ftl + MyPackage/MyModule/Foo.bidjim => MyModule .cpp
template: Model.h.ftl
[#assign entity = bidji.entity] #ifndef _${PACKAGE}_${MODULE}_${MODEL}_H_ #define _${PACKAGE}_${MODULE}_${MODEL}_H_ namespace ${Package} { namespace ${Module} { class ${Model} { private: [#foreach property in entity.property] ${property.@type} _${property.@name}; [/#foreach] public: ${Model}(); virtual ~${Model}(); public: [#foreach property in entity.property] void set${property.@name?cap_first}(const ${property.@type} & ${property.@name}); const ${property.@type} & get${property.@name?cap_first}() const; [/#foreach] }; // class ${Model} [#foreach property in entity.property] inline const ${property.@type} & ${Model}::get${property.@name?cap_first}() const { return _${property.@name}; } [/#foreach] } } // namespace ${Package}::${Module} #endif // #ifndef _${PACKAGE}_${MODULE}_${MODEL}_H_
template: Model.cpp.ftl
[#assign entity = bidji.entity] #include "${Model}.h" using namespace ${Package}::${Module}; ${Model}::${Model}() [#foreach property in entity.property] [#if property.@type == 'int'] , _${property.@name}(-1) [#elseif property.@type == 'string'] , _${property.@name}("") [#else] , _${property.@name}() [/#if] [/#foreach] { } ${Model}::~${Model}() { } [#foreach property in entity.property] void ${Model}::set${property.@name?cap_first}(const ${property.@type} & ${property.@name}) { this->_${property.@name} = ${property.@name}; } [/#foreach]
models: MyPackage/MyModule/(Foo|Baz).bidjim
<?xml version="1.0"?> <bidji> <entity name="Foo"> <property name="id" type="int" /> <property name="name" type="string" /> </entity> </bidji>
result: Foo.h
#ifndef _MYPACKAGE_MYMODULE_FOO_H_ #define _MYPACKAGE_MYMODULE_FOO_H_ namespace MyPackage { namespace MyModule { class Foo { private: int _id; string _name; public: Foo(); virtual ~Foo(); public: void setId(const int & id); const int & getId() const; void setName(const string & name); const string & getName() const; }; // class Foo inline const int & Foo::getId() const { return _id; } inline const string & Foo::getName() const { return _name; } } } // namespace MyPackage::MyModule #endif // #ifndef _MYPACKAGE_MYMODULE_FOO_H_
result: Foo.cpp
#include "Foo.h" using namespace MyPackage::MyModule; Foo::Foo() , _id(-1) , _name("") { } Foo::~Foo() { } void Foo::setId(const int & id) { this->_id = id; } void Foo::setName(const string & name) { this->_name = name; }