Conditions
The Conditions Element
This element allows you to define conditions which can be used to dynamically change the installer, e.g. the panels shown, the variables set, files parsed, files executed and much more. When you define a condition it will get a type and an id. The id has to be unique. Conditions can be referenced based on this id (e.g. with the RefCondition).
When you define a set of conditions, you just have to write as many <condition> tags as you like.
Basic Condition Types
The following basic types of conditions can be used:
See the links for more details.
Using Conditions
Defining Conditions
<conditions> Element
Conditions are defined in the installation definition as nested <condition>
elements of the <conditions/>
element.
For example:
<condition> - Attributes
The following attributes must be set in a <condition> element definition:
Attribute | Usage |
---|---|
| The type of the condition. For built-in types, this is the lowercase portion of the condition class name without condition appended (variable,packselection,java, ...). Custom condition types should be referenced by the full qualified class name, e.g. de.dr.rules.MyCoolCondition. |
| The id of the condition. This will be used to refer to this conditions in other elements |
<condition> - Nested Elements
The condition element can have several child elements depending on the condition type. For instance, the VariableCondition has a name and value child element to specify, which variable should have a certain value to fullfil this condition.
Here is an example which defines four conditions, two VariableConditions, a JavaCondition and a AndCondition which will refer to two of the first conditions:
<conditions> <condition type="variable" id="standardinstallation"> <name>setup.type</name> <value>standard</value> </condition> <condition type="variable" id="expertinstallation"> <name>setup.type</name> <value>expert</value> </condition> <condition type="java" id="installonwindows"> <java> <class>com.izforge.izpack.util.OsVersion</class> <field>IS_WINDOWS</field> </java> <returnvalue type="boolean">true</returnvalue> </condition> <condition type="and" id="standardinstallation.onwindows"> <condition type="ref" refid="standardinstallation"/> <condition type="ref" refid="installonwindows" /> </condition> </conditions>
Referencing Conditions
Conditions are referenced as optional attributes of several other elements in a installation definition or from IzPack resources:
- as
condition
attribute - as
conditionid
attribute (for compatibility reasons of some tags)
Referencing A Number Of Conditions In One Expression
Simple Expression Language
From IzPack 3.11 on, you don't have to define compound conditions because you can use a simple expression language. The language supports the following operators:
+ | an operator for the And Condition |
| an operator for the Or Condition |
| an operator for the Xor Condition |
| an operator for the Not Condition |
These simple expressions DO NOT follow the usual boolean logic with precedence rules. Instead, they are evaluated left to right in a simple way.
Example:
!conditionA+conditionB+!conditionC
does not equal
(!conditionA) && conditionB && (!conditionC)
but is the same like
!(conditionA && (conditionB && !(conditionC)))
Example:
<dynamicvariables> <variable name="db.instance" value="MSSQLSERVER" checkonce="true" condition="useMssql+mssqlInstanceSelected+!haveDatabaseURL" /> </dynamicvariables>
Complex expression language
Beginning with IzPack 5.0, there is also the possibility to use a more complex expression language which evaluates based on boolean precedence rules, which is also reflected in the following table. The higher an operator is, the higher is its precedence.
^ | an operator for the Xor Conditon |
| an operator for the And Condition |
| an operator for the Or Condition |
| an operator for the Not Condition |
Example:
@!conditionA&&conditionB&&!conditionC
equals
(!conditionA) && conditionB && (!conditionC)
In order to use the complex expression language the expression must start with a '@
' character.
Example:
<dynamicvariables> <variable name="db.instance" value="MSSQLSERVER" checkonce="true" condition="@useMssql && !haveDatabaseURL && mssqlInstanceSelected" /> </dynamicvariables>
Because "&" is a reserved character in xml documents you have to use "&" instead!