CatalogMgr.php 7.61 KB
<?php

/**
 * @class CatalogMgr
 */

class CatalogMgr extends TimeTableMgr {	
             
	function __construct() {
		parent::__construct('Tt.xml');
		$this->contentRootId = 'catalog-treeRootNode';
		$this->contentRootTag = 'catalogList';
		$this->attributes = array('name' => '', 'intervals' => ''); // +  'parameters' 
		$this->optionalAttributes = array();
		$this->objTagName =   'catalog';
		$this->id_prefix = 'cat_'; // 'tt_' ?

		if (!file_exists($this->xmlName)) {
			  $this->createDom();
			  $this->xp = new domxpath($this->contentDom); 
		}
	}	
 
	public function getTmpObject($folderId, $name, $onlyDescription = false) {
	
		$filePath = USERWORKINGDIR.$folderId.'/'.$name.'.xml';
		
		if (!file_exists($filePath)) 
			return array('error' => 'Cannot find result file');
		
		$dom = new DomDocument('1.0'); 
		$dom->formatOutput = true;
		
		if (!$dom -> load($filePath))
			return array('error' => 'Cannot load result file');
		$nameNodes = $dom->getElementsByTagName('name');
		if ($nameNodes->length > 0)
			$attributesToReturn['name'] = $nameNodes->item(0)->nodeValue;
		
		$descNodes = $dom->getElementsByTagName('description');
		if ($descNodes->length > 0)
			$attributesToReturn['description'] = $descNodes->item(0)->nodeValue;
		
		$creatNodes = $dom->getElementsByTagName('created');
		if ($creatNodes->length > 0)
			$attributesToReturn['created'] = $creatNodes->item(0)->nodeValue;
		
		$histNodes = $dom->getElementsByTagName('history');
		if ($histNodes->length > 0)
			$attributesToReturn['history'] = $histNodes->item(0)->nodeValue;
	
		$attributesToReturn['objName'] = $name;
		$attributesToReturn['folderId'] = $folderId;
		$attributesToReturn['success'] = true;
		
		if (!$onlyDescription)
		{
			$intNodes = $dom->getElementsByTagName('intervals');
			foreach ($intNodes as $intNode)
			{
				$startNodes = $intNode->getElementsByTagName('start');
				if ($startNodes->length <= 0)
					return array('error' => 'Error detected in result file');
					
				$stopNodes = $intNode->getElementsByTagName('stop');
				if ($stopNodes->length <= 0)
					return array('error' => 'Error detected in result file');
					
				// for catalog	
				$paramNodes = $intNode->getElementsByTagName('param');
				$params = array();
				if ($paramNodes->length > 0) 
					foreach ( $paramNodes as $paramNode ) $params[] = $paramNode->nodeValue;
					
					
				$attributesToReturn['intervals'][] = array('start' => $startNodes->item(0)->nodeValue,
									    'stop' => $stopNodes->item(0)->nodeValue,
									    'paramTable' =>  $params);
			}
			// for catalog
			$paramsNodes = $dom->getElementsByTagName('parameter');
			
			if ($paramsNodes->length > 0){
			
			  $paramsArray = array();		 
			  foreach ($paramsNodes as $paramNode) {
			  
			    $oneParam = array();
			    foreach ($paramNode->attributes as $attr) 			    
				    $oneParam[$attr->nodeName] = $attr->nodeValue;
			  
			     if (substr($paramNode->getAttribute('id'),0,8) == 'stat_cov') {		    
				    $oneParam['size'] = '1';
				    $oneParam['name'] = 'Flag';
			      }
			      
			    $paramsArray[] = $oneParam;
			  }
			$attributesToReturn['success'] = true;
			$attributesToReturn['parameters'] = $paramsArray;
			}
			else 
			    return array('error' => 'No information on parameters in result file');	
		}
	
		return  $attributesToReturn;
	}

	
	public function loadIntervalsFromTT($id, $typeTT, $start = NULL, $limit = NULL)
	{
	    if ($typeTT == 'sharedcatalog') {			
		    $pathid = SHAREDPATH.'TT/'.$id;
	      }
	    else {
		    $pathid = USERTTDIR.$id;		
	    }
			  
	      //load intervals from TT id
		if (!file_exists($pathid.'.xml'))
			return array('success' => false, 'message' => "Cannot find Catalog file ".$id);
		
	      $this->objectDom->load($pathid.'.xml');
	      
		if (!($objToGet = $this->objectDom->getElementById($id)))
			return array('success' => false, 'message' => NO_SUCH_ID." ".$id);
	      
	      $xpath = new DOMXPath($this->objectDom);
	      $intervals =  $xpath->query('//intervals');
	      
	      $result = array();
	      
		if (!isset($start) || !isset($limit))
		{
			foreach ($intervals as $interval)
			{
				$startTime = $interval->getElementsByTagName('start')->item(0)->nodeValue;
				$stopTime  = $interval->getElementsByTagName('stop')->item(0)->nodeValue;
				// for catalog	
				$paramNodes = $interval->getElementsByTagName('param');
				$params = array();
				if ($paramNodes->length > 0) 
					foreach ( $paramNodes as $paramNode ) $params[] = $paramNode->nodeValue;
									
				array_push($result, array('start' => $startTime, 'stop' => $stopTime,'paramTable' =>  $params));
				   
			}
		}
		else
	      {
			for ($i = 0; $i < $limit; ++$i)
			{
			  if ($start+$i >= $intervals->length)
				  break;
				$startTime = $intervals->item($start+$i)->getElementsByTagName('start')->item(0)->nodeValue;
				$stopTime  = $intervals->item($start+$i)->getElementsByTagName('stop')->item(0)->nodeValue;
				// for catalog
				$paramNodes = $intervals->item($start+$i)->getElementsByTagName('param');
				$params = array();
				if ($paramNodes->length > 0) 
					foreach ( $paramNodes as $paramNode ) $params[] = $paramNode->nodeValue;
									
				array_push($result, array('start' => $startTime, 'stop' => $stopTime,'paramTable' =>  $params));
			}
		}
		// for catalog : params header
			$paramsNodes =  $xpath->query('//parameters/parameter');
			$paramsArray = array();
			
			if ($paramsNodes->length > 0)
			{									 
				foreach ($paramsNodes as $paramNode) 
				{			  
					$oneParam = array();
					foreach ($paramNode->attributes as $attr) 			    
						$oneParam[$attr->nodeName] = $attr->nodeValue;			  			     			      
					$paramsArray[] = $oneParam;
				}
			}			
			 			
		return array(
			  'totalCount' => $intervals->length,
			  'intervals'  => $result,
			  'parameters' => $paramsArray,
			  'start' => isset($start) ? $start : 0,
			  'limit' => isset($limit) ? $limit : 0,
			  'success'    => true
	      );
	  
      }

        /*
        *   catalog header
        */
	protected function setParamDescription($params) 
	{		
		$paramsElement = $this->objectDom->createElement('parameters');
		foreach ($params as $param) 
		{
			$paramElement = $this->objectDom->createElement('parameter');
			$attrArray = (array)$param;            
			foreach ($attrArray as $key => $value)
				$paramElement->setAttribute($key, $value);
			$paramsElement->appendChild($paramElement);    
		}
	
	return $paramsElement;
	}
        
      protected function createIntervalElement($interval) 
      {
		$newInterval = $this->objectDom->createElement('intervals');
		$newInterval->appendChild($this->objectDom->createElement('start',$interval['start']));
		$newInterval->appendChild($this->objectDom->createElement('stop',$interval['stop']));
		foreach ($interval as $key =>$value) {
			if (substr($key,0,5) == 'param')
			$newInterval->appendChild($this->objectDom->createElement('param', $value));
		
		}
	return $newInterval;
      }
      
	public function createObject($p, $folder)
	{	 
		if ($p -> leaf)
		{
			$result = $this->createParameter($p, $folder);
			if ($result['error'])
				return $result;
				
			$cacheMgr = new CatalogCacheMgr();
			
			if (isset($p->cacheToken) && ($p->cacheToken != ''))
			{
				$resultSaveInt = $cacheMgr->saveInTT($result['id'], "update", $p->cacheToken);
				if (!$resultSaveInt['success'])
				{
					if ($resultSaveInt['message'])
						return array('error' => $resultSaveInt['message']);
					else
						return array('error' => 'Unknown error during intervals save');
				}
			}
			return $result;
		}
		//      else return $this->createFolder($p);
		//TODO check if this is possible?
		else return array('error' => 'createFolder should be called from RENAME');
	
	}
	
	
}
?>