<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.7">
  <classes>
    <class id="IPApplication" _delta="define">
      <parent>FunctionalCI</parent>
      <php_parent>
        <name>TeemIp\TeemIp\Extension\Framework\Model\_IPApplication</name>
        <file>src/Model/_IPApplication.php</file>
      </php_parent>
      <properties>
        <category>bizmodel,searchable</category>
        <abstract>true</abstract>
        <db_table>ipapplication</db_table>
        <naming>
          <attributes>
            <attribute id="name"/>
          </attributes>
        </naming>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
            <attribute id="org_id"/>
          </attributes>
        </reconciliation>
      </properties>
      <fields>
        <field id="uuid" xsi:type="AttributeString">
          <sql>uuid</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
          <validation_pattern/>
        </field>
        <field id="status" xsi:type="AttributeEnum">
          <sql>status</sql>
          <values>
            <value id="production">production</value>
            <value id="implementation">implementation</value>
            <value id="obsolete">obsolete</value>
          </values>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
          <display_style>list</display_style>
          <dependencies/>
        </field>
        <field id="location_id" xsi:type="AttributeExternalKey">
          <sql>location_id</sql>
          <filter/>
          <dependencies/>
          <is_null_allowed>true</is_null_allowed>
          <target_class>Location</target_class>
          <on_target_delete>DEL_AUTO</on_target_delete>
        </field>
        <field id="location_name" xsi:type="AttributeExternalField">
          <extkey_attcode>location_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
      </fields>
      <methods/>
      <presentation>
        <details>
          <items>
            <item id="uuid">
              <rank>10</rank>
            </item>
            <item id="status">
              <rank>20</rank>
            </item>
            <item id="location_id">
              <rank>30</rank>
            </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="move2production">
              <rank>60</rank>
            </item>
            <item id="uuid">
              <rank>70</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
            <item id="org_id">
              <rank>10</rank>
            </item>
            <item id="status">
              <rank>20</rank>
            </item>
            <item id="location_id">
              <rank>30</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="IPConfig" _delta="define">
      <parent>cmdbAbstractObject</parent>
      <php_parent>
        <name>TeemIp\TeemIp\Extension\Framework\Model\_IPConfig</name>
        <file>src/Model/_IPConfig.php</file>
      </php_parent>
      <properties>
        <category>bizmodel,searchable,ipmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>ipconfig</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <format>%1$s</format>
          <attributes>
            <attribute id="name"/>
            <attribute id="org_name"/>
          </attributes>
        </naming>
        <icon>asset/img/icons8-maintenance-48.png</icon>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
            <attribute id="org_id"/>
            <attribute id="org_name"/>
          </attributes>
        </reconciliation>
      </properties>
      <fields>
        <!--  General information -->
        <field id="org_id" xsi:type="AttributeExternalKey">
          <sql>org_id</sql>
          <target_class>Organization</target_class>
          <is_null_allowed>false</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
          <jointype/>
        </field>
        <field id="org_name" xsi:type="AttributeExternalField">
          <extkey_attcode>org_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="name" xsi:type="AttributeString">
          <sql>name</sql>
          <default_value>IP Settings</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="requestor_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[SELECT Person AS p WHERE p.org_id = :this->org_id]]></filter>
          <dependencies>
            <attribute id="org_id"/>
          </dependencies>
          <sql>requestor_id</sql>
          <target_class>Person</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
          <jointype/>
        </field>
        <field id="requestor_name" xsi:type="AttributeExternalField">
          <extkey_attcode>requestor_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <!-- Settings for subnet blocks -->
        <field id="ipv4_block_min_size" xsi:type="AttributeInteger">
          <sql>ipv4_block_min_size</sql>
          <default_value>256</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="ipv6_block_min_prefix" xsi:type="AttributeEnum" _delta="define">
          <values>
            <value>48</value>
            <value>49</value>
            <value>50</value>
            <value>51</value>
            <value>52</value>
            <value>53</value>
            <value>54</value>
            <value>55</value>
            <value>56</value>
            <value>57</value>
            <value>58</value>
            <value>59</value>
            <value>60</value>
            <value>61</value>
            <value>62</value>
            <value>63</value>
            <value>64</value>
          </values>
          <sql>ipv6_block_min_prefix</sql>
          <default_value>64</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="ipv4_block_cidr_aligned" xsi:type="AttributeEnum">
          <values>
            <value>bca_yes</value>
            <value>bca_no</value>
          </values>
          <sql>ipv4_block_cidr_aligned</sql>
          <default_value>bca_yes</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ipv6_block_cidr_aligned" xsi:type="AttributeEnum" _delta="define">
          <values>
            <value>bca_yes</value>
            <value>bca_no</value>
          </values>
          <sql>ipv6_block_cidr_aligned</sql>
          <default_value>bca_yes</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="delegate_to_children_only" xsi:type="AttributeEnum">
          <values>
            <value>dtc_yes</value>
            <value>dtc_no</value>
          </values>
          <sql>delegate_to_children_only</sql>
          <default_value>dtc_yes</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <!-- Settings for subnets -->
        <field id="reserve_subnet_IPs" xsi:type="AttributeEnum">
          <values>
            <value>reserve_no</value>
            <value>reserve_yes</value>
          </values>
          <sql>reserve_subnet_IPs</sql>
          <default_value>reserve_no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ipv4_gateway_ip_format" xsi:type="AttributeEnum">
          <values>
            <value>subnetip_plus_1</value>
            <value>broadcastip_minus_1</value>
            <value>free_setup</value>
          </values>
          <sql>ipv4_gateway_ip_format</sql>
          <default_value>subnetip_plus_1</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="ipv6_gateway_ip_format" xsi:type="AttributeEnum" _delta="define">
          <values>
            <value>subnetip_plus_1</value>
            <value>lastip</value>
            <value>free_setup</value>
          </values>
          <sql>ipv6_gateway_ip_format</sql>
          <default_value>subnetip_plus_1</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="subnet_symetrical_nat" xsi:type="AttributeEnum">
          <values>
            <value>no</value>
            <value>yes</value>
          </values>
          <sql>subnet_symetrical_nat</sql>
          <default_value>no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="subnet_low_watermark" xsi:type="AttributeInteger">
          <sql>subnet_low_watermark</sql>
          <default_value>60</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="subnet_high_watermark" xsi:type="AttributeInteger">
          <sql>subnet_high_watermark</sql>
          <default_value>80</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <!-- Settings for IP ranges -->
        <field id="iprange_low_watermark" xsi:type="AttributeInteger">
          <sql>iprange_low_watermark</sql>
          <default_value>60</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <field id="iprange_high_watermark" xsi:type="AttributeInteger">
          <sql>iprange_high_watermark</sql>
          <default_value>80</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <!-- Settings for IP addresses -->
        <field id="ip_allow_duplicate_name" xsi:type="AttributeEnum">
          <values>
            <value>ipdup_no</value>
            <value>ipdup_yes</value>
            <value>ipdup_dualstack</value>
          </values>
          <sql>ip_allow_duplicate_name</sql>
          <default_value>ipdup_no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ping_before_assign" xsi:type="AttributeEnum">
          <values>
            <value>ping_no</value>
            <value>ping_yes</value>
          </values>
          <sql>ping_before_assign</sql>
          <default_value>ping_no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ip_copy_ci_name_to_shortname" xsi:type="AttributeEnum">
          <values>
            <value>no</value>
            <value>yes</value>
          </values>
          <sql>ip_copy_ci_name_to_shortname</sql>
          <default_value>no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="compute_fqdn_with_empty_shortname" xsi:type="AttributeEnum">
          <values>
            <value>no</value>
            <value>yes</value>
          </values>
          <sql>allow_fqdn_with_empty_shortname</sql>
          <default_value>no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ip_symetrical_nat" xsi:type="AttributeEnum">
          <values>
            <value>no</value>
            <value>yes</value>
          </values>
          <sql>ip_symetrical_nat</sql>
          <default_value>no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ip_allocate_on_ci_production" xsi:type="AttributeEnum">
          <values>
            <value>no</value>
            <value>yes</value>
          </values>
          <sql>ip_allocate_on_ci_production</sql>
          <default_value>yes</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ip_release_on_ci_obsolete" xsi:type="AttributeEnum">
          <values>
            <value>no</value>
            <value>yes</value>
          </values>
          <sql>ip_release_on_ci_obsolete</sql>
          <default_value>no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ip_unassign_on_no_ci" xsi:type="AttributeEnum">
          <values>
            <value>no</value>
            <value>yes</value>
          </values>
          <sql>ip_unassign_on_no_ci</sql>
          <default_value>no</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <field id="ip_release_on_subnet_release" xsi:type="AttributeEnum">
          <values>
            <value>no</value>
            <value>yes</value>
          </values>
          <sql>ip_release_on_subnet_release</sql>
          <default_value>yes</default_value>
          <is_null_allowed>false</is_null_allowed>
          <display_style>radio_horizontal</display_style>
        </field>
        <!-- Settings for Domains -->
        <field id="delegate_domain_to_children_only" xsi:type="AttributeEnum">
          <values>
            <value>dtc_yes</value>
            <value>dtc_no</value>
          </values>
          <sql>delegate_domain_to_children_only</sql>
          <default_value>dtc_yes</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
        <!-- Other settings -->
        <field id="mac_address_format" xsi:type="AttributeEnum">
          <values>
            <value>colons</value>
            <value>hyphens</value>
            <value>dots</value>
          </values>
          <sql>mac_address_format</sql>
          <default_value>colons</default_value>
          <is_null_allowed>false</is_null_allowed>
        </field>
      </fields>
      <methods/>
      <presentation>
        <details>
          <items>
            <item id="col:col1">
              <rank>10</rank>
              <items>
                <item id="fieldset:Class:IPConfig:baseinfo">
                  <rank>10</rank>
                  <items>
                    <item id="org_id">
                      <rank>10</rank>
                    </item>
                    <item id="name">
                      <rank>20</rank>
                    </item>
                    <item id="requestor_id">
                      <rank>30</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Class:IPConfig:blockinfo">
                  <rank>20</rank>
                  <items>
                    <item id="ipv4_block_min_size">
                      <rank>10</rank>
                    </item>
                    <item id="ipv6_block_min_prefix" _delta="define">
                      <rank>20</rank>
                    </item>
                    <item id="ipv4_block_cidr_aligned">
                      <rank>30</rank>
                    </item>
                    <item id="ipv6_block_cidr_aligned" _delta="define">
                      <rank>40</rank>
                    </item>
                    <item id="delegate_to_children_only">
                      <rank>50</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="col:col2">
              <rank>20</rank>
              <items>
                <item id="fieldset:Class:IPConfig:subnetinfo">
                  <rank>10</rank>
                  <items>
                    <item id="reserve_subnet_IPs">
                      <rank>10</rank>
                    </item>
                    <item id="ipv4_gateway_ip_format">
                      <rank>20</rank>
                    </item>
                    <item id="ipv6_gateway_ip_format" _delta="define">
                      <rank>30</rank>
                    </item>
                    <item id="subnet_symetrical_nat">
                      <rank>40</rank>
                    </item>
                    <item id="subnet_low_watermark">
                      <rank>50</rank>
                    </item>
                    <item id="subnet_high_watermark">
                      <rank>60</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Class:IPConfig:iprangeinfo">
                  <rank>20</rank>
                  <items>
                    <item id="iprange_low_watermark">
                      <rank>10</rank>
                    </item>
                    <item id="iprange_high_watermark">
                      <rank>20</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Class:IPConfig:ipinfo">
                  <rank>30</rank>
                  <items>
                    <item id="ip_allow_duplicate_name">
                      <rank>10</rank>
                    </item>
                    <item id="ping_before_assign">
                      <rank>20</rank>
                    </item>
                    <item id="ip_symetrical_nat">
                      <rank>30</rank>
                    </item>
                    <item id="ip_copy_ci_name_to_shortname">
                      <rank>40</rank>
                    </item>
                    <item id="compute_fqdn_with_empty_shortname">
                      <rank>50</rank>
                    </item>
                    <item id="ip_allocate_on_ci_production">
                      <rank>60</rank>
                    </item>
                    <item id="ip_release_on_ci_obsolete">
                      <rank>70</rank>
                    </item>
                    <item id="ip_unassign_on_no_ci">
                      <rank>80</rank>
                    </item>
                    <item id="ip_release_on_subnet_release">
                      <rank>90</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
            <item id="col:col3">
              <rank>30</rank>
              <items>
                <item id="fieldset:Class:IPConfig:domaininfo">
                  <rank>10</rank>
                  <items>
                    <item id="delegate_domain_to_children_only">
                      <rank>10</rank>
                    </item>
                  </items>
                </item>
                <item id="fieldset:Class:IPConfig:otherinfo">
                  <rank>50</rank>
                  <items>
                    <item id="mac_address_format">
                      <rank>10</rank>
                    </item>
                  </items>
                </item>
              </items>
            </item>
          </items>
        </details>
        <default_search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
          </items>
        </default_search>
        <search>
          <items>
            <item id="ipv4_block_min_size">
              <rank>10</rank>
            </item>
            <item id="ipv6_block_min_prefix" _delta="define">
              <rank>20</rank>
            </item>
            <item id="ipv4_block_cidr_aligned">
              <rank>30</rank>
            </item>
            <item id="ipv6_block_cidr_aligned" _delta="define">
              <rank>40</rank>
            </item>
            <item id="delegate_to_children_only">
              <rank>50</rank>
            </item>
            <item id="reserve_subnet_IPs">
              <rank>60</rank>
            </item>
            <item id="ipv4_gateway_ip_format">
              <rank>70</rank>
            </item>
            <item id="ipv6_gateway_ip_format" _delta="define">
              <rank>80</rank>
            </item>
            <item id="subnet_low_watermark">
              <rank>90</rank>
            </item>
            <item id="subnet_high_watermark">
              <rank>100</rank>
            </item>
            <item id="iprange_low_watermark">
              <rank>110</rank>
            </item>
            <item id="iprange_high_watermark">
              <rank>120</rank>
            </item>
            <item id="ip_allow_duplicate_name">
              <rank>130</rank>
            </item>
            <item id="mac_address_format">
              <rank>140</rank>
            </item>
            <item id="ping_before_assign">
              <rank>150</rank>
            </item>
            <item id="org_id">
              <rank>160</rank>
            </item>
            <item id="requestor_id">
              <rank>170</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
            <item id="org_id">
              <rank>150</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
    <class id="IPUsage" _delta="define">
      <parent>Typology</parent>
      <php_parent>
        <name>TeemIp\TeemIp\Extension\Framework\Model\_IPUsage</name>
        <file>src/Model/_IPUsage.php</file>
      </php_parent>
      <properties>
        <category>bizmodel,searchable,ipmgmt</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>ipusage</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"/>
            <attribute id="org_id"/>
            <attribute id="org_name"/>
          </attributes>
        </reconciliation>
      </properties>
      <fields>
        <field id="org_id" xsi:type="AttributeExternalKey">
          <sql>org_id</sql>
          <target_class>Organization</target_class>
          <is_null_allowed>false</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
          <jointype/>
        </field>
        <field id="org_name" xsi:type="AttributeExternalField">
          <extkey_attcode>org_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="description" xsi:type="AttributeString">
          <sql>description</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
      </fields>
      <methods>
        <method id="CreateBasicIpUsages">
          <comment/>
          <static>true</static>
          <access>public</access>
          <type>custom</type>
          <code><![CDATA[ public static function CreateBasicIpUsages($iOrgId)
	{
		IPUsage::GetIpUsageId($iOrgId, NETWORK_IP_CODE);
		IPUsage::GetIpUsageId($iOrgId, GATEWAY_IP_CODE);
		IPUsage::GetIpUsageId($iOrgId, BROADCAST_IP_CODE);
	}]]></code>
        </method>
        <method id="GetIpUsageId">
          <comment/>
          <static>true</static>
          <access>public</access>
          <type>custom</type>
          <code><![CDATA[ public static function GetIpUsageId($iOrgId, $sCode)
	{
		$oIpUsage = MetaModel::GetObjectFromOQL("SELECT IPUsage AS i WHERE i.name = :code AND i.org_id = :org_id", array('code' => $sCode, 'org_id' => $iOrgId), false);
		if ($oIpUsage == null)
		{
			$oIpUsage = MetaModel::NewObject('IPUsage');
			$oIpUsage->Set('org_id', $iOrgId);
			$oIpUsage->Set('name', $sCode);
			switch ($sCode)
			{
				case NETWORK_IP_CODE:
					$sDesc = NETWORK_IP_DESC;
					break;

				case GATEWAY_IP_CODE:
					$sDesc = GATEWAY_IP_DESC;
					break;

				case BROADCAST_IP_CODE:
					$sDesc = BROADCAST_IP_DESC;

				default:
					$sDesc = "";
					break;
			}
			$oIpUsage->Set('description', $sDesc);
			$oIpUsage->DBInsert();
		}
		return ($oIpUsage->GetKey());
	}]]></code>
        </method>
      </methods>
      <presentation>
        <details>
          <items>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="name">
              <rank>30</rank>
            </item>
            <item id="description">
              <rank>40</rank>
            </item>
          </items>
        </details>
        <default_search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
          </items>
        </default_search>
        <search>
          <items>
            <item id="org_id">
              <rank>10</rank>
            </item>
            <item id="name">
              <rank>20</rank>
            </item>
            <item id="description">
              <rank>30</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
           <item id="description">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
          </items>
        </list>
      </presentation>
    </class>
  </classes>
  <menus>
    <menu id="IPConfig" xsi:type="OQLMenuNode" _delta="define">
      <rank>100</rank>
      <parent>ConfigEditor</parent>
      <oql>SELECT IPConfig</oql>
      <do_search>1</do_search>
      <auto_reload>fast</auto_reload>
    </menu>
  </menus>
  <constants>
    <constant id="GLOBAL_CONFIG_DEFAULT_NAME" xsi:type="string" _delta="define">IP Settings</constant>
    <constant id="NETWORK_IP_CODE" xsi:type="string" _delta="define">Network IP</constant>
    <constant id="NETWORK_IP_DESC" xsi:type="string" _delta="define">Subnet IP</constant>
    <constant id="GATEWAY_IP_CODE" xsi:type="string" _delta="define">Gateway</constant>
    <constant id="GATEWAY_IP_DESC" xsi:type="string" _delta="define">Gateway IP</constant>
    <constant id="BROADCAST_IP_CODE" xsi:type="string" _delta="define">Broadcast</constant>
    <constant id="BROADCAST_IP_DESC" xsi:type="string" _delta="define">Broadcast IP</constant>
  </constants>
  <user_rights>
    <groups>
      <group id="IPApplication" _delta="define">
        <classes>
          <class id="IPApplication"/>
          <class id="lnkContactToFunctionalCI"/>
          <class id="lnkDocumentToFunctionalCI"/>
        </classes>
      </group>
    </groups>
  </user_rights>
</itop_design>
