<?php 
require_once (__DIR__ . '/../anyem.resource.api/IResource.php'); 
require_once (__DIR__ . '/../anyem.resource.impl/ResourceIdentifierImpl.php'); 
require_once (__DIR__ . '/../anyem.utils/AnyemDateTimeUtilsImpl.php'); 
 
/** 
 * Description of ResourceImpl 
 * 
 * @author Anis.Halayem 
 */ 
class ResourceImpl extends ResourceIdentifierImpl { 
    /** 
     * 
     * @var ResourceIdentifierImpl 
     */ 
    private $_resourceIdentifier    = NULL; 
    private $_data_m                = NULL  ; 
     
    private $_reserved_b            = FALSE ; 
    private $_reservation_date      = NULL  ; 
    private $_reservation_time      = NULL  ; 
    private $_unreservation_date    = NULL  ; 
    private $_unreservation_time    = NULL  ; 
     
    private $_transaction_id_l      = NULL; 
     
    public function __construct ($resourceIdentifier, $data) { 
        $this->_resourceIdentifier  = $resourceIdentifier; 
        $this->_data_m              = $data; 
        $this->_transaction_id_l    = uniqid ("", TRUE); 
    } 
 
    public function reserve($transaction_id_l) { 
        if ($this->_reserved_b === TRUE) { 
            throw new Exception(sprintf ("resource already reserved, by [TransactionId]: <%s>", $this->_transaction_id_l)); 
 
        } 
        $this->_transaction_id_l    = $transaction_id_l; 
        $this->_reserved_b          = TRUE; 
        $this->_reservation_date    = date (AnyemDateTimeUtilsImpl::DATE_FORMAT, time()); 
        $this->_reservation_time    = date (AnyemDateTimeUtilsImpl::TIME_FORMAT, time()); 
    } 
    public function unreserve($transaction_id_l) { 
        if ($this->_reserved_b === FALSE) { 
            throw new Exception ("resource is already unreserved"); 
        } 
        if ($this->_reserved_b === TRUE && 
            $this->_transaction_id_l !== $transaction_id_l) { 
            $errorMessage = "resource reserved in another transaction, unreservation is not permitted\n" . 
                            "Reserved by this <TransactionID>              : " . $this->_transaction_id_l . "\n" . 
                            "Tried to unreserve it by this <TransactionID> : " . $transaction_id_l        . "\n" ; 
            throw new Exception ($errorMessage); 
        } 
        $this->_reserved_b            = FALSE; 
        $this->_transaction_id_l      = NULL; 
        $this->_reservation_date      = NULL; 
        $this->_reservation_time      = NULL; 
        $this->_unreservation_date    = date (AnyemDateTimeUtilsImpl::DATE_FORMAT, time()); 
        $this->_unreservation_time    = date (AnyemDateTimeUtilsImpl::TIME_FORMAT, time()); 
    } 
     
    /** 
     *  
     * @return ResourceIdentifierImpl 
     */ 
    public function getResourceIdenitifier() { 
        return $this->_resourceIdentifier; 
    } 
     
    /** 
     *  
     * @param string $data_s 
     */ 
    public function setData($data_s) { 
        $this->_data_m = $data_s; 
    } 
    public function getData() { 
        return $this->_data_m; 
    } 
     
    public function getTransactionId() { 
        return $this->_transaction_id_l; 
    } 
    public function setTransactionId ($transaction_id_l) { 
        $this->_transaction_id_l = $transaction_id_l; 
    } 
     
    public function toString() { 
        $str = "\n" . 
               "URl: "              . $this->_resourceIdentifier->getUrl()         . ", "      . 
               "Name Space: "       . $this->_resourceIdentifier->getNamespace()   . ", "      . 
               "Variable Name: "    . $this->_resourceIdentifier->getName()        . ", "      . 
               "Data: "             . print_r ($this->_data_m, TRUE)               . "\n"      ; 
        return $str; 
    } 
}
 
 |