[zi-cvs] packages/com.zzoss.zis.lib ApplicationRepository.php,NONE,1.1 ApplicationXMLOutput.php,NONE,1.1 Config.php,NONE,1.1 DistributionRepository.php,NONE,1.1 DistributionXMLOutput.php,NONE,1.1 PackageRepository.php,NONE,1.1 PackageXMLOutput.php,NONE,1.1 package.xml,NONE,1.1

[email protected] Wed, 14 Jan 2004 08:42:34 -0800
Newsgroups gmane.comp.php.zzoss.installer.cvs
Message-ID <[email protected]>
Update of /cvsroot/zzossinstaller/packages/com.zzoss.zis.lib
In directory sc8-pr-cvs1:/tmp/cvs-serv9308

Added Files:
	ApplicationRepository.php ApplicationXMLOutput.php Config.php 
	DistributionRepository.php DistributionXMLOutput.php 
	PackageRepository.php PackageXMLOutput.php package.xml 
Log Message:
initial release

--- NEW FILE: ApplicationRepository.php ---
<?php
/**
* This is a class for handling I/O functions
* for applications in the repository
*
* @package com.zzoss.installer.server.lib
* @version $Id: ApplicationRepository.php,v 1.1 2004/01/14 16:42:31 czonsius Exp $
* @author Christian Zonsius <[email protected]>
* @copyright 2001-2003 ZZOSS GbR, http://www.zzoss.com
* @license GPL
*/

require_once 'ZZOSS_Installer_Server/Config.php';
require_once 'ZZOSS_Installer_Server/ApplicationXMLOutput.php';
require_once 'ZZOSS_Installer_Server/DistributionRepository.php';

/**   
 * This class provides functions for the application
 * repository
 *   
 * @version  1   
 * @author   Christian Zonsius <[email protected]>; |    
 */   

class ZZOSS_ApplicationRepository
{

	var $connectors;

	function getApplication( $ddo )
	{
		// set criteria
		$criteria = array(
						'_ddo' => '= "'.$ddo.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}
	
	function getApplicationByID( $id )
	{
		// set criteria
		$criteria = array(
						'_id' => '= "'.$id.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}
	
	function getApplicationByName( $name )
	{
		// set criteria
		$criteria = array(
						'name' => '= "'.$name.'"'
					 );
		// retrieve application
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}

	function getApplicationByNameVersion( $name, $version )
	{
		// set criteria
		$criteria = array(
						'name' => '= "'.$name.'"',
						'version' => '= "'.$version.'"'
					);
		// retrieve application
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}
	
	function getApplicationXML( $ddo )
	{
		$application = $this->getApplication( $ddo );
		$xml = $this->application2XML( $application );
		return $xml;
	}
	
	function getApplicationByNameVersionXML( $name, $version )
	{
		$application = $this->getApplicationByNameVersion( $name, $version );
		$xml = $this->application2XML( $application );
		return $xml;
	}
	
	function listApplications( $distribution_ddo = null )
	{
		if($distribution_ddo != null)
		{
			$applications = array();
			$distributionRepository = new ZZOSS_DistributionRepository();
			$distribution = $distributionRepository->getDistribution( $distribution_ddo );
			if(is_array($distribution['application'])) {
				foreach($distribution['application'] as $item) {
					$application = $this->getApplicationByID( $item['id'] );
					array_push( $applications, $application );
				}
			}
		} else {
			$applications = $this->connectors['retrieval']->call('listRecords', array());
		}
		return $applications;
	}
	
	function listApplicationsXML( $distribution_ddo = null )
	{
		$applications = $this->listApplications( $distribution_ddo );
		$xml = $this->applications2XML( $applications );
		return $xml;
	}
	
	function application2XML( $item )
	{
		$xml = $this->output->application2XML( $item );
		return $xml;
	}
	
	function applications2XML( $item )
	{
		$xml = $this->output->applications2XML( $item );
		return $xml;
	}
	
	function removeApplication( $ddo )
	{
		// set criteria
		$criteria = array(
						'_ddo' => '= "'.$ddo.'"'
					 );
		// remove package
		$this->connectors['manipulation']->call('deleteRecord', array( $criteria ) );
		// TODO: unlink tgz / package xml from filesystem
		// TODO: unlink assignments in other applications
	}
	
	function importXML( $fileXML )
	{
		// check if file exists
		if(!file_exists($fileXML)) {
			return PEAR::raiseError('file "'.$fileXML.'" not found');
		}
		// create parser object
        $config = new ZZOSS_InstallerConfig(
			array('cache' => false, 'numeric' => array('maintainer','package','license','copyright'))
		);
        $config->setFile($fileXML);
        $xml = $config->query('/application');
		// add to database
		$item['name'] = $xml['name'];
		$item['summary'] = $xml['summary'];
		$item['description'] = $xml['description'];
		$item['homepage'] = $xml['homepage'];
		$item['version'] = $xml['release']['version'];
		$item['date'] = $xml['release']['date'];
		$item['state'] = $xml['release']['state'];
		$item['notes'] = $xml['release']['notes'];
		// build license array
		$item['license'] = array();
		if(is_array($xml['release']['license'])) {
			foreach($xml['release']['license'] as $license) {
				$subitem = array(
						'name' => $license['#'],
						'url' => $license['@']['url'],
						'version' => $license['@']['version']
				);
				array_push($item['license'], $subitem);
			}
		}
		// build maintainer array
		$item['maintainer'] = $xml['maintainers']['maintainer'];
		// build package package array
		$item['package'] = array();
		if(is_array($xml['release']['packages']['package'])) {
			foreach($xml['release']['packages']['package'] as $package) {
				$subitem = array(
						'id' => $package['@']['name'].'-'.$package['@']['version'],
						'baseinstalldir' => $package['@']['baseinstalldir'],
						'required' => (($package['@']['use'] == 'required') ? 1 : 0)
				);
				array_push($item['package'], $subitem);
			}
		}
		// add record
		$this->addApplication( $item );
		// debug
		// print_r($item);
	}
	
	function updateApplication( $item )
	{
		// update application
		$criteria = array('_ddo' => '= "'.$item['_ddo'].'"');
		$this->connectors['manipulation']->call( 'updateRecord', array( $item, $criteria ));
	}
	
	function addApplication( $item )
	{
		// add application
		$this->connectors['manipulation']->call( 'addRecord', array( $item ));
	}

	function ZZOSS_ApplicationRepository()
	{
		// get manipulation connector
		$this->connectors['manipulation'] = ZZOSS_Framework::connect('zzoss_application_repository/connector/manipulation');
		// get retrieval connector
		$this->connectors['retrieval'] = ZZOSS_Framework::connect('zzoss_application_repository/connector/retrieval');
		// get xml output object
		$this->output =& new ZZOSS_ApplicationXMLOutput();
	}

}

?>
--- NEW FILE: ApplicationXMLOutput.php ---
<?php
/**
* This is a class for handling I/O functions
* for distributions in the repository
*
* @package com.zzoss.zis.lib
* @version $Id: ApplicationXMLOutput.php,v 1.1 2004/01/14 16:42:31 czonsius Exp $
* @author Christian Zonsius <[email protected]>
* @copyright 2001-2003 ZZOSS GbR, http://www.zzoss.com
* @license GPL
*/

/**   
 * This class provides functions for XML export of
 * application
 *   
 * @version  1   
 * @author   Christian Zonsius <[email protected]>; |    
 */   
 
class ZZOSS_ApplicationXMLOutput {

	function _getXMLHeader()
	{
		$xml  = '<?xml version="1.0" encoding="ISO-8859-1" ?>'."\n";
		return $xml;
	}

	function _application2XML( $item )
	{
		$xml .= '<application version="1.0">'."\n";
		$xml .= '	<name>'.$item['name'].'</name>'."\n";
		$xml .= '	<summary>'.$item['summary'].'</summary>'."\n";
		$xml .= '	<description>'.$item['description'].'</description>'."\n";
		$xml .= '	<homepage>'.$item['homepage'].'</homepage>'."\n";
		if(is_array($item["maintainer"])) {
			$xml .= '	<maintainers>'."\n";
			foreach($item["maintainer"] as $maintainer) {
				$xml .= '		<maintainer>'."\n";
				$xml .= '			<user>'.$maintainer['user'].'</user>'."\n";
				$xml .= '			<name>'.$maintainer['name'].'</name>'."\n";
				$xml .= '			<email>'.$maintainer['email'].'</email>'."\n";
				$xml .= '			<role>'.$maintainer['role'].'</role>'."\n";
				$xml .= '		</maintainer>'."\n";
			}
			$xml .= '	</maintainers>'."\n";
		}
		$xml .= '	<release>'."\n";
		$xml .= '		<version>'.$item['version'].'</version>'."\n";
		$xml .= '		<date>'.$item['date'].'</date>'."\n";
		$xml .= '		<licenses>'."\n";
		if(is_array($item["license"])) {
			foreach($item["license"] as $license) {
				$xml .= '		<license url="'.$license['url'].'" version="'.$license['version'].'">'.$license['name'].'</license>'."\n";
			}
		}
		$xml .= '		</licenses>'."\n";
		$xml .= '		<state>'.$item['state'].'</state>'."\n";
		$xml .= '		<notes>'.$item['notes'].'</notes>'."\n";
		$xml .= '		<packages>'."\n";
		if(is_array($item['package'])) {
			foreach($item['package'] as $package) {
				$xml .= '			<package name="'.$package['id'].'" ';
				if($package['required'] == 1) {
					$xml .= 'use="required" ';
				}
				if(strlen($package['baseinstalldir'])>0) {
					$xml .= 'baseinstalldir="'.$package['baseinstalldir'].'" ';
				}
				$xml .= '/>'."\n";
			}
		}
		$xml .= '		</packages>'."\n";
		$xml .= '	</release>'."\n";
		$xml .= '</application>'."\n";
		return $xml;
	}
	function _applicationItem2XML( $item )
	{
		$xml .= '	<application>'."\n";
		$xml .= '		<name>'.$item['name'].'</name>'."\n";
		$xml .= '		<summary>'.$item['summary'].'</summary>'."\n";
		$xml .= '		<description>'.$item['description'].'</description>'."\n";
		$xml .= '		<homepage>'.$item['homepage'].'</homepage>'."\n";
		if(is_array($item["maintainer"])) {
			$xml .= '		<maintainers>'."\n";
			foreach($item["maintainer"] as $maintainer) {
				$xml .= '			<maintainer>'."\n";
				$xml .= '				<user>'.$maintainer['user'].'</user>'."\n";
				$xml .= '				<name>'.$maintainer['name'].'</name>'."\n";
				$xml .= '				<email>'.$maintainer['email'].'</email>'."\n";
				$xml .= '				<role>'.$maintainer['role'].'</role>'."\n";
				$xml .= '			</maintainer>'."\n";
			}
			$xml .= '		</maintainers>'."\n";
		}
		$xml .= '		<release>'."\n";
		$xml .= '			<version>'.$item['version'].'</version>'."\n";
		$xml .= '			<date>'.$item['date'].'</date>'."\n";
		$xml .= '			<licenses>'."\n";
		if(is_array($item["license"])) {
			foreach($item["license"] as $license) {
				$xml .= '			<license url="'.$license['url'].'" version="'.$license['version'].'">'.$license['name'].'</license>'."\n";
			}
		}
		$xml .= '			</licenses>'."\n";
		$xml .= '			<state>'.$item['state'].'</state>'."\n";
		$xml .= '			<notes>'.$item['notes'].'</notes>'."\n";
		$xml .= '		</release>'."\n";
		$xml .= '		<filelist>'."\n";
		$xml .= '			<descriptor role="application">'.ZZOSS_Framework::conf('zzoss_framework/paths/url').'get/application/'.$item['name'].'-'.$item['version'].'/application.xml</descriptor>'."\n";
		$xml .= '			<descriptor role="packages">'.ZZOSS_Framework::conf('zzoss_framework/paths/url').'get/application/'.$item['name'].'-'.$item['version'].'/packages.xml</descriptor>'."\n";
		$xml .= '		</filelist>'."\n";
		$xml .= '	</application>'."\n";
		return $xml;
	}
	
	function application2XML( $item )
	{
		$xml  = $this->_getXMLHeader();
		$xml .= $this->_application2XML( $item );
		return $xml;
	}

	function applications2XML( $items )
	{
		$xml  = $this->_getXMLHeader();
		$xml .= '<applications version="1.0">'."\n";
		if(is_array($items)) {
			foreach($items as $key => $item) {
				if(is_integer($key)) {
					$xml .= $this->_applicationItem2XML( $item );
				}
			}
		}
		$xml .= '</applications>';
		return $xml;
	}
}
?>
--- NEW FILE: Config.php ---
<?php  
    /*   
    Copyright (C) 2001-2003 ZZOSS GbR, http://www.zzoss.com
    ----------------------------------------------------------------------   
    This program is free software; you can redistribute it and/or   
    modify it under the terms of the GNU General Public License   
    as published by the Free Software Foundation; either version 2   
    of the License, or (at your option) any later version.   
    ----------------------------------------------------------------------   
    $Id: Config.php,v 1.1 2004/01/14 16:42:31 czonsius Exp $   
    */

require_once 'ZZOSS_Config/Config.php';

class ZZOSS_InstallerConfig extends ZZOSS_Config
{
    var $cache_dir;
    
    function ZZOSS_InstallerConfig($options = array())
    {
        $this->setOptions($options);
    }
    
    function setCacheDir($dir)
    {
        $this->cache_dir = $dir;
    }
    
    function setFile($file)
    {
        $this->file = $file;
    }
    
    function writeCacheUnique()
    {
        // compose the name of the cache file
        $tmpPath = $this->cache_dir;
        $parts = pathinfo($this->file);
        if(strlen($tmpPath)<1) {
            $tmpPath = $parts['dirname'].'/';
        } else {
            $cache_file_prefix = md5($parts['dirname']).'_';
        }
        $cache_file = $tmpPath.$cache_file_prefix.substr($parts['basename'],0,strrpos($parts['basename'],'.')).'.reg';
        return $this->writeCache($cache_file);
    }
}
?>
--- NEW FILE: DistributionRepository.php ---
<?php
/**
* This is a class for handling I/O functions
* for distributions in the repository
*
* @package com.zzoss.zis.lib
* @version $Id: DistributionRepository.php,v 1.1 2004/01/14 16:42:31 czonsius Exp $
* @author Christian Zonsius <[email protected]>
* @copyright 2001-2003 ZZOSS GbR, http://www.zzoss.com
* @license GPL
*/

require_once 'ZZOSS_Installer_Server/Config.php';
require_once 'ZZOSS_Installer_Server/DistributionXMLOutput.php';

/**   
 * This class provides functions for the distribution
 * repository
 *   
 * @version  1   
 * @author   Christian Zonsius <[email protected]>; |    
 */   
 
class ZZOSS_DistributionRepository {

	var $connectors;

	var $output;
	
	function getDistribution( $ddo )
	{
		// set criteria
		$criteria = array(
						'_ddo' => '= "'.$ddo.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}

	function getDistributionByID( $id )
	{
		// set criteria
		$criteria = array(
						'_id' => '= "'.$id.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}
	
	function getDistributionByName( $name )
	{
		// set criteria
		$criteria = array(
						'name' => '= "'.$name.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}

	function getDistributionByNameVersion( $name, $version )
	{
		// set criteria
		$criteria = array(
						'name' => '= "'.$name.'"',
						'version' => '= "'.$version.'"'
					 );
		// retrieve distribution
		$distribution = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $distribution;
	}
	
	function getDistributionByNameVersionXML( $name, $version )
	{
		$array = $this->getDistributionByNameVersion( $name, $version );
		$xml = $this->distribution2XML( $array );
		return $xml;
	}
	
	function distribution2XML( $distribution )
	{
		$xml = $this->output->distribution2XML( $distribution );
		return $xml;
	}
	
	function distributions2XML( $distributions )
	{
		$xml = $this->output->distributions2XML( $distributions );
		return $xml;
	}
	
	function removeDistribution( $ddo )
	{
		// set criteria
		$criteria = array(
						'_ddo' => '= "'.$ddo.'"'
					 );
		// TODO: extend zzoss repository connector with deleteRecords method
		$this->connectors['manipulation']->call('deleteRecord', array( $criteria ) );
	}
	
	function addDistribution( $item )
	{
		$this->connectors['manipulation']->call( 'addRecord', array( $item ));
	}
	
	function importXML( $fileXML )
	{
		// check if file exists
		if(!file_exists($fileXML)) {
			return PEAR::raiseError('file "'.$fileXML.'" not found');
		}
		// create parser object
        $config = new ZZOSS_InstallerConfig(
			array('cache' => false, 'numeric' => array('file','descriptor'))
		);
        $config->setFile($fileXML);
        $xml = $config->query('/distribution');
		// add to database
		$item['name'] = $xml['name'];
		$item['summary'] = $xml['summary'];
		$item['description'] = $xml['description'];
		$item['homepage'] = $xml['homepage'];
		$item['version'] = $xml['release']['version'];
		$item['date'] = $xml['release']['date'];
		$item['state'] = $xml['release']['state'];
		$item['notes'] = $xml['release']['notes'];
		// TODO: build application array
		$item['application'] = array();
		// add distribution
		$this->addDistribution( $item );
		// debug
		print_r($item);

	}
	
	function listDistributions()
	{
		// get distributions
		$distributions = $this->connectors['retrieval']->call('listRecords', array());
		return $distributions;
	}
	
	function listDistributionsXML()
	{
		// get distributions
		$distributions = $this->listDistributions();
		$xml = $this->output->distributions2XML($distributions);
		return $xml;
	}
	
	function assignApplication( $ddo_distribution, $ddo_application )
	{
		// TODO
	}

	function unassignApplication( $ddo_distribution, $ddo_application )
	{
		// TODO
	}

	function ZZOSS_DistributionRepository()
	{
		// get manipulation connector
		$this->connectors['manipulation'] = ZZOSS_Framework::connect('zzoss_distribution_repository/connector/manipulation');
		// get retrieval connector
		$this->connectors['retrieval'] = ZZOSS_Framework::connect('zzoss_distribution_repository/connector/retrieval');
		// get xml output object
		$this->output =& new ZZOSS_DistributionXMLOutput();
	}

}

?>
--- NEW FILE: DistributionXMLOutput.php ---
<?php
/**
* This is a class for handling I/O functions
* for distributions in the repository
*
* @package com.zzoss.zis.lib
* @version $Id: DistributionXMLOutput.php,v 1.1 2004/01/14 16:42:31 czonsius Exp $
* @author Christian Zonsius <[email protected]>
* @copyright 2001-2003 ZZOSS GbR, http://www.zzoss.com
* @license GPL
*/

/**   
 * This class provides functions for XML export of
 * distributions
 *   
 * @version  1   
 * @author   Christian Zonsius <[email protected]>; |    
 */   
 
class ZZOSS_DistributionXMLOutput {

	function _getXMLHeader()
	{
		$xml  = '<?xml version="1.0" encoding="ISO-8859-1" ?>'."\n";
		return $xml;
	}

	function _distribution2XML( $item, $version = true )
	{
		$xml .= '<distribution'; 
		if($version) {
			$xml .= ' version="1.0"';
		}
		$xml .= '>'."\n";
		$xml .= '	<name>'.$item['name'].'</name>'."\n";
		$xml .= '	<summary>'.$item['summary'].'</summary>'."\n";
		$xml .= '	<description>'.$item['description'].'</description>'."\n";
		$xml .= '	<homepage>'.$item['homepage'].'</homepage>'."\n";
		if(is_array($item["maintainer"]) && count($item["maintainer"])) {
			$xml .= '	<maintainers>'."\n";
			foreach($item["maintainer"] as $maintainer) {
				$xml .= '		<maintainer>'."\n";
				$xml .= '			<user>'.$maintainer['user'].'</user>'."\n";
				$xml .= '			<name>'.$maintainer['name'].'</name>'."\n";
				$xml .= '			<email>'.$maintainer['email'].'</email>'."\n";
				$xml .= '			<role>'.$maintainer['role'].'</role>'."\n";
				$xml .= '		</maintainer>'."\n";
			}
			$xml .= '	<maintainers>'."\n";
		}
		$xml .= '	<release>'."\n";
		$xml .= '		<version>'.$item['version'].'</version>'."\n";
		$xml .= '		<date>'.$item['date'].'</date>'."\n";
		$xml .= '		<state>'.$item['state'].'</state>'."\n";
		$xml .= '		<notes>'.$item['notes'].'</notes>'."\n";
		$xml .= '	</release>'."\n";
		$xml .= '	<filelist>'."\n";
		$xml .= '		<descriptor role="applications">'.ZZOSS_Framework::conf('zzoss_framework/paths/url').'get/distribution/'.$item['name'].'-'.$item['version'].'/applications.xml</descriptor>'."\n";
		$xml .= '	</filelist>'."\n";
		$xml .= '</distribution>'."\n";
		return $xml;
	}

	function distribution2XML( $item )
	{
		$xml  = $this->_getXMLHeader();
		$xml .= $this->_distribution2XML( $item );
		return $xml;
	}
	
	function distributions2XML( $items )
	{
		$xml = $this->_getXMLHeader();
		$xml .= '<distributions version="1.0">'."\n";
		if(is_array($items)) {
			foreach($items as $key => $item) {
				if(is_integer($key)) {
					$xml .= $this->_distribution2XML( $item, false );
				}
			}
		}
		$xml .= '</distributions>'."\n";
		return $xml;
	}
}
?>
--- NEW FILE: PackageRepository.php ---
<?php
/**
* This is a class for handling i/o functions
* for packages in the repository
*
* @package com.zzoss.zis.lib
* @version $Id: PackageRepository.php,v 1.1 2004/01/14 16:42:31 czonsius Exp $
* @author Christian Zonsius <[email protected]>
* @copyright 2001-2003 ZZOSS GbR, http://www.zzoss.com
* @license GPL
*/

require_once 'Archive/Tar.php';
require_once 'ZZOSS_Installer_Server/Config.php';
require_once 'ZZOSS_Installer_Server/ApplicationRepository.php';
require_once 'ZZOSS_Installer_Server/PackageXMLOutput.php';

/**   
 * This class provides functions for the package
 * repository
 *   
 * @version  1   
 * @author   Christian Zonsius <[email protected]>; |    
 */   

class ZZOSS_PackageRepository
{

	var $connectors;

	var $dirPackageXMLSource;
	
	var $dirPackageFileSource;
	
	function getPackage( $ddo )
	{
		// set criteria
		$criteria = array(
						'_ddo' => '= "'.$ddo.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}

	function getPackageByID( $id )
	{
		// set criteria
		$criteria = array(
						'_id' => '= "'.$id.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}

	function getPackageByName( $name )
	{
		// set criteria
		$criteria = array(
						'name' => '= "'.$name.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}

	function getPackageByNameVersion( $name, $version )
	{
		// set criteria
		$criteria = array(
						'name' => '= "'.$name.'"',
						'version' => '= "'.$version.'"'
					 );
		// retrieve package
		$package = $this->connectors['retrieval']->call('getRecord', array( $criteria ) );
		return $package;
	}
	
	function getPackageByNameVersionXML( $name, $version )
	{
		$package = $this->getPackageByNameVersion( $name, $version );
		if(file_exists($this->dirPackageXMLSource.$package['xml_url'])) {
			$xml = file_get_contents($this->dirPackageXMLSource.$package['xml_url']);
		}
		return $xml;
	}
	
	function listPackages($application_ddo = null)
	{
		if($application_ddo != null) {
			$packages = array();
			$applicationRepository = new ZZOSS_ApplicationRepository();
			$application = $applicationRepository->getApplication( $application_ddo );
			if(is_array($application['package'])) {
				foreach($application['package'] as $item) {
					$package = $this->getPackageByID( $item['id'] );
					array_push( $packages, $package );
				}
			}
		} else {
			$packages = $this->connectors['retrieval']->call('listRecords', array());
		}
		return $packages;
	}
	
	function getXMLArray( $package )
	{
		// compose path
		$fileXML = $this->dirPackageXMLSource.$package['name'].'-'.$package['version'].'.xml';
		if(file_exists($fileXML)) {
			// create parser object
	        $config = new ZZOSS_InstallerConfig(array('cache' => false, 'numeric' => array('dep','file', 'build', 'maintainer')));
	        $config->setFile($fileXML);
    	    $xml = $config->query('/package');
			return $xml;
		} else {
			return false;
		}
	}
	
	function listPackagesXML($application_ddo = null)
	{
		$packages = $this->listPackages($application_ddo);
		$xml = $this->packages2XML( $packages );
		return $xml;
	}
	
	function removePackage( $ddo )
	{
		// set criteria
		$criteria = array(
						'_ddo' => $ddo
					 );
		// remove package
		// TODO: extend zzoss repository connector with deleteRecords method
		$this->connectors['manipulation']->call('deleteRecords', array( $criteria ) );
		// TODO: unlink tgz / package xml from filesystem
		// TODO: unlink assignments in other applications
	}
	
	function importPackage( $fileTgz )
	{
		// check if file exists
		if(!file_exists($fileTgz)) {
			return PEAR::raiseError('file "'.$fileTgz.'" not found');
		}
		// get temporary directory
		$tmp_dir  = ZZOSS_Framework::conf('zzoss_framework/paths/data').'tmp/';
		$tmp_dir .= uniqID('tmp').'/';
		ZZOSS_FrameworkUtils::mkdir($tmp_dir);
		// extract tgz file
		$tar = new Archive_Tar($fileTgz);
        if (!@$tar->extractModify($tmp_dir)) {
            return PEAR::raiseError("unable to unpack $fileTgz");
        }
		// check for package.xml
		$fileXML = $tmp_dir.'package.xml';
		if(!file_exists($fileXML)) {
			return PEAR::raiseError('invalid package "'.$fileTgz.'"');
		}
		// create parser object
        $config = new ZZOSS_InstallerConfig(array('cache' => false, 'numeric' => array('dep','file', 'build', 'maintainer')));
        $config->setFile($fileXML);
        $xml = $config->query('/package');
		// move file to tgz directory
		$fileXML_norm = $xml['name'].'-'.$xml['release']['version'].'.xml';
		$fileTgz_norm = $xml['name'].'-'.$xml['release']['version'].'.tgz';
		if(!is_dir($this->dirPackageXMLSource)) {
			ZZOSS_FrameworkUtils::mkdir($this->dirPackageXMLSource);
		}
		if(!is_dir($this->dirPackageFileSource)) {
			ZZOSS_FrameworkUtils::mkdir($this->dirPackageFileSource);
		}
		ZZOSS_FrameworkUtils::copy($fileXML, $this->dirPackageXMLSource.$fileXML_norm);
		ZZOSS_FrameworkUtils::copy($fileTgz, $this->dirPackageFileSource.$fileTgz_norm);
		// finally remove temporary directory
		ZZOSS_FrameworkUtils::rmdir($tmp_dir);
		// add package to repository
		$item = array();
		$item['name'] = $xml['name'];
		$item['version'] = $xml['release']['version'];
		$item['summary'] = $xml['summary'];
		$item['state'] = $xml['release']['state'];
		$this->_addPackage( $item, $fileXML_norm, $fileTgz_norm );
		// debug
		print_r($xml);
	}
	
	function _addPackage( $item, $fileXML, $fileTgz )
	{
		// check file paths
		if(!file_exists($this->dirPackageXMLSource.$fileXML)) {
			return PEAR::raiseError('file "'.$this->dirPackageXMLSource.$fileXML.'" not found');
		}
		if(!file_exists($this->dirPackageFileSource.$fileTgz)) {
			return PEAR::raiseError('file "'.$this->dirPackageFileSource.$fileTgz.'" not found');
		}
		// assign file paths to item
		$item['xml_url'] = $fileXML;
		$item['download_url'] = $fileTgz;
		$this->connectors['manipulation']->call( 'addRecord', array( $item ));
	}

	function packages2XML($items)
	{
		$xml = $this->output->packages2XML($items);
		return $xml;
	}
	
	function ZZOSS_PackageRepository()
	{
		// get manipulation connector
		$this->connectors['manipulation'] = ZZOSS_Framework::connect('zzoss_package_repository/connector/manipulation');
		// get retrieval connector
		$this->connectors['retrieval'] = ZZOSS_Framework::connect('zzoss_package_repository/connector/retrieval');
		// set xml directory
		$this->dirPackageXMLSource = ZZOSS_Framework::conf('zzoss_framework/paths/data').'zzoss_installer_server/xml/';
		// set tgz directory
		$this->dirPackageFileSource = ZZOSS_Framework::conf('zzoss_framework/paths/data').'zzoss_installer_server/tgz/';
		// set output object
		$this->output =& new ZZOSS_PackageXMLOutput();
	}

}

?>
--- NEW FILE: PackageXMLOutput.php ---
<?php
/**
* This is a class for handling I/O functions
* for distributions in the repository
*
* @package com.zzoss.zis.lib
* @version $Id: PackageXMLOutput.php,v 1.1 2004/01/14 16:42:31 czonsius Exp $
* @author Christian Zonsius <[email protected]>
* @copyright 2001-2003 ZZOSS GbR, http://www.zzoss.com
* @license GPL
*/

/**   
 * This class provides functions for XML export of
 * packages
 *   
 * @version  1   
 * @author   Christian Zonsius <[email protected]>; |    
 */   
 
class ZZOSS_PackageXMLOutput {

	function _getXMLHeader()
	{
		$xml  = '<?xml version="1.0" encoding="ISO-8859-1" ?>'."\n";
		return $xml;
	}

	function _packageItem2XML( $package )
	{
		$xml  = '	<package>'."\n";
		$xml .= '		<name>'.$package['name'].'</name>'."\n";
		$xml .= '		<summary>'.$package['summary'].'</summary>'."\n";
		$xml .= '		<release>'."\n";
		$xml .= '			<version>'.$package['version'].'</version>'."\n";
		$xml .= '			<state>'.$package['state'].'</state>'."\n";
		$xml .= '		</release>'."\n";
		$xml .= '		<filelist>'."\n";
		$xml .= '			<descriptor type="package">'.ZZOSS_Framework::conf('zzoss_framework/paths/url').'get/package/'.$package['name'].'-'.$package['version'].'/package.xml</descriptor>'."\n";
		$xml .= '		</filelist>'."\n";
		$xml .= '	</package>'."\n";
		return $xml;
	}
	
	function packages2XML( $packages )
	{
		$xml  = $this->_getXMLHeader();
		$xml .= '<packages version="1.0">'."\n";
		if(is_array($packages)) {
			foreach($packages as $key => $package) {
				if(is_integer($key)) {
					$xml .= $this->_packageItem2XML( $package );
				}
			}
		}
		$xml .= '</packages>'."\n";
		return $xml;
	}

}
?>
--- NEW FILE: package.xml ---
<?xml version="1.0" encoding="ISO-8859-1" ?>
<package version="1.0"
	xmlns="http://www.zzoss.com/NS/installer/package/">
	<name>com.zzoss.zis.lib</name>
	<summary>ZZ/OSS Installer Server Lib files</summary>
	<description>This package contains libraries for the ZZ/OSS Installer Server.</description>
	<maintainers>
		<maintainer>
			<user>czonsius</user>
			<name>Christian Zonsius</name>
			<email>[email protected]</email>
			<role>developer</role>
		</maintainer>
	</maintainers>
	<release>
		<version>0.5</version>
		<date>2004-01-04</date>
		<license url="http://www.gnu.org/licenses/gpl.txt" version="2">GPL</license>
		<state>beta</state>
		<notes>Initial release.</notes>
		<copyright>
			<holder year="2003" url="http://www.zzoss.com">ZZ/OSS Information Networking GbR</holder>
		</copyright>
		<deps>
	      <dep type="pkg" rel="ge" version="0.5">com.zzoss.application_repository.build</dep>
	      <dep type="pkg" rel="ge" version="0.5">com.zzoss.distribution_repository.build</dep>
    	  <dep type="pkg" rel="ge" version="0.5">com.zzoss.package_repository.build</dep>
	    </deps>
    <filelist>
      	<file role="php" baseinstalldir="ZZOSS_Installer_Server" name="ApplicationRepository.php"/>
      	<file role="php" baseinstalldir="ZZOSS_Installer_Server" name="ApplicationXMLOutput.php"/>
		<file role="php" baseinstalldir="ZZOSS_Installer_Server" name="Config.php"/>
		<file role="php" baseinstalldir="ZZOSS_Installer_Server" name="DistributionRepository.php"/>
		<file role="php" baseinstalldir="ZZOSS_Installer_Server" name="DistributionXMLOutput.php"/>
		<file role="php" baseinstalldir="ZZOSS_Installer_Server" name="PackageRepository.php"/>
		<file role="php" baseinstalldir="ZZOSS_Installer_Server" name="PackageXMLOutput.php"/>
    </filelist>
	</release>
</package>




-------------------------------------------------------
This SF.net email is sponsored by: Perforce Software.
Perforce is the Fast Software Configuration Management System offering
advanced branching capabilities and atomic changes on 50+ platforms.
Free Eval! http://www.perforce.com/perforce/loadprog.html