<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.7">
  <classes>
    <class id="InterfaceConnector" _delta="define">
      <parent>Typology</parent>
      <properties>
        <category>bizmodel,searchable,configmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>interfaceconnector</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <format>%1$s</format>
          <attributes>
            <attribute id="name"/>
          </attributes>
        </naming>
        <icon/>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
          </attributes>
        </reconciliation>
        <uniqueness_rules>
          <rule id="name">
            <attributes>
              <attribute id="name"/>
            </attributes>
            <filter/>
            <disabled>false</disabled>
            <is_blocking>true</is_blocking>
          </rule>
        </uniqueness_rules>
      </properties>
      <fields>
        <field id="description" xsi:type="AttributeText">
          <sql>description</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="physicalinterfaces_list" xsi:type="AttributeLinkedSet">
          <linked_class>PhysicalInterface</linked_class>
          <ext_key_to_me>interfaceconnector_id</ext_key_to_me>
          <edit_mode>none</edit_mode>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <duplicates/>
        </field>
      </fields>
      <methods/>
      <presentation>
        <details>
          <items>
            <item id="physicalinterfaces_list">
              <rank>10</rank>
            </item>
            <item id="name">
              <rank>20</rank>
            </item>
            <item id="description">
              <rank>30</rank>
            </item>
          </items>
        </details>
        <list>
          <items>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </list>
        <default_search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </default_search>
        <search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </search>
      </presentation>
    </class>
    <class id="Layer2Protocol" _delta="define">
      <parent>Typology</parent>
      <properties>
        <category>bizmodel,searchable,configmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>layer2protocol</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <attributes>
            <attribute id="name"/>
          </attributes>
        </naming>
        <icon/>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
          </attributes>
        </reconciliation>
        <uniqueness_rules>
          <rule id="name">
            <attributes>
              <attribute id="name"/>
            </attributes>
            <filter/>
            <disabled>false</disabled>
            <is_blocking>true</is_blocking>
          </rule>
        </uniqueness_rules>
      </properties>
      <fields>
        <field id="description" xsi:type="AttributeText">
          <sql>description</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="ipinterfaces_list" xsi:type="AttributeLinkedSet">
          <linked_class>IPInterface</linked_class>
          <ext_key_to_me>layer2protocol_id</ext_key_to_me>
          <edit_mode>none</edit_mode>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <duplicates/>
        </field>
      </fields>
      <methods/>
      <presentation>
        <details>
          <items>
            <item id="ipinterfaces_list">
              <rank>10</rank>
            </item>
            <item id="name">
              <rank>20</rank>
            </item>
            <item id="description">
              <rank>30</rank>
            </item>
          </items>
        </details>
        <list>
          <items>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </list>
        <default_search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </default_search>
        <search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </search>
      </presentation>
    </class>
    <class id="InterfaceSpeed" _delta="define">
      <parent>Typology</parent>
      <properties>
        <category>bizmodel,searchable,configmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>interfacespeed</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <attributes>
            <attribute id="name"/>
          </attributes>
        </naming>
        <icon/>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
          </attributes>
        </reconciliation>
        <uniqueness_rules>
          <rule id="name">
            <attributes>
              <attribute id="name"/>
            </attributes>
            <filter/>
            <disabled>false</disabled>
            <is_blocking>true</is_blocking>
          </rule>
        </uniqueness_rules>
      </properties>
      <fields>
        <field id="description" xsi:type="AttributeText">
          <sql>description</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="ipinterfaces_list" xsi:type="AttributeLinkedSet">
          <linked_class>IPInterface</linked_class>
          <ext_key_to_me>interfacespeed_id</ext_key_to_me>
          <edit_mode>none</edit_mode>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <duplicates/>
        </field>
      </fields>
      <methods/>
      <presentation>
        <details>
          <items>
            <item id="ipinterfaces_list">
              <rank>10</rank>
            </item>
            <item id="name">
              <rank>20</rank>
            </item>
            <item id="description">
              <rank>30</rank>
            </item>
          </items>
        </details>
        <list>
          <items>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </list>
        <default_search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </default_search>
        <search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="description">
              <rank>20</rank>
            </item>
          </items>
        </search>
      </presentation>
    </class>
    <class id="IPInterface" _delta="must_exist">
      <fields>
        <field id="speed" xsi:type="AttributeDecimal" _delta="delete"/>
        <field id="interfacespeed_id" xsi:type="AttributeExternalKey" _delta="define">
          <sql>interfacespeed_id</sql>
          <target_class>InterfaceSpeed</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="interfacespeed_name" xsi:type="AttributeExternalField" _delta="define">
          <extkey_attcode>interfacespeed_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="layer2protocol_id" xsi:type="AttributeExternalKey" _delta="define">
          <sql>layer2protocol_id</sql>
          <target_class>Layer2Protocol</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="layer2protocol_name" xsi:type="AttributeExternalField" _delta="define">
          <extkey_attcode>layer2protocol_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
      </fields>
      <presentation>
        <details>
          <items>
            <item id="speed" _delta="delete"/>
          </items>
        </details>
        <list>
          <items>
            <item id="speed" _delta="delete"/>
            <item id="interfacespeed_id" _delta="define">
              <rank>70</rank>
            </item>
            <item id="layer2protocol_id" _delta="define">
              <rank>80</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="PhysicalInterface" _delta="must_exist">
      <fields>
        <field id="interfaceconnector_id" xsi:type="AttributeExternalKey" _delta="define">
          <sql>interfaceconnector_id</sql>
          <target_class>InterfaceConnector</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="interfaceconnector_name" xsi:type="AttributeExternalField" _delta="define">
          <extkey_attcode>interfaceconnector_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="aggregatelink_id" xsi:type="AttributeExternalKey" _delta="define">
          <sql>aggregatelink_id</sql>
          <target_class>AggregateLink</target_class>
          <filter><![CDATA[SELECT AggregateLink WHERE connectableci_id = :this->connectableci_id]]></filter>
          <dependencies>
            <attribute id="connectableci_id"/>
          </dependencies>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="aggregatelink_name" xsi:type="AttributeExternalField" _delta="define">
          <extkey_attcode>aggregatelink_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
      </fields>
      <presentation>
        <details>
          <items>
            <item id="col:col1" _delta="must_exist">
              <items>
                <item id="fieldset:Class:NetworkInterface:baseinfo" _delta="must_exist">
                  <items>
                    <item id="aggregatelink_id" _delta="define">
                      <rank>35</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="col:col2" _delta="must_exist">
              <items>
                <item id="fieldset:Class:NetworkInterface:moreinfo" _delta="must_exist">
                  <items>
                    <item id="speed" _delta="delete"/>
                    <item id="interfacespeed_id" _delta="define">
                      <rank>20</rank>
                    </item>
                    <item id="layer2protocol_id" _delta="define">
                      <rank>30</rank>
                    </item>
                    <item id="interfaceconnector_id" _delta="define">
                      <rank>40</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
          </items>
        </details>
        <default_search>
          <items>
            <item id="interfacespeed_id" _delta="define">
              <rank>50</rank>
            </item>
          </items>
        </default_search>
        <list>
          <items>
            <item id="speed" _delta="delete"/>
            <item id="interfacespeed_id" _delta="define">
              <rank>10</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="NetworkDeviceVirtualInterface" _delta="must_exist">
      <presentation>
        <details>
          <items>
            <item id="col:col2" _delta="must_exist">
              <items>
                <item id="fieldset:Class:NetworkInterface:moreinfo" _delta="must_exist">
                  <items>
                    <item id="speed" _delta="delete"/>
                    <item id="interfacespeed_id" _delta="define">
                      <rank>20</rank>
                    </item>
                    <item id="layer2protocol_id" _delta="define">
                      <rank>30</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
          </items>
        </details>
        <default_search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="status">
              <rank>20</rank>
            </item>
            <item id="macaddress">
              <rank>30</rank>
            </item>
            <item id="networkdevice_id">
              <rank>40</rank>
            </item>
          </items>
        </default_search>
        <list>
          <items>
            <item id="speed" _delta="delete"/>
            <item id="interfacespeed_id" _delta="define">
              <rank>40</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="NetworkDeviceComponent" _delta="define">
      <parent>PhysicalDevice</parent>
      <properties>
        <category>bizmodel,searchable,configmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>networkdevicecomponent</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <attributes>
            <attribute id="name"/>
            <attribute id="networkdevice_name"/>
          </attributes>
        </naming>
        <icon>asset/img/icons8-slave-48.png</icon>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
            <attribute id="networkdevice_id"/>
            <attribute id="networkdevice_name"/>
          </attributes>
        </reconciliation>
        <uniqueness_rules/>
      </properties>
      <fields>
        <field id="networkdevice_id" xsi:type="AttributeExternalKey">
          <sql>networkdevice_id</sql>
          <target_class>NetworkDevice</target_class>
          <filter><![CDATA[SELECT NetworkDevice WHERE org_id = :this->org_id]]></filter>
          <dependencies>
            <attribute id="org_id"/>
          </dependencies>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="networkdevice_name" xsi:type="AttributeExternalField">
          <extkey_attcode>networkdevice_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
      </fields>
      <methods/>
      <presentation>
        <details>
          <items>
            <item id="contacts_list">
              <rank>10</rank>
            </item>
            <item id="documents_list">
              <rank>20</rank>
            </item>
            <item id="col:col1">
              <rank>40</rank>
              <items>
                <item id="fieldset:Class:NetworkDeviceComponent:baseinfo">
                  <rank>10</rank>
                  <items>
                    <item id="name">
                      <rank>10</rank>
                    </item>
                    <item id="org_id">
                      <rank>20</rank>
                    </item>
                    <item id="status">
                      <rank>30</rank>
                    </item>
                    <item id="business_criticity">
                      <rank>40</rank>
                    </item>
                    <item id="location_id">
                      <rank>50</rank>
                    </item>
                    <item id="networkdevice_id">
                      <rank>60</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Class:NetworkDeviceComponent:moreinfo">
                  <rank>20</rank>
                  <items>
                    <item id="brand_id">
                      <rank>10</rank>
                    </item>
                    <item id="model_id">
                      <rank>20</rank>
                    </item>
                    <item id="serialnumber">
                      <rank>30</rank>
                    </item>
                    <item id="asset_number">
                      <rank>40</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="col:col2">
              <rank>130</rank>
              <items>
                <item id="fieldset:Class:NetworkDeviceComponent:Date">
                  <rank>10</rank>
                  <items>
                    <item id="move2production">
                      <rank>10</rank>
                    </item>
                    <item id="purchase_date">
                      <rank>20</rank>
                    </item>
                    <item id="end_of_warranty">
                      <rank>30</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Class:NetworkDeviceComponent:otherinfo">
                  <rank>30</rank>
                  <items>
                    <item id="description">
                      <rank>10</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
          </items>
        </details>
        <search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="status">
              <rank>30</rank>
            </item>
            <item id="business_criticity">
              <rank>40</rank>
            </item>
            <item id="location_id">
              <rank>50</rank>
            </item>
            <item id="brand_id">
              <rank>60</rank>
            </item>
            <item id="model_id">
              <rank>70</rank>
            </item>
            <item id="serialnumber">
              <rank>80</rank>
            </item>
            <item id="asset_number">
              <rank>90</rank>
            </item>
            <item id="move2production">
              <rank>120</rank>
            </item>
            <item id="purchase_date">
              <rank>130</rank>
            </item>
            <item id="end_of_warranty">
              <rank>140</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
            <item id="org_id">
              <rank>10</rank>
            </item>
            <item id="status">
              <rank>20</rank>
            </item>
            <item id="business_criticity">
              <rank>30</rank>
            </item>
            <item id="location_id">
              <rank>40</rank>
            </item>
            <item id="brand_id">
              <rank>50</rank>
            </item>
            <item id="model_id">
              <rank>60</rank>
            </item>
            <item id="serialnumber">
              <rank>70</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="ClusterNetwork" _delta="define">
      <parent>FunctionalCI</parent>
      <properties>
        <category>bizmodel,searchable,configmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>clusternetwork</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <attributes>
            <attribute id="name"/>
          </attributes>
        </naming>
        <icon>asset/img/icons8-stack.png</icon>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
            <attribute id="org_id"/>
            <attribute id="organization_name"/>
          </attributes>
        </reconciliation>
        <uniqueness_rules/>
      </properties>
      <fields>
        <field id="status" xsi:type="AttributeEnum">
          <values>
            <value id="production">production</value>
            <value id="implementation">implementation</value>
          </values>
          <sql>status</sql>
          <default_value>production</default_value>
          <is_null_allowed>true</is_null_allowed>
          <display_style>list</display_style>
        </field>
        <field id="type" xsi:type="AttributeEnum">
          <values>
            <value id="loadbalancing">loadbalancing</value>
            <value id="highavailability">highavailability</value>
            <value id="highperformance">highperformance</value>
          </values>
          <sql>type</sql>
          <default_value></default_value>
          <is_null_allowed>true</is_null_allowed>
          <display_style>list</display_style>
        </field>
        <field id="mode" xsi:type="AttributeEnum">
          <values>
            <value id="active_standby">active_standby</value>
            <value id="active_passive">active_passive</value>
            <value id="active_active">active_active</value>
          </values>
          <sql>mode</sql>
          <default_value></default_value>
          <is_null_allowed>true</is_null_allowed>
          <display_style>list</display_style>
        </field>
        <field id="networkdevices_list" xsi:type="AttributeLinkedSet">
          <linked_class>NetworkDevice</linked_class>
          <ext_key_to_me>clusternetwork_id</ext_key_to_me>
          <edit_mode>add_remove</edit_mode>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <duplicates/>
        </field>
        <field id="ips_list" xsi:type="AttributeLinkedSetIndirect">
          <linked_class>lnkClusterNetworkToIPAddress</linked_class>
          <ext_key_to_me>clusternetwork_id</ext_key_to_me>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <ext_key_to_remote>ipaddress_id</ext_key_to_remote>
          <duplicates/>
        </field>
        <field id="redundancy" xsi:type="AttributeRedundancySettings">
          <sql>redundancy</sql>
          <relation_code>impacts</relation_code>
          <from_class>NetworkDevice</from_class>
          <neighbour_id>clusternetwork</neighbour_id>
          <enabled>true</enabled>
          <enabled_mode>user</enabled_mode>
          <min_up>1</min_up>
          <min_up_type>count</min_up_type>
          <min_up_mode>user</min_up_mode>
        </field>
      </fields>
      <methods>
        <method id="DisplayBareRelations" _delta="define">
          <comment/>
          <static>false</static>
          <access>public</access>
          <type>Custom</type>
          <code><![CDATA[ public function DisplayBareRelations(WebPage $oP, $bEditMode = false)
    {
        // Execute parent function first
        parent::DisplayBareRelations($oP, $bEditMode);

        if (!$bEditMode)
        {
           // Search for ConnectableCIs linked to NetworkDevices that make the cluster
            $sOQL = "SELECT ConnectableCI AS c JOIN lnkConnectableCIToNetworkDevice AS l ON l.connectableci_id = c.id JOIN NetworkDevice AS nd ON l.networkdevice_id = nd.id JOIN ClusterNetwork AS cn ON nd.clusternetwork_id = cn.id WHERE cn.id = :id AND l.connection_type='downlink'";
            $oConnectableCIsSet =  new CMDBObjectSet(DBObjectSearch::FromOQL($sOQL), array(), array('id' => $this->GetKey()));
            $sName = Dict::S('Class:ClusterNetwork/Tab:connectablecis_list');
            $sTitle = Dict::S('Class:ClusterNetwork/Tab:connectablecis_list+');
            TeemIp\TeemIp\Extension\Framework\Helper\IPUtils::DisplayTabContent($oP, $sName, 'connectable_cis', 'ConnectableCI', $sTitle, '', $oConnectableCIsSet);
       }
    }]]></code>
        </method>
      </methods>
      <relations>
        <relation id="impacts">
          <neighbours>
            <neighbour id="connectableci">
              <query_up>SELECT ClusterNetwork AS cn JOIN NetworkDevice AS nd ON nd.clusternetwork_id = cn.id JOIN lnkConnectableCIToNetworkDevice AS l ON l.networkdevice_id = nd.id WHERE l.connectableci_id = :this->id AND l.connection_type='downlink'</query_up>
              <query_down>SELECT ConnectableCI AS c JOIN lnkConnectableCIToNetworkDevice AS l ON l.connectableci_id = c.id JOIN NetworkDevice AS nd ON l.networkdevice_id = nd.id JOIN ClusterNetwork AS cn ON nd.clusternetwork_id = cn.id WHERE cn.id = :this->id AND l.connection_type='downlink'</query_down>
            </neighbour>
          </neighbours>
        </relation>
      </relations>
      <presentation>
        <details>
          <items>
            <item id="contacts_list">
              <rank>10</rank>
            </item>
            <item id="documents_list">
              <rank>20</rank>
            </item>
            <item id="applicationsolution_list">
              <rank>35</rank>
            </item>
            <item id="networkdevices_list">
              <rank>50</rank>
            </item>
            <item id="ips_list">
              <rank>60</rank>
            </item>
            <item id="col:col1">
              <rank>90</rank>
              <items>
                <item id="fieldset:Class:ClusterNetwork:baseinfo">
                  <rank>10</rank>
                  <items>
                    <item id="name">
                      <rank>10</rank>
                    </item>
                    <item id="org_id">
                      <rank>20</rank>
                    </item>
                    <item id="status">
                      <rank>30</rank>
                    </item>
                    <item id="business_criticity">
                      <rank>40</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Class:ClusterNetwork:moreinfo">
                  <rank>20</rank>
                  <items>
                    <item id="type">
                      <rank>10</rank>
                    </item>
                    <item id="mode">
                      <rank>20</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="col:col2">
              <rank>110</rank>
              <items>
                <item id="fieldset:Class:ClusterNetwork:Date">
                  <rank>10</rank>
                  <items>
                    <item id="move2production">
                      <rank>10</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Class:ClusterNetwork:otherinfo">
                  <rank>30</rank>
                  <items>
                    <item id="description">
                      <rank>10</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
          </items>
        </details>
        <search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="status">
              <rank>30</rank>
            </item>
            <item id="business_criticity">
              <rank>40</rank>
            </item>
            <item id="type">
              <rank>60</rank>
            </item>
            <item id="mode">
              <rank>70</rank>
            </item>
            <item id="move2production">
              <rank>80</rank>
            </item>
          </items>
        </search>
        <default_search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="status">
              <rank>30</rank>
            </item>
            <item id="business_criticity">
              <rank>40</rank>
            </item>
            <item id="type">
              <rank>60</rank>
            </item>
            <item id="mode">
              <rank>70</rank>
            </item>
            <item id="move2production">
              <rank>80</rank>
            </item>
          </items>
        </default_search>
        <list>
          <items>
            <item id="org_id">
              <rank>10</rank>
            </item>
            <item id="status">
              <rank>20</rank>
            </item>
            <item id="business_criticity">
              <rank>30</rank>
            </item>
            <item id="type">
              <rank>50</rank>
            </item>
            <item id="mode">
              <rank>60</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="lnkClusterNetworkToIPAddress" _delta="define">
      <parent>cmdbAbstractObject</parent>
      <properties>
        <is_link>1</is_link>
        <category>bizmodel,ipmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>lnkclusternetworktoipaddress</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <format>%1$s %2$s</format>
          <attributes>
            <attribute id="clusternetwork_id"/>
            <attribute id="ipaddress_id"/>
          </attributes>
        </naming>
        <icon/>
        <reconciliation>
          <attributes>
            <attribute id="clusternetwork_id"/>
            <attribute id="ipaddress_id"/>
          </attributes>
        </reconciliation>
      </properties>
      <fields>
        <field id="clusternetwork_id" xsi:type="AttributeExternalKey">
          <sql>clusternetwork_id</sql>
          <target_class>ClusterNetwork</target_class>
          <is_null_allowed>false</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
          <jointype/>
        </field>
        <field id="clusternetwork_name" xsi:type="AttributeExternalField">
          <extkey_attcode>clusternetwork_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="ipaddress_id" xsi:type="AttributeExternalKey">
          <sql>ipaddress_id</sql>
          <target_class>IPAddress</target_class>
          <is_null_allowed>false</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
          <jointype/>
        </field>
        <field id="usage_id" xsi:type="AttributeExternalField" _delta="define">
          <extkey_attcode>ipaddress_id</extkey_attcode>
          <target_attcode>usage_id</target_attcode>
        </field>
      </fields>
      <methods>
        <method id="AfterInsert" _delta="define">
          <comment/>
          <static>false</static>
          <access>public</access>
          <type>Custom</type>
          <code><![CDATA[ public function AfterInsert()
    {
        // Execute parent function first
        parent::AfterInsert();

		    IPAddress::SetStatusOnAttachment($this->Get('ipaddress_id'));
    }]]></code>
        </method>
        <method id="AfterDelete" _delta="define">
          <comment/>
          <static>false</static>
          <access>public</access>
          <type>Custom</type>
          <code><![CDATA[ public function AfterDelete()
    {
        // Execute parent function first
        parent::AfterDelete();

		    IPAddress::SetStatusOnDetachment($this->Get('ipaddress_id'));
    }]]></code>
        </method>
      </methods>
      <presentation>
        <details>
          <items>
            <item id="clusternetwork_id">
              <rank>10</rank>
            </item>
            <item id="ipaddress_id">
              <rank>20</rank>
            </item>
          </items>
        </details>
        <search>
          <items>
            <item id="clusternetwork_id">
              <rank>10</rank>
            </item>
            <item id="ipaddress_id">
              <rank>20</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
            <item id="clusternetwork_id">
              <rank>10</rank>
            </item>
            <item id="ipaddress_id">
              <rank>20</rank>
            </item>
            <item id="usage_id">
              <rank>30</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="NetworkDevice" _delta="must_exist">
      <fields>
        <field id="clusternetwork_id" xsi:type="AttributeExternalKey" _delta="define">
          <sql>clusternetwork_id</sql>
          <target_class>ClusterNetwork</target_class>
          <filter><![CDATA[SELECT ClusterNetwork WHERE org_id = :this->org_id]]></filter>
          <dependencies>
            <attribute id="org_id"/>
          </dependencies>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="clusternetwork_name" xsi:type="AttributeExternalField" _delta="define">
          <extkey_attcode>clusternetwork_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="clusternetwork_role" xsi:type="AttributeEnum" _delta="define">
          <values>
            <value id="active">active</value>
            <value id="standby">standby</value>
          </values>
          <sql>clusternetwork_role</sql>
          <default_value></default_value>
          <is_null_allowed>true</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="networkdevicecomponents_list" xsi:type="AttributeLinkedSet" _delta="define">
          <linked_class>NetworkDeviceComponent</linked_class>
          <ext_key_to_me>networkdevice_id</ext_key_to_me>
          <edit_mode>add_remove</edit_mode>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <duplicates/>
        </field>
        <field id="aggregatelinks_list" xsi:type="AttributeLinkedSet" _delta="define">
          <linked_class>AggregateLink</linked_class>
          <ext_key_to_me>connectableci_id</ext_key_to_me>
          <edit_mode>add_remove</edit_mode>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <duplicates/>
        </field>
      </fields>
      <relations>
        <relation id="impacts">
          <neighbours>
            <neighbour id="clusternetwork" _delta="define">
              <attribute>clusternetwork_id</attribute>
            </neighbour>
            <neighbour id="connectableci" _delta="redefine">
             <query_down>SELECT ConnectableCI AS d JOIN lnkConnectableCIToNetworkDevice AS l1 ON l1.connectableci_id = d.id JOIN NetworkDevice AS nd ON l1.networkdevice_id = nd.id WHERE nd.id = :this->id AND l1.connection_type='downlink' AND nd.id NOT IN (SELECT NetworkDevice AS nd WHERE nd.clusternetwork_id != 0)</query_down>
             <query_up>SELECT NetworkDevice AS nw JOIN lnkConnectableCIToNetworkDevice AS l1 ON l1.networkdevice_id = nw.id WHERE l1.connectableci_id = :this->id AND l1.connection_type='downlink' AND nw.clusternetwork_id =0</query_up>
           </neighbour>
          </neighbours>
        </relation>
      </relations>
      <presentation>
        <details>
          <items>
            <item id="networkdevicecomponents_list" _delta="define">
              <rank>35</rank>
            </item>
            <item id="aggregatelinks_list" _delta="define">
              <rank>47</rank>
            </item>
            <item id="col:col1" _delta="must_exist">
              <items>
                <item id="fieldset:Server:baseinfo" _delta="must_exist">
                  <items>
                    <item id="clusternetwork_id" _delta="define">
                      <rank>80</rank>
                    </item>
                    <item id="clusternetwork_role" _delta="define">
                      <rank>90</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
          </items>
        </details>
        <list>
          <items>
            <item id="clusternetwork_role" _delta="define">
              <rank>200</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="Model" _delta="must_exist">
      <fields>
        <field id="type" xsi:type="AttributeEnum" _delta="must_exist">
          <values _delta="must_exist">
            <value id="NetworkDeviceComponent" _delta="define">NetworkDeviceComponent</value>
          </values>
        </field>
      </fields>
    </class>
    <class id="AggregateLink" _delta="define">
      <parent>NetworkInterface</parent>
      <properties>
        <category>bizmodel,searchable,configmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>aggregatelink</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <attributes>
            <attribute id="name"/>
            <attribute id="connectableci_name"/>
          </attributes>
        </naming>
        <icon>asset/img/icons8-bursts-48.png</icon>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
            <attribute id="connectableci_id"/>
            <attribute id="connectableci_name"/>
          </attributes>
        </reconciliation>
        <uniqueness_rules/>
      </properties>
      <fields>
        <field id="macaddress" xsi:type="AttributeMacAddress">
          <sql>macaddress</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="layer2protocol_id" xsi:type="AttributeExternalKey">
          <sql>layer2protocol_id</sql>
          <target_class>Layer2Protocol</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="layer2protocol_name" xsi:type="AttributeExternalField">
          <extkey_attcode>layer2protocol_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="status" xsi:type="AttributeEnum">
          <values>
            <value id="active">active</value>
            <value id="inactive">inactive</value>
          </values>
          <sql>status</sql>
          <default_value>active</default_value>
          <is_null_allowed>true</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="description" xsi:type="AttributeText">
          <sql>description</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="connectableci_id" xsi:type="AttributeExternalKey">
          <sql>connectableci_id</sql>
          <target_class>ConnectableCI</target_class>
          <filter><![CDATA[SELECT ConnectableCI WHERE finalclass IN ('NetworkDevice')]]></filter>
          <dependencies/>
          <is_null_allowed>false</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="connectableci_name" xsi:type="AttributeExternalField">
          <extkey_attcode>connectableci_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="peer_id" xsi:type="AttributeExternalKey">
          <sql>peer_id</sql>
          <target_class>AggregateLink</target_class>
          <filter><![CDATA[SELECT AggregateLink WHERE id != :this->id AND peer_id = 0]]></filter>
          <dependencies/>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="peer_name" xsi:type="AttributeExternalField">
          <extkey_attcode>peer_id</extkey_attcode>
          <target_attcode>friendlyname</target_attcode>
        </field>
        <field id="physicalinterfaces_list" xsi:type="AttributeLinkedSet">
          <linked_class>PhysicalInterface</linked_class>
          <ext_key_to_me>aggregatelink_id</ext_key_to_me>
          <edit_mode>add_remove</edit_mode>
          <count_min>0</count_min>
          <count_max>0</count_max>
          <duplicates/>
        </field>
      </fields>
      <methods>
        <method id="AfterInsert" _delta="define">
          <comment/>
          <static>false</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[	public function AfterInsert()
    {
        parent::AfterInsert();

        $iPeerId = $this->Get('peer_id');
        if ($iPeerId > 0)
        {
            $oPeer = MetaModel::GetObject('AggregateLink', $iPeerId, false);
            if (!is_null($oPeer))
            {
                $oPeer->Set('peer_id', $this->GetKey());
                $oPeer->DBUpdate();
            }
        }
	}]]></code>
        </method>
        <method id="AfterUpdate" _delta="define">
          <comment/>
          <static>false</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[	public function AfterUpdate()
    {
        parent::AfterUpdate();

		$aListChanges = $this->ListPreviousValuesForUpdatedAttributes();
        if (array_key_exists('peer_id', $aListChanges))
        {
            // Reset peer on old remote
            $iPreviousPeerId = $aListChanges['peer_id'];
            if ($iPreviousPeerId > 0)
            {
                $oPreviousPeer = MetaModel::GetObject('AggregateLink', $iPreviousPeerId, false);
                if (!is_null($oPreviousPeer))
                {
                    $oPreviousPeer->Set('peer_id', 0);
                    $oPreviousPeer->DBUpdate();
                }
            }
            // Set peeron new remote
            $iPeerId = $this->Get('peer_id');
            if ($iPeerId > 0)
            {
                $oPeer = MetaModel::GetObject('AggregateLink', $iPeerId, false);
                if (!is_null($oPeer))
                {
                    $oPeer->Set('peer_id', $this->GetKey());
                    $oPeer->DBUpdate();
                }
            }
        }
	}]]></code>
        </method>
        <method id="AfterDelete" _delta="define">
          <comment/>
          <static>false</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[	public function AfterDelete()
    {
        parent::AfterDelete();

        $iPeerId = $this->Get('peer_id');
        if ($iPeerId > 0)
        {
            $oPeer = MetaModel::GetObject('AggregateLink', $iPeerId, false);
            if (!is_null($oPeer))
            {
                $oPeer->Set('peer_id', 0);
                $oPeer->DBUpdate();
            }
        }
	}]]></code>
        </method>
        <method id="GetAttributeParams" _delta="define">
          <comment/>
          <static>false</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[	public function GetAttributeParams($sAttCode)
    {
        if ($sAttCode == 'macaddress')
	    {
			return('colons');
	    }
	    return '';
	}]]></code>
        </method>
      </methods>
      <presentation>
        <details>
          <items>
          <item id="physicalinterfaces_list">
            <rank>10</rank>
          </item>
          <item id="col:col1">
            <rank>20</rank>
            <items>
              <item id="fieldset:Class:AggregateLink:baseinfo">
                <rank>10</rank>
                <items>
                  <item id="name">
                    <rank>20</rank>
                  </item>
                  <item id="macaddress">
                    <rank>30</rank>
                  </item>
                  <item id="layer2protocol_id">
                    <rank>40</rank>
                  </item>
                  <item id="status">
                    <rank>50</rank>
                  </item>
                  <item id="connectableci_id">
                    <rank>60</rank>
                  </item>
                  <item id="peer_id">
                    <rank>70</rank>
                  </item>
                  <item id="description">
                    <rank>80</rank>
                  </item>
                </items>
              </item>
            </items>
          </item>
        </items>
        </details>
        <list>
          <items>
            <item id="macaddress">
              <rank>10</rank>
            </item>
            <item id="layer2protocol_id">
              <rank>20</rank>
            </item>
            <item id="status">
              <rank>30</rank>
            </item>
            <item id="connectableci_id">
              <rank>40</rank>
            </item>
            <item id="peer_id">
              <rank>50</rank>
            </item>
          </items>
        </list>
        <default_search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="macaddress">
              <rank>20</rank>
            </item>
            <item id="layer2protocol_id">
              <rank>30</rank>
            </item>
            <item id="status">
              <rank>40</rank>
            </item>
          </items>
        </default_search>
        <search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="macaddress">
              <rank>20</rank>
            </item>
            <item id="layer2protocol_id">
              <rank>30</rank>
            </item>
            <item id="status">
              <rank>40</rank>
            </item>
          </items>
        </search>
      </presentation>
    </class>
    <class id="NetworkInterface" _created_in="itop-config-mgmt" _delta="must_exist">
      <fields>
        <field id="operational_status" xsi:type="AttributeMetaEnum" _delta="must_exist">
          <mappings>
            <mapping id="AggregateLink" _delta="define">
              <attcode>status</attcode>
              <metavalues>
                <metavalue id="active">
                  <values>
                    <value id="active"/>
                  </values>
                </metavalue>
                <metavalue id="inactive">
                  <values>
                    <value id="inactive"/>
                  </values>
                </metavalue>
              </metavalues>
            </mapping>
          </mappings>
        </field>
      </fields>
      <presentation>
        <details _delta="redefine">
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="operational_status">
              <rank>20</rank>
            </item>
          </items>
        </details>
        <default_search _delta="redefine">
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="operational_status">
              <rank>20</rank>
            </item>
          </items>
        </default_search>
        <search _delta="redefine">
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="operational_status">
              <rank>20</rank>
            </item>
          </items>
        </search>
        <list _delta="redefine">
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="operational_status">
              <rank>20</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="VLAN" _delta="must_exist">
      <fields>
        <field id="vlan_tag" xsi:type="AttributeInteger" _delta="redefine">
          <sql>vlan_tag</sql>
          <default_value/>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="name" xsi:type="AttributeString" _delta="define">
          <sql>name</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="type" xsi:type="AttributeEnum" _delta="define">
          <values>
            <value id="port_based">port_based</value>
            <value id="mac_based">mac_based</value>
            <value id="network_based">network_based</value>
            <value id="protocol_based">protocol_based</value>
          </values>
          <sql>type</sql>
          <default_value>network_based</default_value>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="status" xsi:type="AttributeEnum" _delta="define">
          <values>
            <value id="used">used</value>
            <value id="unused">unused</value>
            <value id="reserved">reserved</value>
          </values>
          <sql>status</sql>
          <default_value>used</default_value>
          <is_null_allowed>flase</is_null_allowed>
        </field>
      </fields>
      <presentation>
        <details _delta="redefine">
          <items>
            <item id="col:col1">
              <rank>10</rank>
              <items>
                <item id="fieldset:Class:VLAN:baseinfo">
                  <rank>10</rank>
                  <items>
                    <item id="vlan_tag">
                      <rank>10</rank>
                    </item>
                    <item id="name">
                      <rank>20</rank>
                    </item>
                    <item id="org_id">
                      <rank>30</rank>
                    </item>
                    <item id="status">
                      <rank>40</rank>
                    </item>
                    <item id="type">
                      <rank>50</rank>
                    </item>
                    <item id="description">
                      <rank>60</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="subnets_list">
              <rank>20</rank>
            </item>
            <item id="physicalinterfaces_list">
              <rank>30</rank>
            </item>
            <item id="networkdevicevirtualinterfaces_list">
              <rank>70</rank>
            </item>
          </items>
        </details>
        <default_search>
          <items>
            <item id="vlan_tag">
              <rank>10</rank>
            </item>
            <item id="name">
              <rank>20</rank>
            </item>
            <item id="org_id">
              <rank>30</rank>
            </item>
            <item id="status">
              <rank>40</rank>
            </item>
            <item id="type">
              <rank>50</rank>
            </item>
          </items>
        </default_search>
        <search>
          <items>
            <item id="vlan_tag">
              <rank>10</rank>
            </item>
            <item id="name">
              <rank>20</rank>
            </item>
            <item id="org_id">
              <rank>30</rank>
            </item>
            <item id="status">
              <rank>40</rank>
            </item>
            <item id="type">
              <rank>50</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="status">
              <rank>30</rank>
            </item>
            <item id="type">
              <rank>40</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
  </classes>
  <menus>
    <menu id="ConfigManagementOverview" xsi:type="DashboardMenuNode" _delta="must_exist">
      <definition>
        <cells>
          <cell id="0" _delta="must_exist">
            <dashlets>
              <dashlet id="teemip-00042" xsi:type="DashletBadge" _delta="define">
                <rank>4.2</rank>
               <class>NetworkDeviceComponent</class>
             </dashlet>
              <dashlet id="teemip-00043" xsi:type="DashletBadge" _delta="define">
                <rank>4.3</rank>
                <class>ClusterNetwork</class>
              </dashlet>
            </dashlets>
          </cell>
          <cell id="teemip-000" _delta="must_exist">
            <dashlets>
              <dashlet id="teemip-0115" xsi:type="DashletBadge" _delta="define">
                <rank>1.5</rank>
                <class>AggregateLink</class>
              </dashlet>
            </dashlets>
          </cell>
        </cells>
      </definition>
    </menu>
    <menu id="Typology" xsi:type="DashboardMenuNode" _delta="must_exist">
      <definition>
        <cells>
          <cell id="0" _delta="must_exist">
            <dashlets>
              <dashlet id="7" xsi:type="DashletBadge" _delta="delete_if_exists"/>
              <dashlet id="teemip-1003" xsi:type="DashletBadge" _delta="delete"/>
            </dashlets>
          </cell>
          <cell id="Network" _delta="define">
            <rank>10</rank>
            <dashlets>
              <dashlet id="teemip-1101" xsi:type="DashletHeaderStatic">
                <rank>0</rank>
                <title>Menu:NetworkMgmtExtended:Typology</title>
                <icon>teemip-ip-mgmt/asset/img/icons8-new-item.svg</icon>
              </dashlet>
              <dashlet id="teemip-1102" xsi:type="DashletBadge">
                <rank>1</rank>
                <class>NetworkDeviceType</class>
              </dashlet>
              <dashlet id="teemip-1103" xsi:type="DashletBadge">
                <rank>2</rank>
                <class>WANType</class>
              </dashlet>
              <dashlet id="teemip-1104" xsi:type="DashletBadge">
                <rank>3</rank>
                <class>InterfaceSpeed</class>
              </dashlet>
              <dashlet id="teemip-1105" xsi:type="DashletBadge">
                <rank>4</rank>
                <class>Layer2Protocol</class>
              </dashlet>
              <dashlet id="teemip-1106" xsi:type="DashletBadge">
                <rank>5</rank>
                <class>InterfaceConnector</class>
              </dashlet>
            </dashlets>
          </cell>
        </cells>
      </definition>
    </menu>
  </menus>
  <user_rights>
    <groups>
      <group id="Network" _delta="must_exist">
        <classes>
          <class id="AggregateLink"/>
          <class id="ClusterNetwork"/>
          <class id="InterfaceConnector"/>
          <class id="InterfaceSpeed"/>
          <class id="Layer2Protocol"/>
          <class id="NetworkDeviceComponent"/>
        </classes>
      </group>
    </groups>
  </user_rights>
</itop_design>
