فهرست منبع

XML Modelization of the relations: fixed a bug in the compiler and transformed the datamodel files (2.x) into the latest 1.2 format

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@3521 a333f486-631f-4898-b8df-5754b55c2be0
romainq 10 سال پیش
والد
کامیت
fe85e87a4f
19فایلهای تغییر یافته به همراه317 افزوده شده و 835 حذف شده
  1. 1 1
      datamodels/2.x/itop-bridge-virtualization-storage/datamodel.itop-bridge-virtualization-storage.xml
  2. 1 1
      datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml
  3. 1 1
      datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml
  4. 136 417
      datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml
  5. 34 79
      datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml
  6. 1 1
      datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml
  7. 2 2
      datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml
  8. 1 1
      datamodels/2.x/itop-knownerror-mgmt/datamodel.itop-knownerror-mgmt.xml
  9. 1 1
      datamodels/2.x/itop-problem-mgmt/datamodel.itop-problem-mgmt.xml
  10. 1 1
      datamodels/2.x/itop-profiles-itil/datamodel.itop-profiles-itil.xml
  11. 2 2
      datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml
  12. 2 2
      datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml
  13. 1 1
      datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml
  14. 1 1
      datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml
  15. 78 180
      datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml
  16. 3 3
      datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml
  17. 49 139
      datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml
  18. 1 1
      datamodels/2.x/itop-welcome-itil/datamodel.itop-welcome-itil.xml
  19. 1 1
      setup/compiler.class.inc.php

+ 1 - 1
datamodels/2.x/itop-bridge-virtualization-storage/datamodel.itop-bridge-virtualization-storage.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="lnkVirtualDeviceToVolume" _delta="define">
       <parent>cmdbAbstractObject</parent>

+ 1 - 1
datamodels/2.x/itop-change-mgmt-itil/datamodel.itop-change-mgmt-itil.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="Change" _delta="define">
       <parent>Ticket</parent>

+ 1 - 1
datamodels/2.x/itop-change-mgmt/datamodel.itop-change-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="Change" _delta="define">
       <parent>Ticket</parent>

+ 136 - 417
datamodels/2.x/itop-config-mgmt/datamodel.itop-config-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="Organization" _delta="define">
       <parent>cmdbAbstractObject</parent>
@@ -1380,29 +1380,7 @@
           <duplicates/>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-		case "impacts":
-			$aRels = array(
-				"contact" => array("sQuery"=>"SELECT Contact AS c JOIN lnkContactToFunctionalCI AS l1 ON l1.contact_id = c.id WHERE l1.functionalci_id = :this->id", "bPropagate"=>true, "iDistance"=>3),
-				"solution" => array("sQuery"=>"SELECT ApplicationSolution AS s JOIN lnkApplicationSolutionToFunctionalCI AS l1 ON l1.applicationsolution_id = s.id WHERE l1.functionalci_id = :this->id", "bPropagate"=>true, "iDistance"=>2),
-				"SoftwareInstances" => array("sQuery"=>"SELECT SoftwareInstance AS s  WHERE s.system_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-		default:
-			return parent::GetRelationQueries($sRelCode);
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -1474,6 +1452,21 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="contact">
+              <query>SELECT Contact AS c JOIN lnkContactToFunctionalCI AS l1 ON l1.contact_id = c.id WHERE l1.functionalci_id = :this-&gt;id</query>
+            </neighbour>
+            <neighbour id="solution">
+              <query>SELECT ApplicationSolution AS s JOIN lnkApplicationSolutionToFunctionalCI AS l1 ON l1.applicationsolution_id = s.id WHERE l1.functionalci_id = :this-&gt;id</query>
+            </neighbour>
+            <neighbour id="SoftwareInstances">
+              <query>SELECT SoftwareInstance AS s  WHERE s.system_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="PhysicalDevice" _delta="define">
       <parent>FunctionalCI</parent>
@@ -1738,36 +1731,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-		case "impacts":
-			$aRels = array(
-
-
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-
-			case "depends on":
-			$aRels = array(
-				"connected_network" => array("sQuery"=>"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'", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-
-		default:
-			return parent::GetRelationQueries($sRelCode);
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -1890,6 +1854,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="connected_network">
+              <query>SELECT NetworkDevice AS nw JOIN lnkConnectableCIToNetworkDevice AS l1 ON l1.networkdevice_id = nw.id WHERE l1.connectableci_id = :this-&gt;id AND l1.connection_type='downlink'</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="DatacenterDevice" _delta="define">
       <parent>ConnectableCI</parent>
@@ -2002,46 +1975,7 @@
           <duplicates/>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-		case "depends on":
-            $aRels = array();
-            if (class_exists('Enclosure'))
-            {
-              $aRels['Enclosure'] = array("sQuery"=>"SELECT Enclosure WHERE id = :this->enclosure_id", "bPropagate"=>true, "iDistance"=>10);
-            }
-            if (class_exists('SANSwitch'))
-            {
-              $aRels['SANSwitch'] = array("sQuery"=>"SELECT SANSwitch AS san JOIN lnkSanToDatacenterDevice AS l1 ON l1.san_id = san.id WHERE l1.datacenterdevice_id = :this->id", "bPropagate"=>true, "iDistance"=>10);
-            }
-            if (class_exists('PowerConnection'))
-            {
-              $aRels['PowerA'] = array(
-                 "sQuery"=>"SELECT PowerConnection WHERE id = :this->powerA_id",
-					  "bPropagate"=>true,
-                 "iDistance"=>10
-              );
-              $aRels['PowerB'] = array(
-                 "sQuery"=>"SELECT PowerConnection WHERE id = :this->powerB_id",
-					  "bPropagate"=>true,
-                 "iDistance"=>10
-              );
-            }
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-		default:
-			return parent::GetRelationQueries($sRelCode);
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -2248,37 +2182,7 @@
           <is_null_allowed>true</is_null_allowed>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-		case "impacts":
-			$aRels = array(
-				"device" => array("sQuery"=>"SELECT ConnectableCI AS d JOIN lnkConnectableCIToNetworkDevice AS l1 ON l1.connectableci_id = d.id WHERE l1.networkdevice_id = :this->id AND l1.connection_type='downlink'", "bPropagate"=>true, "iDistance"=>1),
-
-
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-
-			case "depends on":
-			$aRels = array(
-		//		"connected_network" => array("sQuery"=>"SELECT NetworkDevice AS nw JOIN lnkConnectableCIToNetworkDevice AS l1 ON l1.networkdevice_id = nw.id WHERE l1.connectableci_id = :this->id AND l1.connection_type='uplink'", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-
-		default:
-			return parent::GetRelationQueries($sRelCode);
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -2479,6 +2383,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="device">
+              <query>SELECT ConnectableCI AS d JOIN lnkConnectableCIToNetworkDevice AS l1 ON l1.connectableci_id = d.id WHERE l1.networkdevice_id = :this-&gt;id AND l1.connection_type='downlink'</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="Server" _delta="define">
       <parent>DatacenterDevice</parent>
@@ -2562,43 +2475,7 @@
           <duplicates/>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-		case "impacts":
-			$aRels = array();
-			if (class_exists('Hypervisor'))
-			{
-				$aRels = array(
-					"device" => array("sQuery"=>"SELECT Hypervisor WHERE server_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			         );
-			}
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-
-		case "depends on":
-            		$aRels = array();
-            		if (class_exists('LogicalVolume'))
-            		{
-				$aRels = array(
-					"volume" => array("sQuery"=>"SELECT LogicalVolume AS v JOIN lnkServerToVolume AS l1 ON l1.volume_id=v.id WHERE l1.server_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-				);
-			}
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-
-		default:
-			return parent::GetRelationQueries($sRelCode);
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -2870,35 +2747,7 @@
           <display_style>list</display_style>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-				"process" => array("sQuery"=>"SELECT BusinessProcess AS p JOIN lnkApplicationSolutionToBusinessProcess AS l1 ON l1.businessprocess_id = p.id WHERE l1.applicationsolution_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case "depends on":
-			$aRels = array(
-				"solution" => array("sQuery"=>"SELECT FunctionalCI AS ci JOIN lnkApplicationSolutionToFunctionalCI AS l1 ON l1.functionalci_id = ci.id WHERE l1.applicationsolution_id = :this->id", "bPropagate"=>true, "iDistance"=>2),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-						
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -2973,6 +2822,22 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="process">
+              <query>SELECT BusinessProcess AS p JOIN lnkApplicationSolutionToBusinessProcess AS l1 ON l1.businessprocess_id = p.id WHERE l1.applicationsolution_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="solution">
+              <query>SELECT FunctionalCI AS ci JOIN lnkApplicationSolutionToFunctionalCI AS l1 ON l1.functionalci_id = ci.id WHERE l1.applicationsolution_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="BusinessProcess" _delta="define">
       <parent>FunctionalCI</parent>
@@ -3018,28 +2883,7 @@
           <display_style>list</display_style>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "depends on":
-			$aRels = array(
-				"solution" => array("sQuery"=>"SELECT ApplicationSolution AS app JOIN lnkApplicationSolutionToBusinessProcess AS l1 ON l1.applicationsolution_id = app.id WHERE l1.businessprocess_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -3105,6 +2949,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="solution">
+              <query>SELECT ApplicationSolution AS app JOIN lnkApplicationSolutionToBusinessProcess AS l1 ON l1.applicationsolution_id = app.id WHERE l1.businessprocess_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="SoftwareInstance" _delta="define">
       <parent>FunctionalCI</parent>
@@ -3189,36 +3042,7 @@
           <display_style>list</display_style>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-				// Actually this should be limited to the Software instances based on a DBServer Application type...
-
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-				"FunctionalCI" => array("sQuery"=>"SELECT FunctionalCI AS s JOIN SoftwareInstance AS app ON app.system_id = s.id WHERE app.id = :this->id", "bPropagate"=>true, "iDistance"=>10),			
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -3299,6 +3123,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="FunctionalCI">
+              <query>SELECT FunctionalCI AS s JOIN SoftwareInstance AS app ON app.system_id = s.id WHERE app.id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="Middleware" _delta="define">
       <parent>SoftwareInstance</parent>
@@ -3336,35 +3169,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-				"MiddlewareInstance" => array("sQuery"=>"SELECT MiddlewareInstance AS mi WHERE middleware_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-			
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -3454,6 +3259,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="MiddlewareInstance">
+              <query>SELECT MiddlewareInstance AS mi WHERE middleware_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="DBServer" _delta="define">
       <parent>SoftwareInstance</parent>
@@ -3491,35 +3305,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-				"DatabaseSchema" => array("sQuery"=>"SELECT DatabaseSchema AS db WHERE dbserver_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-			
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -3609,6 +3395,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="DatabaseSchema">
+              <query>SELECT DatabaseSchema AS db WHERE dbserver_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="WebServer" _delta="define">
       <parent>SoftwareInstance</parent>
@@ -3646,35 +3441,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-				"WebApplication" => array("sQuery"=>"SELECT WebApplication AS db WHERE webserver_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-			
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -3764,6 +3531,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="WebApplication">
+              <query>SELECT WebApplication AS db WHERE webserver_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="PCSoftware" _delta="define">
       <parent>SoftwareInstance</parent>
@@ -4035,35 +3811,7 @@
           <target_attcode>name</target_attcode>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-				"Middleware" => array("sQuery"=>"SELECT Middleware WHERE id = :this->middleware_id", "bPropagate"=>true, "iDistance"=>10),
-			
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -4135,6 +3883,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="Middleware">
+              <query>SELECT Middleware WHERE id = :this-&gt;middleware_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="DatabaseSchema" _delta="define">
       <parent>FunctionalCI</parent>
@@ -4172,35 +3929,7 @@
           <target_attcode>name</target_attcode>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-				"DBServer" => array("sQuery"=>"SELECT DBServer WHERE id = :this->dbserver_id", "bPropagate"=>true, "iDistance"=>10),
-			
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -4272,6 +4001,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="DBServer">
+              <query>SELECT DBServer WHERE id = :this-&gt;dbserver_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="WebApplication" _delta="define">
       <parent>FunctionalCI</parent>
@@ -4315,35 +4053,7 @@
           <target>_blank</target>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-				"WebServer" => array("sQuery"=>"SELECT WebServer WHERE id = :this->webserver_id", "bPropagate"=>true, "iDistance"=>10),
-			
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -4418,6 +4128,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="WebServer">
+              <query>SELECT WebServer WHERE id = :this-&gt;webserver_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="Software" _delta="define">
       <parent>cmdbAbstractObject</parent>

+ 34 - 79
datamodels/2.x/itop-datacenter-mgmt/datamodel.itop-datacenter-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="Rack" _delta="define">
       <parent>PhysicalDevice</parent>
@@ -231,27 +231,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-		case "impacts":
-			$aRels = array(
-				"DatacenterDevice" => array("sQuery"=>"SELECT DatacenterDevice WHERE enclosure_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-		default:
-			return parent::GetRelationQueries($sRelCode);
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -386,6 +366,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="DatacenterDevice">
+              <query>SELECT DatacenterDevice WHERE enclosure_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="PowerConnection" _delta="define">
       <parent>PhysicalDevice</parent>
@@ -412,35 +401,7 @@
         </reconciliation>
       </properties>
       <fields/>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-				"DatacenterDevice" => array("sQuery"=>"SELECT DatacenterDevice WHERE powerA_id = :this->id OR powerB_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-				"pdu" => array("sQuery"=>"SELECT PDU WHERE powerstart_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -566,6 +527,18 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="DatacenterDevice">
+              <query>SELECT DatacenterDevice WHERE powerA_id = :this-&gt;id OR powerB_id = :this-&gt;id</query>
+            </neighbour>
+            <neighbour id="pdu">
+              <query>SELECT PDU WHERE powerstart_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="PowerSource" _delta="define">
       <parent>PowerConnection</parent>
@@ -787,34 +760,7 @@
           <target_attcode>name</target_attcode>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[	public static function GetRelationQueries($sRelCode)
-	{
-		switch ($sRelCode)
-		{
-			case "impacts":
-			$aRels = array(
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			case 'depends on':
-			$aRels = array(
-				"powerconnection" => array("sQuery"=>"SELECT PowerConnection WHERE id = :this->powerstart_id", "bPropagate"=>true, "iDistance"=>10),
-			);
-			return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-			break;
-			
-			default:
-			return parent::GetRelationQueries($sRelCode);			
-		}
-	}]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -949,6 +895,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="powerconnection">
+              <query>SELECT PowerConnection WHERE id = :this-&gt;powerstart_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
   </classes>
   <menus>

+ 1 - 1
datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="TelephonyCI" _delta="define">
       <parent>PhysicalDevice</parent>

+ 2 - 2
datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <constants>
     <constant id="PORTAL_TYPE_TO_CLASS" xsi:type="string" _delta="redefine"><![CDATA[{"service_request":"UserRequest","incident":"Incident"}]]></constant>
     <constant id="PORTAL_INCIDENT_PUBLIC_LOG" xsi:type="string" _delta="define"><![CDATA[public_log]]></constant>
@@ -1185,7 +1185,7 @@
 		return true;
 	}]]></code>
         </method>
-         <method id="ResolveFrom">
+        <method id="ResolveFrom">
           <comment><![CDATA[/**
 	 * Resolve the ticket from another resolved ticket
 	 * @return void

+ 1 - 1
datamodels/2.x/itop-knownerror-mgmt/datamodel.itop-knownerror-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="KnownError" _delta="define">
       <parent>cmdbAbstractObject</parent>

+ 1 - 1
datamodels/2.x/itop-problem-mgmt/datamodel.itop-problem-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="Problem" _delta="define">
       <parent>Ticket</parent>

+ 1 - 1
datamodels/2.x/itop-profiles-itil/datamodel.itop-profiles-itil.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes/>
   <user_rights>
     <groups>

+ 2 - 2
datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <constants>
     <constant id="PORTAL_TYPE_TO_CLASS" xsi:type="string" _delta="redefine"><![CDATA[{"service_request":"UserRequest","incident":"Incident"}]]></constant>
     <constant id="PORTAL_USERREQUEST_PUBLIC_LOG" xsi:type="string" _delta="define"><![CDATA[public_log]]></constant>
@@ -1288,7 +1288,7 @@
 		return true;
 	}]]></code>
         </method>
-         <method id="ResolveFrom">
+        <method id="ResolveFrom">
           <comment><![CDATA[/**
 	 * Resolve the ticket from another resolved ticket
 	 * @return void

+ 2 - 2
datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <constants>
     <constant id="PORTAL_USERREQUEST_PUBLIC_LOG" xsi:type="string" _delta="define"><![CDATA[public_log]]></constant>
     <constant id="PORTAL_USERREQUEST_USER_COMMENT" xsi:type="string" _delta="define"><![CDATA[user_comment]]></constant>
@@ -1290,7 +1290,7 @@
 		return true;
 	}]]></code>
         </method>
-         <method id="ResolveFrom">
+        <method id="ResolveFrom">
           <comment><![CDATA[/**
 	 * Resolve the ticket from another resolved ticket
 	 * @return void

+ 1 - 1
datamodels/2.x/itop-service-mgmt-provider/datamodel.itop-service-mgmt-provider.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="Organization">
       <fields>

+ 1 - 1
datamodels/2.x/itop-service-mgmt/datamodel.itop-service-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="Organization">
       <fields>

+ 78 - 180
datamodels/2.x/itop-storage-mgmt/datamodel.itop-storage-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="StorageSystem" _delta="define">
       <parent>DatacenterDevice</parent>
@@ -34,27 +34,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-    case "impacts":
-      $aRels = array(
-        "logicalvolume" => array("sQuery"=>"SELECT LogicalVolume WHERE storagesystem_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-    default:
-      return parent::GetRelationQueries($sRelCode);
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -255,6 +235,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="logicalvolume">
+              <query>SELECT LogicalVolume WHERE storagesystem_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="SANSwitch" _delta="define">
       <parent>DatacenterDevice</parent>
@@ -290,28 +279,7 @@
           <duplicates/>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-    case "impacts":
-      $aRels = array(
-        "datacenterdevice" => array("sQuery"=>"SELECT DatacenterDevice AS dc JOIN lnkSanToDatacenterDevice AS l1 ON l1.datacenterdevice_id = dc.id WHERE l1.san_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-    default:
-      return parent::GetRelationQueries($sRelCode);
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -509,6 +477,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="datacenterdevice">
+              <query>SELECT DatacenterDevice AS dc JOIN lnkSanToDatacenterDevice AS l1 ON l1.datacenterdevice_id = dc.id WHERE l1.san_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="TapeLibrary" _delta="define">
       <parent>DatacenterDevice</parent>
@@ -543,28 +520,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-    case "impacts":
-      $aRels = array(
-        "tape" => array("sQuery"=>"SELECT Tape  WHERE tapelibrary_id= :this->id", "bPropagate"=>true, "iDistance"=>10),
-
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-    default:
-      return parent::GetRelationQueries($sRelCode);
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -762,6 +718,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="tape">
+              <query>SELECT Tape  WHERE tapelibrary_id= :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="NAS" _delta="define">
       <parent>DatacenterDevice</parent>
@@ -796,28 +761,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-    case "impacts":
-      $aRels = array(
-        "nasfilesystem" => array("sQuery"=>"SELECT NASFileSystem WHERE nas_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-    default:
-      return parent::GetRelationQueries($sRelCode);
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -1015,6 +959,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="nasfilesystem">
+              <query>SELECT NASFileSystem WHERE nas_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="Tape" _delta="define">
       <parent>cmdbAbstractObject</parent>
@@ -1066,35 +1019,7 @@
           <target_attcode>name</target_attcode>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-      case "impacts":
-      $aRels = array(
-
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      case 'depends on':
-      $aRels = array(
-        "tapelibrary" => array("sQuery"=>"SELECT TapeLibrary  WHERE id = :this->tapelibrary_id", "bPropagate"=>true, "iDistance"=>5), 
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      default:
-      return parent::GetRelationQueries($sRelCode);     
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -1133,6 +1058,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="tapelibrary">
+              <query>SELECT TapeLibrary  WHERE id = :this-&gt;tapelibrary_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="NASFileSystem" _delta="define">
       <parent>cmdbAbstractObject</parent>
@@ -1189,35 +1123,7 @@
           <target_attcode>name</target_attcode>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-      case "impacts":
-      $aRels = array(
-
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      case 'depends on':
-      $aRels = array(
-        "nas" => array("sQuery"=>"SELECT NAS  WHERE id = :this->nas_id", "bPropagate"=>true, "iDistance"=>5), 
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      default:
-      return parent::GetRelationQueries($sRelCode);     
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -1265,6 +1171,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="nas">
+              <query>SELECT NAS  WHERE id = :this-&gt;nas_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="FiberChannelInterface" _delta="define">
       <parent>NetworkInterface</parent>
@@ -1451,40 +1366,7 @@
           <duplicates/>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-      case "impacts":
-      $aRels = array(
-        // Actually this should be limited to the Software instances based on a DBServer Application type...
-        "server" => array("sQuery"=>"SELECT Server AS s JOIN lnkServerToVolume AS l1 ON l1.server_id=s.id  WHERE l1.volume_id = :this->id", "bPropagate"=>true, "iDistance"=>5),  
-      );
-      if (class_exists('VirtualDevice'))
-      {
-        $aRels["virtualdevice"] = array("sQuery"=>"SELECT VirtualDevice AS vd JOIN lnkVirtualDeviceToVolume AS l1 ON l1.virtualdevice_id=vd.id  WHERE l1.volume_id = :this->id", "bPropagate"=>true, "iDistance"=>5);
-      }
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      case 'depends on':
-      $aRels = array(
-        "sotragesystem" => array("sQuery"=>"SELECT StorageSystem AS storage WHERE storage.id = :this->storagesystem_id", "bPropagate"=>true, "iDistance"=>5),  
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      default:
-      return parent::GetRelationQueries($sRelCode);     
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -1547,6 +1429,22 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="server">
+              <query>SELECT Server AS s JOIN lnkServerToVolume AS l1 ON l1.server_id=s.id  WHERE l1.volume_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="sotragesystem">
+              <query>SELECT StorageSystem AS storage WHERE storage.id = :this-&gt;storagesystem_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="lnkServerToVolume" _delta="define">
       <parent>cmdbAbstractObject</parent>

+ 3 - 3
datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <constants>
     <constant id="RESPONSE_TICKET_SLT_QUERY" xsi:type="string" _delta="define"><![CDATA[SELECT SLT AS slt JOIN lnkSLAToSLT AS l1 ON l1.slt_id=slt.id JOIN SLA AS sla ON l1.sla_id=sla.id JOIN lnkCustomerContractToService AS l2 ON l2.sla_id=sla.id JOIN CustomerContract AS sc ON l2.customercontract_id=sc.id WHERE slt.metric = :metric AND l2.service_id = :this->service_id AND sc.org_id = :this->org_id AND slt.request_type = :request_type AND slt.priority = :this->priority]]></constant>
     <constant id="PORTAL_POWER_USER_PROFILE" xsi:type="string" _delta="define"><![CDATA[Portal power user]]></constant>
@@ -212,7 +212,7 @@
         }
         ]]></code>
         </method>
-     </methods>
+      </methods>
       <presentation>
         <details>
           <items>
@@ -888,4 +888,4 @@
       </class>
     </classes>
   </meta>
-</itop_design>
+</itop_design>

+ 49 - 139
datamodels/2.x/itop-virtualization-mgmt/datamodel.itop-virtualization-mgmt.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <classes>
     <class id="VirtualDevice" _delta="define">
       <parent>FunctionalCI</parent>
@@ -48,31 +48,7 @@
           <duplicates/>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-      case 'depends on':
-      $aRels = array(
-      );
-      if (class_exists('LogicalVolume'))
-      {
-        $aRels["logicalvolume"] = array("sQuery"=>"SELECT LogicalVolume AS lv JOIN lnkVirtualDeviceToVolume AS l1 ON l1.volume_id=lv.id  WHERE l1.virtualdevice_id = :this->id", "bPropagate"=>true, "iDistance"=>5);
-      }
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      default:
-      return parent::GetRelationQueries($sRelCode);     
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -181,28 +157,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-      case "impacts":
-      $aRels = array(
-        "virtualmachine" => array("sQuery"=>"SELECT VirtualMachine WHERE virtualhost_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      default:
-      return parent::GetRelationQueries($sRelCode);     
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -277,6 +232,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="virtualmachine">
+              <query>SELECT VirtualMachine WHERE virtualhost_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="Hypervisor" _delta="define">
       <parent>VirtualHost</parent>
@@ -324,37 +288,7 @@
           <target_attcode>name</target_attcode>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-      case "impacts":
-      $aRels = array(
-        "farm" => array("sQuery"=>"SELECT Farm WHERE id = :this->farm_id", "bPropagate"=>true, "iDistance"=>10),
-
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      case 'depends on':
-      $aRels = array(
-        "server" => array("sQuery"=>"SELECT Server WHERE id = :this->server_id", "bPropagate"=>true, "iDistance"=>10),
-      
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      default:
-      return parent::GetRelationQueries($sRelCode);     
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -444,6 +378,22 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="impacts">
+          <neighbours>
+            <neighbour id="farm">
+              <query>SELECT Farm WHERE id = :this-&gt;farm_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="server">
+              <query>SELECT Server WHERE id = :this-&gt;server_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="Farm" _delta="define">
       <parent>VirtualHost</parent>
@@ -478,36 +428,7 @@
           <count_max>0</count_max>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-      case "impacts":
-      $aRels = array(
-
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      case 'depends on':
-      $aRels = array(
-        "Hypervisor" => array("sQuery"=>"SELECT Hypervisor WHERE farm_id = :this->id", "bPropagate"=>true, "iDistance"=>10),
-      
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      default:
-      return parent::GetRelationQueries($sRelCode);     
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -591,6 +512,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="Hypervisor">
+              <query>SELECT Hypervisor WHERE farm_id = :this-&gt;id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="VirtualMachine" _delta="define">
       <parent>VirtualDevice</parent>
@@ -688,36 +618,7 @@
           <is_null_allowed>true</is_null_allowed>
         </field>
       </fields>
-      <methods>
-        <method id="GetRelationQueries">
-          <static>true</static>
-          <access>public</access>
-          <type>Overload-DBObject</type>
-          <code><![CDATA[ public static function GetRelationQueries($sRelCode)
-  {
-    switch ($sRelCode)
-    {
-      case "impacts":
-      $aRels = array(
-
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      case 'depends on':
-      $aRels = array(
-        "virtualhost" => array("sQuery"=>"SELECT VirtualHost WHERE id = :this->virtualhost_id", "bPropagate"=>true, "iDistance"=>10),
-      
-      );
-      return array_merge($aRels, parent::GetRelationQueries($sRelCode));
-      break;
-      
-      default:
-      return parent::GetRelationQueries($sRelCode);     
-    }
-  }]]></code>
-        </method>
-      </methods>
+      <methods/>
       <presentation>
         <details>
           <items>
@@ -850,6 +751,15 @@
           </items>
         </list>
       </presentation>
+      <relations>
+        <relation id="depends on">
+          <neighbours>
+            <neighbour id="virtualhost">
+              <query>SELECT VirtualHost WHERE id = :this-&gt;virtualhost_id</query>
+            </neighbour>
+          </neighbours>
+        </relation>
+      </relations>
     </class>
     <class id="LogicalInterface" _delta="define">
       <parent>IPInterface</parent>

+ 1 - 1
datamodels/2.x/itop-welcome-itil/datamodel.itop-welcome-itil.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1">
+<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2">
   <menus>
     <menu id="WelcomeMenu" xsi:type="MenuGroup" _delta="define">
       <rank>10</rank>

+ 1 - 1
setup/compiler.class.inc.php

@@ -1461,7 +1461,7 @@ EOF;
 				$sMethods .= "\t\t\treturn array_merge(\$aRels, parent::GetRelationQueriesEx(\$sRelCode));\n\n";
 			}
 			$sMethods .= "\t\tdefault:\n";
-			$sMethods .= "\t\t\treturn parent::GetRelationQueries(\$sRelCode);\n";
+			$sMethods .= "\t\t\treturn parent::GetRelationQueriesEx(\$sRelCode);\n";
 			$sMethods .= "\t\t}\n";
 			$sMethods .= "\t}\n";
 		}