Browse Source

Added capability to store/load the DOM in one go !

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1979 a333f486-631f-4898-b8df-5754b55c2be0
dflaven 13 years ago
parent
commit
b7cd1b0316
1 changed files with 31 additions and 3 deletions
  1. 31 3
      setup/modelfactory.class.inc.php

+ 31 - 3
setup/modelfactory.class.inc.php

@@ -109,10 +109,10 @@ class ModelFactory
 	protected $sRootDir;
 	protected $oDOMDocument;
 	protected $oRoot;
+	protected $oModules;
 	protected $oClasses;
 	protected $oMenus;
 	static protected $aLoadedClasses;
-	static protected $aLoadedMenus;
 	static protected $aWellKnownParents = array('DBObject', 'CMDBObject','cmdbAbstractObject');
 //	static protected $aWellKnownMenus = array('DataAdministration', 'Catalogs', 'ConfigManagement', 'Contact', 'ConfigManagementCI', 'ConfigManagement:Shortcuts', 'ServiceManagement');
 	static protected $aLoadedModules;
@@ -125,6 +125,8 @@ class ModelFactory
 		$this->oDOMDocument = new MFDocument();
 		$this->oRoot = $this->oDOMDocument->CreateElement('itop_design');
 		$this->oDOMDocument->AppendChild($this->oRoot);
+		$this->oModules = $this->oDOMDocument->CreateElement('loaded_modules');
+		$this->oRoot->AppendChild($this->oModules);
 		$this->oClasses = $this->oDOMDocument->CreateElement('classes');
 		$this->oRoot->AppendChild($this->oClasses);
 		foreach (self::$aWellKnownParents as $sWellKnownParent)
@@ -141,8 +143,6 @@ class ModelFactory
 			$oElement = $this->oDOMDocument->CreateElement($sElementName);
 			$this->oRoot->AppendChild($oElement);
 		}
-		self::$aLoadedClasses = array();
-		self::$aLoadedMenus = array();
 		self::$aLoadedModules = array();
 		self::$aLoadErrors = array();
 
@@ -158,6 +158,26 @@ class ModelFactory
 		$oNode->Dump();
 	}
 
+	public function LoadFromFile($sCacheFile)
+	{
+		$this->oDOMDocument->load($sCacheFile);
+		$this->oRoot = $this->oDOMDocument->firstChild;
+		
+		$this->oModules = $this->oRoot->getElementsByTagName('loaded_modules')->item(0);
+		self::$aLoadedModules = array();
+		foreach($this->oModules->getElementsByTagName('module') as $oModuleNode)
+		{
+			$sId = $oModuleNode->getAttribute('id');
+			$sRootDir = $oModuleNode->GetChildText('root_dir');
+			$sLabel = $oModuleNode->GetChildText('label');
+			self::$aLoadedModules[] = new MFModule($sId, $sRootDir, $sLabel);
+		}
+	}
+
+	public function SaveToFile($sCacheFile)
+	{
+		$this->oDOMDocument->save($sCacheFile);
+	}
 	/**
 	 * To progressively replace LoadModule
 	 * @param xxx xxx
@@ -254,6 +274,14 @@ class ModelFactory
 		$sModuleName = $oModule->GetName();
 		$aClasses = array();
 		self::$aLoadedModules[] = $oModule;
+		
+		// For persistence in the cache
+		$oModuleNode = $this->oDOMDocument->CreateElement('module');
+		$oModuleNode->setAttribute('id', $oModule->GetId());
+		$oModuleNode->AppendChild($this->oDOMDocument->CreateElement('root_dir', $oModule->GetRootDir()));
+		$oModuleNode->AppendChild($this->oDOMDocument->CreateElement('label', $oModule->GetLabel()));
+		$this->oModules->AppendChild($oModuleNode);
+		
 		foreach($aDataModels as $sXmlFile)
 		{
 			$oDocument = new MFDocument();