1: <?php
2: /**
3: * Magento
4: *
5: * NOTICE OF LICENSE
6: *
7: * This source file is subject to the Open Software License (OSL 3.0)
8: * that is bundled with this package in the file LICENSE.txt.
9: * It is also available through the world-wide-web at this URL:
10: * http://opensource.org/licenses/osl-3.0.php
11: * If you did not receive a copy of the license and are unable to
12: * obtain it through the world-wide-web, please send an email
13: * to license@magentocommerce.com so we can send you a copy immediately.
14: *
15: * DISCLAIMER
16: *
17: * Do not edit or add to this file if you wish to upgrade Magento to newer
18: * versions in the future. If you wish to customize Magento for your
19: * needs please refer to http://www.magentocommerce.com for more information.
20: *
21: * @category Mage
22: * @package Mage_Api
23: * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24: * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25: */
26:
27: /**
28: * Webservice api abstract
29: *
30: * @category Mage
31: * @package Mage_Api
32: * @author Magento Core Team <core@magentocommerce.com>
33: */
34: class Mage_Api_Model_Server
35: {
36:
37: /**
38: * Api Name by Adapter
39: * @var string
40: */
41: protected $_api = "";
42:
43: /**
44: * Web service adapter
45: *
46: * @var Mage_Api_Model_Server_Adapter_Interface
47: */
48: protected $_adapter;
49:
50: /**
51: * Complex retrieve adapter code by calling auxiliary model method
52: *
53: * @param string $alias Alias name
54: * @return string|null Returns NULL if no alias found
55: */
56: public function getAdapterCodeByAlias($alias)
57: {
58: /** @var $config Mage_Api_Model_Config */
59: $config = Mage::getSingleton('api/config');
60: $aliases = $config->getAdapterAliases();
61:
62: if (!isset($aliases[$alias])) {
63: return null;
64: }
65: $object = Mage::getModel($aliases[$alias][0]);
66: $method = $aliases[$alias][1];
67:
68: if (!method_exists($object, $method)) {
69: Mage::throwException(Mage::helper('api')->__('Can not find webservice adapter.'));
70: }
71: return $object->$method();
72: }
73:
74: /**
75: * Initialize server components
76: *
77: * @param Mage_Api_Controller_Action $controller
78: * @param string $adapter Adapter name
79: * @param string $handler Handler name
80: * @return Mage_Api_Model_Server
81: */
82: public function init(Mage_Api_Controller_Action $controller, $adapter = 'default', $handler = 'default')
83: {
84: $this->initialize($adapter, $handler);
85:
86: $this->_adapter->setController($controller);
87:
88: return $this;
89: }
90:
91: /**
92: * Initialize server components. Lightweight implementation of init() method
93: *
94: * @param string $adapterCode Adapter code
95: * @param string $handler OPTIONAL Handler name (if not specified, it will be found from config)
96: * @return Mage_Api_Model_Server
97: */
98: public function initialize($adapterCode, $handler = null)
99: {
100: /** @var $helper Mage_Api_Model_Config */
101: $helper = Mage::getSingleton('api/config');
102: $adapters = $helper->getActiveAdapters();
103:
104: if (isset($adapters[$adapterCode])) {
105: /** @var $adapterModel Mage_Api_Model_Server_Adapter_Interface */
106: $adapterModel = Mage::getModel((string) $adapters[$adapterCode]->model);
107:
108: if (!($adapterModel instanceof Mage_Api_Model_Server_Adapter_Interface)) {
109: Mage::throwException(Mage::helper('api')->__('Invalid webservice adapter specified.'));
110: }
111: $this->_adapter = $adapterModel;
112: $this->_api = $adapterCode;
113:
114: // get handler code from config if no handler passed as argument
115: if (null === $handler && !empty($adapters[$adapterCode]->handler)) {
116: $handler = (string) $adapters[$adapterCode]->handler;
117: }
118: $handlers = $helper->getHandlers();
119:
120: if (!isset($handlers->$handler)) {
121: Mage::throwException(Mage::helper('api')->__('Invalid webservice handler specified.'));
122: }
123: $handlerClassName = Mage::getConfig()->getModelClassName((string) $handlers->$handler->model);
124:
125: $this->_adapter->setHandler($handlerClassName);
126: } else {
127: Mage::throwException(Mage::helper('api')->__('Invalid webservice adapter specified.'));
128: }
129: return $this;
130: }
131:
132: /**
133: * Run server
134: *
135: */
136: public function run()
137: {
138: $this->getAdapter()->run();
139: }
140:
141: /**
142: * Get Api name by Adapter
143: * @return string
144: */
145: public function getApiName()
146: {
147: return $this->_api;
148: }
149:
150: /**
151: * Retrieve web service adapter
152: *
153: * @return Mage_Api_Model_Server_Adapter_Interface
154: */
155: public function getAdapter()
156: {
157: return $this->_adapter;
158: }
159:
160:
161: } // Class Mage_Api_Model_Server_Abstract End
162: