CatalogMgr.php 6.95 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 == 'sharedtimeTable') {			
// 		    $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 TT 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;
// 				  array_push($result, array('start' => $startTime, 'stop' => $stopTime));
// 			  }
// 	      }
// 	      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;
// 			  array_push($result, array('start' => $startTime, 'stop' => $stopTime));
// 		  }
// 	      }
// 	      
// 	      return array(
// 			  'totalCount' => $intervals->length,
// 			  'intervals'  => $result,
// 			  'start' => isset($start) ? $start : 0,
// 			  'limit' => isset($limit) ? $limit : 0,
// 			  'success'    => true
// 	      );
// 	  
//       }

        /*
        *   catalog header
        */
        protected function setParamDescription($params) {
                  
          $paramsElement = $this->objectDom->createElement('parametres');
          foreach ($params as $param) {
             $paramElement = $this->objectDom->createElement('param');
             $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');
	
	}
	
	
}
?>