/[cvs]/nfo/php/libs/org.netfrag.glib/DesignPattern/Proxy.php
ViewVC logotype

Contents of /nfo/php/libs/org.netfrag.glib/DesignPattern/Proxy.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Wed Mar 5 16:10:17 2003 UTC (21 years, 4 months ago) by joko
Branch: MAIN
Changes since 1.2: +18 -15 lines
updated docu (phpDocumentor testing....)

1 <?php
2 /**
3 * This file contains the DesignPattern::Proxy class
4 *
5 * @author Andreas Motl <andreas.motl@ilo.de>
6 * @package org.netfrag.glib
7 * @name DesignPattern::Proxy
8 *
9 */
10
11 /**
12 * Cvs-Log:
13 *
14 * $Id: Proxy.php,v 1.2 2003/03/05 12:12:42 joko Exp $
15 *
16 * $Log: Proxy.php,v $
17 * Revision 1.2 2003/03/05 12:12:42 joko
18 * re-renamed methods and privates: _handler becomes _proxy again
19 *
20 * Revision 1.1 2003/03/03 22:05:25 joko
21 * abstract implementation... ;-)
22 *
23 *
24 */
25
26
27 /**
28 * An attempt to implement some software design patterns...
29 * --- ProxyPattern
30 *
31 * @link http://c2.com/cgi-bin/wiki?ProxyPattern
32 *
33 * @author Andreas Motl <andreas.motl@ilo.de>
34 * @link http://www.netfrag.org/~joko/
35 *
36 * @copyright (c) 2003 - All Rights reserved.
37 * @license GNU LGPL (GNU Lesser General Public License)
38 * @link http://www.gnu.org/licenses/lgpl.txt
39 *
40 * @package org.netfrag.glib
41 * @name DesignPattern::Proxy
42 *
43 */
44
45 /**
46 * @todo
47 * <pre>
48 * x DesignPattern::DecoratorProxy (->decorate)
49 * x DesignPattern::TransparentProxy (->make_transparent)
50 * o DesignPattern::MultiProxy (->both???) (diamond inheritance? possible in php?)
51 * o DesignPattern::GenericAdapterProxy???
52 * o no 'locator/query' or 'type/component'
53 * o even more generic: just 'adapter_metadata' (-> global adapter registry?)
54 * </pre>
55 *
56 */
57
58 /**
59 * Load required modules:
60 *
61 */
62 loadModule('Class::Logger');
63
64 class DesignPattern_Proxy extends Class_Logger {
65
66 /**
67 * This holds some information about the tracing level.
68 *
69 */
70 var $_debug = array(
71 notice => 1,
72 trace => 1,
73 payload => 1,
74 );
75
76 var $_component_name;
77 var $_component_options;
78
79 /**
80 * This var holds the Handler object
81 * that is used to do the work.
82 * It acts as a dispatcher combining result caching.
83 * It is assumed that this provides 4 methods:
84 * queryData() - execute a query against a data storage
85 * querySchema() - execute a query against underlying storage metadata
86 * sendCommand() - send a command against an arbitrary execution engine
87 * ... or others! (these are just proposals for convenience)
88 *
89 */
90 var $_proxy = NULL;
91
92
93 /**
94 * This var holds options fed to the Proxy object
95 * These are built from locator metadata (_locator) and query arguments (_query)
96 * It's a simple structured hash:
97 * $proxy_options = array(
98 * method => '<remote-method-name>',
99 * args => array('list', 'of', 'arguments')
100 * );
101 *
102 */
103 var $_proxy_options = NULL;
104
105
106 function about() {
107 $this->_about =
108 <<<ABOUT
109 * --- DesignPattern::Proxy
110 * --- http://cvs.netfrag.org/nfo/php/libs/org.netfrag.glib/DesignPattern/Proxy.php
111 *
112 * http://c2.com/cgi-bin/wiki?ProxyPattern says...
113 * Intent: Provide a surrogate or placeholder for another object to control access to it.
114 * http://www.fluffycat.com/java/patterns.html says...
115 * One class controls the creation of and access to objects in another class.
116
117 ABOUT;
118 }
119
120
121 function constructor($handler = array()) {
122 if (sizeof($handler)) {
123 $this->set_proxy($handler);
124 }
125 $this->create_proxy();
126 $this->call_proxy();
127 }
128
129 /*
130 function _abstract_method($method) {
131 $package = get_class($this);
132 $package_p = get_parent_class($this);
133 user_error("DesignPattern::Proxy.$package_p.$package: Please implement method '$method'.");
134 }
135 */
136
137
138 /**
139 * Directly inject a Handler instance to use.
140 *
141 * @param Handler object - &$handler
142 *
143 */
144 function set_proxy( &$handler ) {
145 $this->_proxy = &$handler;
146 }
147
148 function &get_proxy() {
149 return $this->_proxy;
150 }
151
152 function call_proxy() {
153 $this->_abstract_method('call_proxy', 'DesignPattern::Proxy');
154 }
155
156 function set_component_name($name) {
157 $this->_component_name = $name;
158 }
159 function get_component_name() {
160 return $this->_component_name;
161 }
162 function set_component_options_v1() {
163 $options = func_get_args();
164 if (is_array($options)) {
165 if (is_hash($options)) {
166 $this->_component_options = $options;
167 } else {
168 $this->_component_options = array();
169 foreach ($options as $option) {
170 array_push($this->_component_options, $option);
171 }
172 }
173 } else {
174 $this->_component_options = $options;
175 }
176 }
177 function set_component_options() {
178 $options = func_get_args();
179 if (sizeof($options) >= 1) {
180 $this->_component_options = array();
181 foreach ($options as $option) {
182 array_push($this->_component_options, $option);
183 }
184 } else {
185 $this->_component_options = $options;
186 }
187 }
188 function get_component_options() {
189 return $this->_component_options;
190 }
191
192 function create_proxy() {
193 //print "DesignPattern::Proxy->create_proxy<br/>";
194 //print "comp: " . $this->get_component_name() . "<br/>";
195 //print "comp: " . $this->get_component_options() . "<br/>";
196 $handler = php::mkComponent( $this->get_component_name(), $this->get_component_options() );
197 //print Dumper($handler);
198 //exit;
199
200 $this->set_proxy( $handler );
201 }
202
203
204 }
205
206 ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed