XML 1.2: handle the XML transformation. Added APIs to report the functionality loss when downgrading (snippets, portal, module parameters, relations and object key)

SVN:trunk[3523]
This commit is contained in:
Romain Quetiez
2015-03-30 14:17:29 +00:00
parent 887e73ea1d
commit e8cbb2d39d

View File

@@ -95,6 +95,18 @@ class iTopDesignFormat
$this->bStatus = false;
}
/**
* Helper to fill the log structure
* @param string $sMessage The error description
*/
protected function LogWarning($sMessage)
{
$this->aLog[] = array(
'severity' => 'Warning',
'msg' => $sMessage
);
}
/**
* Helper to fill the log structure
* @param string $sMessage The message
@@ -108,7 +120,7 @@ class iTopDesignFormat
}
/**
* Get all the errors in one single line
* Get all the errors in one single array
*/
public function GetErrors()
{
@@ -123,6 +135,22 @@ class iTopDesignFormat
return $aErrors;
}
/**
* Get all the warnings in one single array
*/
public function GetWarnings()
{
$aErrors = array();
foreach ($this->aLog as $aLogEntry)
{
if ($aLogEntry['severity'] == 'Warning')
{
$aErrors[] = $aLogEntry['msg'];
}
}
return $aErrors;
}
/**
* Get the whole log
*/
@@ -131,6 +159,18 @@ class iTopDesignFormat
return $this->aLog;
}
/**
* An alternative to getNodePath, that gives the id of nodes instead of the position within the children
*/
public static function GetItopNodePath($oNode)
{
if ($oNode instanceof DOMDocument) return '';
$sId = $oNode->getAttribute('id');
$sNodeDesc = ($sId != '') ? $oNode->nodeName.'['.$sId.']' : $oNode->nodeName;
return self::GetItopNodePath($oNode->parentNode).'/'.$sNodeDesc;
}
/**
* Test the conversion without altering the DOM
*
@@ -312,7 +352,7 @@ class iTopDesignFormat
{
if ($oXPath->query('descendant-or-self::*[@_delta or @_rename_from]', $oNode)->length > 0)
{
$this->LogError('Alterations have been defined under the node: '.MFDocument::GetItopNodePath($oNode));
$this->LogError('Alterations have been defined under the node: '.self::GetItopNodePath($oNode));
}
$oStimulus = $oNode->ownerDocument->createElement('stimulus', $oNode->getAttribute('id'));
$oNode->appendChild($oStimulus);
@@ -325,7 +365,7 @@ class iTopDesignFormat
{
if ($oXPath->query('descendant-or-self::*[@_delta or @_rename_from]', $oNode)->length > 0)
{
$this->LogError('Alterations have been defined under the node: '.MFDocument::GetItopNodePath($oNode));
$this->LogError('Alterations have been defined under the node: '.self::GetItopNodePath($oNode));
}
$oStimulus = $oNode->ownerDocument->createElement('percent', $oNode->getAttribute('id'));
$oNode->appendChild($oStimulus);
@@ -338,7 +378,7 @@ class iTopDesignFormat
{
if ($oXPath->query('descendant-or-self::*[@_delta or @_rename_from]', $oNode)->length > 0)
{
$this->LogError('Alterations have been defined under the node: '.MFDocument::GetItopNodePath($oNode));
$this->LogError('Alterations have been defined under the node: '.self::GetItopNodePath($oNode));
}
if (substr($oNode->getAttribute('id'), 0, strlen('action')) == 'action')
{
@@ -362,7 +402,7 @@ class iTopDesignFormat
{
if ($oXPath->query('descendant-or-self::*[@_delta or @_rename_from]', $oNode)->length > 0)
{
$this->LogError('Alterations have been defined under the node: '.MFDocument::GetItopNodePath($oNode));
$this->LogError('Alterations have been defined under the node: '.self::GetItopNodePath($oNode));
}
$oNode->removeAttribute('id');
}
@@ -374,7 +414,6 @@ class iTopDesignFormat
*/
protected function From11To12($oFactory)
{
// Do nothing
}
/**
@@ -384,12 +423,44 @@ class iTopDesignFormat
protected function From12To11($oFactory)
{
$oXPath = new DOMXPath($this->oDocument);
// Transform ObjectKey attributes into Integer
//
$oNodeList = $oXPath->query("/itop_design/classes//class/fields/field[@xsi:type='AttributeObjectKey']");
foreach ($oNodeList as $oNode)
{
$oNode->setAttribute('xsi:type', 'AttributeInteger');
// The property class_attcode is left there (doing no harm)
$this->LogWarning('The attribute '.self::GetItopNodePath($oNode), ' has been degraded into an integer attribute. Any OQL query using this attribute will fail.');
}
// Later: transform the relations into code (iif defined as an SQL query)
$oNodeList = $oXPath->query('/itop_design/classes//class/relations');
foreach ($oNodeList as $oNode)
{
$this->LogWarning('The relations defined in '.self::GetItopNodePath($oNode). ' will be lost.');
$this->DeleteNode($oNode);
}
$oNodeList = $oXPath->query('/itop_design/portal');
foreach ($oNodeList as $oNode)
{
$this->LogWarning('Portal definition will be lost.');
$this->DeleteNode($oNode);
}
$oNodeList = $oXPath->query('/itop_design/module_parameters');
foreach ($oNodeList as $oNode)
{
$this->LogWarning('Module parameters will be lost.');
$this->DeleteNode($oNode);
}
$oNodeList = $oXPath->query('/itop_design/snippets');
foreach ($oNodeList as $oNode)
{
$this->LogWarning('Code snippets will be lost.');
$this->DeleteNode($oNode);
}
}
@@ -406,4 +477,4 @@ class iTopDesignFormat
}
$oNode->parentNode->removeChild($oNode);
}
}
}