PHP Classes
Icontem

File: lib/Process.class.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of David N. Q. Duong  >  XIRE  >  lib/Process.class.php  
File: lib/Process.class.php
Role: Class source
Content type: text/plain
Description: Process Class
Class: XIRE
Template engine extensible with plug-in classes
 

Contents

Class file image Download
<?php
/* --------------------------------------------------------------------------
 * XIRE - eXtendable Information Rendering Engine
 * --------------------------------------------------------------------------
 * LICENSE
 * Copyright (C) 2006  David Duong
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * -------------------------------------------------------------------------- */
require_once 'PluginManager.class.php';

/**
 * A process that performs a breadth first traversal processing any XIRL nodes found. There
 * can be multiple processes created by one template. Should only be created by 
 * {@see XIRE_Template::createProcess}.
 */
class XIRE_Process {
    
private $id;
    
private $template;
    
private $queue;
    
private static $pluginManager;
    
private static $lastId 0;

    
public function __construct (XIRE_Template $template) {
        isset(
self::$pluginManager) or self::$pluginManager = new XIRE_PluginManager;
        
$this->id self::$lastId++;    // Generate process id
        
$this->template $template;
        
$this->queue = array();         // Initiate queue
    
}

    
public function __get ($name) {
        if (
$name === 'template') {
            return 
$this->template;
        }
    }

    
/**
     * Adds a node to the processor's queue
     * @throws DOM_WRONG_DOCUMENT_ERR if the given node does not belong to the template's
     * document
     */
    
public function enqueue (DOMNode $node) {
        if (
$node->ownerDocument !== $this->template->document) {
            
throw new DOM_WRONG_DOCUMENT_ERR;
        }
        
$this->queue[] = $node;
    }

    
/**
     * Performs breadth-first traversal on DOM and search for translatable elements, ie.
     * those with the xire namespace, and calls the plugin that corresponds with the node's
     * local name, ie. the name without the prefix. This will let the plugin deal with the
     * child nodes so they will not be processed.  Note: attributes are also considered 
     * nodes.
     *
     * This does not check for loops (which should not exist).
     */
    
public function process () {
        while (!empty(
$this->queue)) {
            
$node array_shift($this->queue);
            if (
$node->parentNode !== null) {
                if (
$node->namespaceURI === XIRL_NAMESPACE) {
                    
self::$pluginManager->call($node$this);
                } else {
                    if (
$node->childNodes instanceof DOMNodelist) {
                        foreach (
$node->childNodes as $child) {
                            
$this->queue[] = $child;
                        }
                    }
                    if (
$node->attributes instanceof DOMNodelist) {
                        foreach (
$node->attributes as $child) {
                            
$this->queue[] = $child;
                        }
                    }
                }
            }
        }
    }
}
/**
 * An exception that occured during the processing of the template
 */
class XIRE_ProcessingNodeException extends XIRE_Exception {
    
private $node;

    
public function __construct($message 'Node processing exception'DOMNode $node null$code 0) {
        
$this->node $node;
        
parent::__construct($message$code);
    }

    
/**
     * @return the node that caused the processing error
     */
    
public function getNode () {
        return 
$this->node;
    }
}

?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products