| 
<?phprequire_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;
 }
 }
 |