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_Api2
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: * Request content interpreter factory
29: *
30: * @category Mage
31: * @package Mage_Api2
32: * @author Magento Core Team <core@magentocommerce.com>
33: */
34: abstract class Mage_Api2_Model_Request_Interpreter
35: {
36: /**
37: * Request body interpreters factory
38: *
39: * @param string $type
40: * @return Mage_Api2_Model_Request_Interpreter_Interface
41: * @throws Exception|Mage_Api2_Exception
42: */
43: public static function factory($type)
44: {
45: /** @var $helper Mage_Api2_Helper_Data */
46: $helper = Mage::helper('api2/data');
47: $adapters = $helper->getRequestInterpreterAdapters();
48:
49: if (empty($adapters) || !is_array($adapters)) {
50: throw new Exception('Request interpreter adapters is not set.');
51: }
52:
53: $adapterModel = null;
54: foreach ($adapters as $item) {
55: $itemType = $item->type;
56: if ($itemType == $type) {
57: $adapterModel = $item->model;
58: break;
59: }
60: }
61:
62: if ($adapterModel === null) {
63: throw new Mage_Api2_Exception(
64: sprintf('Server can not understand Content-Type HTTP header media type "%s"', $type),
65: Mage_Api2_Model_Server::HTTP_BAD_REQUEST
66: );
67: }
68:
69: $adapter = Mage::getModel($adapterModel);
70: if (!$adapter) {
71: throw new Exception(sprintf('Request interpreter adapter "%s" not found.', $type));
72: }
73:
74: return $adapter;
75: }
76: }
77: