Model files are used to describe a feature's configuration model, such as their properties, default values and constraints. In addition, in order to add support for a phone or a gateway, you have to create an information model for the device you want to manage.
Information model consist of settings, that are assembled in groups. Each group should consists of related settings. Groups can contain settings or other groups.
sipXconfig models are defined in XML files conforming to the setting.dtd file. The file can be found in the source directory:
"main/sipXconfig/neoconf/etc/ ".
In addition to internal properties of groups and settings, model definition contains also user visible elements such as labels and descriptions. In future it will be possible to localize all user visible element by providing standard I18n properties files.
Members of the same groups are presented to the end user on one screen. In future sipXconfig may provide independent screen defintion to allow for other layouts and presenting settings independent of their groups.
Property |
Type |
Description |
Required |
---|---|---|---|
name |
attribute |
internal group name - cannot be empty |
yes |
advanced |
attribute |
if set to true, marks the entire group to be non-essential and |
no (default: no) |
hidden |
attribute |
if set to true group should not be displayed by UI |
no (default: no) |
if |
attribute |
property that must be set to use this group (see Conditional settings) |
no |
unless |
attribute |
property that must not be set to use this group (see Conditional settings) |
no |
copy-of |
attribute |
The name of the group the current group is based on |
no |
label |
element |
user visible group label |
yes |
profileName |
element |
information used by module generating device configuration (profile) |
no |
description |
element |
user visible group description |
no |
setting |
element |
definition of the setting that belong to this group |
no |
group |
element |
definition of the group that belongs to this group |
no |
collection |
element |
definition of the collection of settings that belongs to this group |
no |
Example:
<setting name="SipUri"> <label>SIP URI</label> <value></value> <description>Identifier in SIP address</description> </setting> |
Property |
Type |
Description |
Required |
---|---|---|---|
name |
attribute |
internal setting name - cannot be empty |
yes |
advanced |
attribute |
if set to true UI will hint that the setting is advanced, |
no (default: no) |
hidden |
attribute |
if set to true it will not be displayed by UI |
no (default: no) |
if |
attribute |
property that must be set to use this group (see Conditional settings) |
no |
unless |
attribute |
property that must not be set to use this group (see Conditional settings) |
no |
copy-of |
attribute |
The internal name of the setting the current setting is copied from |
no |
label |
element |
user visible setting label |
no |
profileName |
element |
information used by module generating device configuration (profile) |
no |
type |
element |
setting type that determines how setting is presented and validated |
no - string is default type |
value |
element |
default value of this setting |
no - can be empty |
description |
element |
user visible setting description |
no |
Two separate setting models can share a settings or setting groups. A deep copy is made of a specified setting and variations can be defined.
<group name="human"> <group name="eat"> <setting name="hamburger"/> <group name="fruit"> <setting name="apple"/> </group> </group> </group> <group name="man" copy-of="/human"> <setting name="shave"> <value>face</value> </setting> </group> <group name="woman" copy-of="/human"> <setting name="shave"> <value>legs</value> </setting> <setting name="giveBirth"/> </group> |
Each setting describes a configuration property. A setting is of a particular setting type. The setting type controls how the property is displayed. For example, a string or integer setting type is displayed as a textfield and a boolean type is displayed as a checkbox. Setting types have a "required" flag to indicate if the setting is optional or not (except for boolean, enum and multi-enum types). The required flag is defaulted to "no". Below are descriptions of each supported setting types:
<string required="yes" minLen="5" maxLen="30"/> |
<string required="yes"/> <pattern>\d(1,4)[a-Z]*</pattern> </string> |
If string represents a password sipXconfig will render it using masked edit widget.
<string password="yes"/> |
<integer min="-17" max="42"> |
<real min="-17.15" max="42.23"> |
<ipaddr /> |
<hostname /> |
<enum> <option><label>Red</label><value>0xff0000</value></option> <option><label>Green</label><value>0x00ff00</value></option> <option><label>Blue</label><value>0x0000ff</value></option> </enum> |
<multi-enum> <option><label>Red</label><value>0xff0000</value></option> <option><label>Green</label><value>0x00ff00</value></option> <option><label>Blue</label><value>0x0000ff</value></option> </multi-enum> |
for this setting the value representing Red,Blue list will look like this:
<value>0xff0000|0x0000ff</value> |
<boolean> <true><value>Yes</value></true> <false><value>No</value></false> </boolean> |
<file required="yes" variable="yes"> <directory>/tmp</directory> <contentType>audio/x-wav</contentType> </file> |
<sip-uri userPartOnly="yes" /> |
You can define a setting type once and share it throughout your model. Declare your types you'd like to share with an "id" attribute, and reference it from where you'd normally use a setting type
Example, if you want "True" and "False" to be define for select values.
<type id="yes-no"> <boolean> <true><value>Yes</value></true> <false><value>No</value></false> </boolean> </type> <group name="candyPreferences"> <setting name="chocolate"> <type refid="yes-no"/> </setting> <setting name="taffy"> <type refid="yes-no"/> </setting> </group> |
Often times, a single settings XML file is shared by several device models. Because of this, some settings may not be applicable to particular models. To handle this situation, the
<group> |
and
<setting> |
elements provide two other attributes:
if |
and
unless |
, which take the name of a property as the condition. If the property specified in the
if |
attribute is defined, then the setting or group will be used. If the property specified in the
unless |
attribute is defined, then the setting or group will not be used.
Currently, only one property each may be specified for
if |
and
unless |
.
Some settings may only be applicable to a particular device model, or may not apply to a particular device model.
The model ID is automatically defined as a property of each model. This is usually the
id |
attribute value of a corresponding Spring bean. For example, the Polycom SoundStation IP 7000 is defined as:
<bean id="polycom7000" parent="polycomModel"> |
In this example case, the Polycom 7000 has a built-in property called "polycom7000" that we can use for conditional settings:
<!-- This setting will only be used in Polycom 7000s --> <setting name="setting1" if="polycom7000"> ... </setting> <!-- This setting will NOT be used for Polycom 7000s --> <setting name="setting2" unless="polycom7000"> ... </setting> |
Sometimes, a particular model may be too narrow of a restriction. On product lines with many different models, such as Polycom phones or AudioCodes gateways, many settings are tied to particular features which are supported on some subset of models.
All device models extending from
DeviceDescriptor |
have a
supportedFeatures |
property, which is a set of feature names. These feature names may then be used as properties in the
if |
and
unless |
attributes for settings and groups. The set of supported features are defined in the Spring bean corresponding to the model.
For example, the Polycom SoundStation IP 4000 is defined as follows in
polycom-models.beans.xml |
:
<bean id="polycom4000" parent="polycomModel"> <property name="label" value="Polycom SoundStation IP 4000" /> <property name="maxLineCount" value="1" /> <property name="supportedFeatures"> <set> <value>disableCallList</value> <value>voiceQualityMonitoring</value> </set> </property> </bean> |
The Polycom 4000 supports the "disableCallList" and "voiceQualityMonitoring" features. These features are checked in the conditional settings:
<group name="qualityMonitoring" if="voiceQualityMonitoring"> ... </group> ... <group name="feature"> <setting name="calllist" if="disableCallList"> ... </setting> </group> |
As the above example shows, the group
qualityMonitoring |
and the setting
calllist |
will be used for the Polycom 4000 and other models supporting these features, and not in others.