356 lines
13 KiB
PHP
356 lines
13 KiB
PHP
<?php
|
||
|
||
/**
|
||
* LICENSE: The MIT License (the "License")
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
* https://github.com/azure/azure-storage-php/LICENSE
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*
|
||
* PHP version 5
|
||
*
|
||
* @category Microsoft
|
||
* @package MicrosoftAzure\Storage\Blob\Models
|
||
* @author Azure Storage PHP SDK <dmsh@microsoft.com>
|
||
* @copyright 2016 Microsoft Corporation
|
||
* @license https://github.com/azure/azure-storage-php/LICENSE
|
||
* @link https://github.com/azure/azure-storage-php
|
||
*/
|
||
|
||
namespace MicrosoftAzure\Storage\Blob\Models;
|
||
|
||
use MicrosoftAzure\Storage\Blob\Internal\BlobResources as Resources;
|
||
use MicrosoftAzure\Storage\Common\Internal\Validate;
|
||
use MicrosoftAzure\Storage\Common\Internal\WindowsAzureUtilities;
|
||
|
||
/**
|
||
* Represents a set of access conditions to be used for operations against the
|
||
* storage services.
|
||
*
|
||
* @category Microsoft
|
||
* @package MicrosoftAzure\Storage\Blob\Models
|
||
* @author Azure Storage PHP SDK <dmsh@microsoft.com>
|
||
* @copyright 2016 Microsoft Corporation
|
||
* @license https://github.com/azure/azure-storage-php/LICENSE
|
||
* @link https://github.com/azure/azure-storage-php
|
||
*/
|
||
class AccessCondition
|
||
{
|
||
private $_header = Resources::EMPTY_STRING;
|
||
private $_value;
|
||
|
||
/**
|
||
* Constructor
|
||
*
|
||
* @param string $headerType header name
|
||
* @param string $value header value
|
||
*
|
||
* @internal
|
||
*/
|
||
protected function __construct($headerType, $value)
|
||
{
|
||
$this->setHeader($headerType);
|
||
$this->setValue($value);
|
||
}
|
||
|
||
/**
|
||
* Specifies that no access condition is set.
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function none()
|
||
{
|
||
return new AccessCondition(Resources::EMPTY_STRING, null);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the resource's ETag value matches the specified ETag value.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>If-Match</i> conditional header. If this access condition is set, the
|
||
* operation is performed only if the ETag of the resource matches the specified
|
||
* ETag.
|
||
* <p>
|
||
* For more information, see
|
||
* <a href= 'http://go.microsoft.com/fwlink/?LinkID=224642&clcid=0x409'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param string $etag a string that represents the ETag value to check.
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function ifMatch($etag)
|
||
{
|
||
return new AccessCondition(Resources::IF_MATCH, $etag);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the resource has been modified since the specified time.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>If-Modified-Since</i> conditional header. If this access condition is set,
|
||
* the operation is performed only if the resource has been modified since the
|
||
* specified time.
|
||
* <p>
|
||
* For more information, see
|
||
* <a href= 'http://go.microsoft.com/fwlink/?LinkID=224642&clcid=0x409'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param \DateTime $lastModified date that represents the last-modified
|
||
* time to check for the resource.
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function ifModifiedSince(\DateTime $lastModified)
|
||
{
|
||
Validate::isDate($lastModified);
|
||
return new AccessCondition(
|
||
Resources::IF_MODIFIED_SINCE,
|
||
$lastModified
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the resource's ETag value does not match the specified ETag value.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>If-None-Match</i> conditional header. If this access condition is set, the
|
||
* operation is performed only if the ETag of the resource does not match the
|
||
* specified ETag.
|
||
* <p>
|
||
* For more information,
|
||
* see <a href= 'http://go.microsoft.com/fwlink/?LinkID=224642&clcid=0x409'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param string $etag string that represents the ETag value to check.
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function ifNoneMatch($etag)
|
||
{
|
||
return new AccessCondition(Resources::IF_NONE_MATCH, $etag);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the resource has not been modified since the specified time.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>If-Unmodified-Since</i> conditional header. If this access condition is
|
||
* set, the operation is performed only if the resource has not been modified
|
||
* since the specified time.
|
||
* <p>
|
||
* For more information, see
|
||
* <a href= 'http://go.microsoft.com/fwlink/?LinkID=224642&clcid=0x409'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param \DateTime $lastModified date that represents the last-modified
|
||
* time to check for the resource.
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function ifNotModifiedSince(\DateTime $lastModified)
|
||
{
|
||
Validate::isDate($lastModified);
|
||
return new AccessCondition(
|
||
Resources::IF_UNMODIFIED_SINCE,
|
||
$lastModified
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the operation would cause the blob to exceed that limit or if the append
|
||
* position is equal to this number.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>x-ms-blob-condition-appendpos</i> conditional header. If this access condition
|
||
* is set, the operation is performed only if the append position is equal to this number
|
||
* <p>
|
||
* For more information,
|
||
* see <a href= 'https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/append-block'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param int $appendPosition int that represents the append position
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function appendPosition($appendPosition)
|
||
{
|
||
return new AccessCondition(Resources::MAX_APPEND_POSITION, $appendPosition);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the operation would cause the blob to exceed that limit or if the blob size
|
||
* is already greater than the value specified in this header.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>x-ms-blob-condition-maxsize</i> conditional header. If this access condition
|
||
* is set, the operation is performed only if the operation would cause the blob
|
||
* to exceed that limit or if the blob size is already greater than the value
|
||
* specified in this header.
|
||
* <p>
|
||
* For more information,
|
||
* see <a href= 'https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/append-block'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param int $maxBlobSize int that represents the max blob size
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function maxBlobSize($maxBlobSize)
|
||
{
|
||
return new AccessCondition(Resources::MAX_BLOB_SIZE, $maxBlobSize);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the blob’s sequence number is less than the specified value.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>x-ms-if-sequence-number-lt</i> conditional header. If this access condition
|
||
* is set, the operation is performed only if the blob’s sequence number is less
|
||
* than the specified value.
|
||
* <p>
|
||
* For more information,
|
||
* see <a href= 'https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/put-page'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param int $sequenceNumber int that represents the sequence number value to check.
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function ifSequenceNumberLessThan($sequenceNumber)
|
||
{
|
||
return new AccessCondition(Resources::SEQUENCE_NUMBER_LESS_THAN, $sequenceNumber);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the blob’s sequence number is equal to the specified value.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>x-ms-if-sequence-number-eq</i> conditional header. If this access condition
|
||
* is set, the operation is performed only if the blob’s sequence number is equal to
|
||
* the specified value.
|
||
* <p>
|
||
* For more information,
|
||
* see <a href= 'https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/put-page'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param int $sequenceNumber int that represents the sequence number value to check.
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function ifSequenceNumberEqual($sequenceNumber)
|
||
{
|
||
return new AccessCondition(Resources::SEQUENCE_NUMBER_EQUAL, $sequenceNumber);
|
||
}
|
||
|
||
/**
|
||
* Returns an access condition such that an operation will be performed only if
|
||
* the blob’s sequence number is less than or equal to the specified value.
|
||
* <p>
|
||
* Setting this access condition modifies the request to include the HTTP
|
||
* <i>x-ms-if-sequence-number-le</i> conditional header. If this access condition
|
||
* is set, the operation is performed only if the blob’s sequence number is less
|
||
* than or equal to the specified value.
|
||
* <p>
|
||
* For more information,
|
||
* see <a href= 'https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/put-page'>
|
||
* Specifying Conditional Headers for Blob Service Operations</a>.
|
||
*
|
||
* @param int $sequenceNumber int that represents the sequence number value to check.
|
||
*
|
||
* @return \MicrosoftAzure\Storage\Blob\Models\AccessCondition
|
||
*/
|
||
public static function ifSequenceNumberLessThanOrEqual($sequenceNumber)
|
||
{
|
||
return new AccessCondition(Resources::SEQUENCE_NUMBER_LESS_THAN_OR_EQUAL, $sequenceNumber);
|
||
}
|
||
|
||
/**
|
||
* Sets header type
|
||
*
|
||
* @param string $headerType can be one of Resources
|
||
*
|
||
* @return void
|
||
*/
|
||
public function setHeader($headerType)
|
||
{
|
||
$valid = AccessCondition::isValid($headerType);
|
||
Validate::isTrue($valid, Resources::INVALID_HT_MSG);
|
||
|
||
$this->_header = $headerType;
|
||
}
|
||
|
||
/**
|
||
* Gets header type
|
||
*
|
||
* @return string
|
||
*/
|
||
public function getHeader()
|
||
{
|
||
return $this->_header;
|
||
}
|
||
|
||
/**
|
||
* Sets the header value
|
||
*
|
||
* @param string $value the value to use
|
||
*
|
||
* @return void
|
||
*/
|
||
public function setValue($value)
|
||
{
|
||
$this->_value = $value;
|
||
}
|
||
|
||
/**
|
||
* Gets the header value
|
||
*
|
||
* @return string
|
||
*/
|
||
public function getValue()
|
||
{
|
||
return $this->_value;
|
||
}
|
||
|
||
/**
|
||
* Check if the $headerType belongs to valid header types
|
||
*
|
||
* @param string $headerType candidate header type
|
||
*
|
||
* @internal
|
||
*
|
||
* @return boolean
|
||
*/
|
||
public static function isValid($headerType)
|
||
{
|
||
if ($headerType == Resources::EMPTY_STRING
|
||
|| $headerType == Resources::IF_UNMODIFIED_SINCE
|
||
|| $headerType == Resources::IF_MATCH
|
||
|| $headerType == Resources::IF_MODIFIED_SINCE
|
||
|| $headerType == Resources::IF_NONE_MATCH
|
||
|| $headerType == Resources::MAX_BLOB_SIZE
|
||
|| $headerType == Resources::MAX_APPEND_POSITION
|
||
|| $headerType == Resources::SEQUENCE_NUMBER_LESS_THAN_OR_EQUAL
|
||
|| $headerType == Resources::SEQUENCE_NUMBER_LESS_THAN
|
||
|| $headerType == Resources::SEQUENCE_NUMBER_EQUAL
|
||
) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
}
|