How to use XML or JSON files to specify the objects to create and their wiring.
Wallaroo can load the description of your software from a configuration file, in XML or JSON format. You can use the file to specify the following:
Once you have a Catalog
object in your application, you can fill it by using the classes XmlConfiguration
or JsonConfiguration
.
To load a xml file:
Catalog catalog;
...
XmlConfiguration file( "wiring.xml" );
file.Fill( catalog );
...
catalog.CheckWiring(); // throws a WiringError exception if any collaborator is missing
To load a json file:
Catalog catalog;
...
JsonConfiguration file( "wiring.json" );
file.Fill( catalog );
...
catalog.CheckWiring(); // throws a WiringError exception if any collaborator is missing
If there are classes defined in shared libraries, you should load them by using the code:
// create file as XmlConfiguration or JsonConfiguration class
XmlConfiguration file( "myFile.xml" );
// or JsonConfiguration file( "myFile.json" );
...
file.LoadPlugins(); // load the shared libraries specified in configuration file
The XML file is composed by three sections:
plugins
) parts
) the objects wiring specification (tag wiring
)
<wallaroo></wallaroo>
<plugins>
...
</plugins>
<parts>
...
</parts>
<wiring>
...
</wiring>
If you want to load classes implemented in shared libraries you must write a section plugins
where you specify every shared library to load:
<plugins>
<shared>shared_lib_1</shared>
<shared>shared_lib_2</shared>
</plugins>
Please note that the library name does not include the file extension: wallaroo add the os specific extension (.dll on windows, .so on linux).
For each object you want to be created, you must write a section part
, where you specify the instance name (the id you will use to refer to this object) and the class of the object:
<part>
<name>object_name</name>
<class>class_name</class>
<attribute> <!-- optional -->
<name>attribute1_name</name>
<value>attribute1_value</value>
</attribute>
<attribute> <!-- optional -->
<name>attribute2_name</name>
<value>attribute2_value</value>
</attribute>
...
<parameter1> <!-- optional -->
<type>string</type>
<value>parameter_value</value>
</parameter1>
<parameter2> <!-- optional -->
<type>int</type>
<value>3</value>
</parameter2>
</part>
The parameter type currently supported are:
For each relation between the instances you created, you must write a section wire
, where you specify the two object you want to link (source and destination) and the name of the collaborator in the source object:
<wire>
<source>source_object</source>
<dest>dest_object</dest>
<collaborator>plut_in_source_object</collaborator>
</wire>
This is an example of a XML wiring file:
<wallaroo>
<plugins>
<shared>car</shared>
<shared>engine</shared>
</plugins>
<parts>
<part>
<name>ferrari_f430</name>
<class>Car</class>
<parameter1>
<type>string</type>
<value>red</value>
</parameter1>
</part>
<part>
<name>maserati_granturismo</name>
<class>Car</class>
<parameter1>
<type>string</type>
<value>black</value>
</parameter1>
</part>
<part>
<name>m139p</name>
<class>Engine</class>
</part>
<part>
<name>f136e</name>
<class>Engine</class>
</part>
</parts>
<wiring>
<wire>
<source>ferrari_f430</source>
<dest>f136e</dest>
<collaborator>mainEngine</collaborator>
</wire>
<wire>
<source>maserati_granturismo</source>
<dest>m139p</dest>
<collaborator>mainEngine</collaborator>
</wire>
</wiring>
</wallaroo>
At this page you can find the XML Schema of wallaroo xml wiring files: XmlSchema
The syntax of JSON file is equivalent to the XML one.
Follows an example of a JSON wiring file:
{
"wallaroo":
{
"plugins":
{
"shared": "car",
"shared": "engine"
},
"parts":
[
{
"name": "ferrari_f430",
"class": "Car",
"parameter1":
{
"type": "string",
"value": "red"
}
},
{
"name": "maserati_granturismo",
"class": "Car",
"parameter1":
{
"type": "string",
"value": "black"
}
},
{
"name": "m139p",
"class": "Engine"
},
{
"name": "f136e",
"class": "Engine"
}
],
"wiring":
[
{
"source": "ferrari_f430",
"dest": "f136e",
"collaborator": "mainEngine"
},
{
"source": "maserati_granturismo",
"dest": "m139p",
"collaborator": "mainEngine"
}
]
}
}
Wiki: GettingStarted
Wiki: TableOfContents
Wiki: Tutorial
Wiki: XmlSchema