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