summaryrefslogtreecommitdiff
path: root/buildscripts/phing/classes/phing/tasks/ext/Service/Amazon.php
blob: 6e8fa8e08157907bf0a0f1a5720ca40ffffd40c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php

/*
 *  $Id: 81e9d8cbc94bac15a6a32ed0bb23c04d2b0ff439 $
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the LGPL. For more information please see
 * <http://phing.info>. 
 */

require_once "phing/Task.php";

/**
 * Abstract Service_Amazon class.
 *
 * Implements common methods & properties used by all Amazon services
 * 
 * @extends Task
 * @version $ID$
 * @package phing.tasks.ext
 * @author Andrei Serdeliuc <andrei@serdeliuc.ro>
 * @abstract
 */
abstract class Service_Amazon extends Task
{
    /**
	 * Collection of set options
	 *
	 * We set these magically so we can also load then from the environment
	 * 
	 * (default value: array())
	 * 
	 * @var array
	 * @access protected
	 */
	protected $_options = array();
	
	public function __set($var, $val)
	{
		$this->_options[$var] = $val;
	}
	
	/**
	 * Property getter
	 *
	 * If the property hasn't been previously set (through the task call normally),
	 * it will try to load it from the project
	 *
	 * This way, we can define global properties for the "Amazon" service, like key and secret
	 * 
	 * @access public
	 * @param mixed $var
	 * @return void
	 */
	public function __get($var)
	{
		if(!isset($this->$var)) {
			if(!($val = $this->getProject()->getProperty('amazon.' . strtolower($var)))) {
				return false;
			} else {
				return $val;
			}
		}
		
		return $this->_options[$var];
	}
	
	public function __isset($var)
	{
		return array_key_exists($var, $this->_options);
	}

	public function setKey($key)
	{
		if(empty($key) || !is_string($key)) {
			throw new BuildException('Key must be a non empty string');
		}
		
		$this->key = $key;
	}
	
	public function getKey()
	{
		if(!($key = $this->key)) {
			throw new BuildException('Key is not set');
		}

		return $key;
	}
	
	public function setSecret($secret)
	{
		if(empty($secret) || !is_string($secret)) {
			throw new BuildException('Secret must be a non empty string');
		}
		
		$this->secret = $secret;
	}
	
	public function getSecret()
	{
		if(!($secret = $this->secret)) {
            throw new BuildException('Secret is not set');
        }
        
        return $this->secret;
	}
}