/[cvs]/nfo/php/libs/org.netfrag.glib/Data/Lift.php
ViewVC logotype

Annotation of /nfo/php/libs/org.netfrag.glib/Data/Lift.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (hide annotations)
Sun Mar 9 15:49:20 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
Changes since 1.5: +11 -3 lines
fix towards optimizing autodocumentation:
enriched with metadata to tell autodia how to build object-relationships by discarding the fancy namespacing stuff there

1 joko 1.1 <?
2 joko 1.4 /**
3     * This file contains the Data::Lift component.
4     *
5     * @author Andreas Motl <andreas.motl@ilo.de>
6     * @package org.netfrag.glib
7     * @name Data::Lift
8     *
9     */
10    
11 joko 1.1 // -------------------------------------------------------------------------
12 joko 1.6 // $Id: Lift.php,v 1.5 2003/03/08 20:04:59 root Exp $
13 joko 1.1 // -------------------------------------------------------------------------
14 joko 1.2 // $Log: Lift.php,v $
15 joko 1.6 // Revision 1.5 2003/03/08 20:04:59 root
16     // + optimized comments for Autodia
17     //
18 root 1.5 // Revision 1.4 2003/03/08 18:22:23 joko
19     // updated comments: now in phpDocumentor style
20     //
21 joko 1.4 // Revision 1.3 2003/03/03 21:28:11 joko
22     // updated comments
23     //
24 joko 1.3 // Revision 1.2 2003/02/27 16:30:17 joko
25     // + enhanced '_autodetect'
26     // + added '_check'
27     // + now throughout returning lifted values by reference
28     //
29 joko 1.2 // Revision 1.1 2003/02/22 16:20:04 joko
30     // + initial commit
31     //
32 joko 1.1 // -------------------------------------------------------------------------
33    
34    
35    
36    
37 joko 1.4 /**
38     * --- Data::Lift
39     *
40     * <pre>
41     * Data::Lift - Pass data around between various "actors".
42     *
43     * These "actors" are kinda plugin-modules
44     * lying at "locations" and actually mungle the data.
45     *
46     * "Locations" are by now:
47     * x local filesystem
48     * o remote anything
49     *
50     * The "actors" require (by now) to be native php classes
51     * having a method "perform". Please have a look at others
52     * lying in the Data::Lift namespace at org.netfrag.glib to
53     * get a picture of how to implement own "actors".
54     * </pre>
55     *
56     *
57     * @author Andreas Motl <andreas.motl@ilo.de>
58     * @copyright (c) 2003 - All Rights reserved.
59     * @license GNU LGPL (GNU Lesser General Public License)
60     *
61     * @link http://www.netfrag.org/~joko/
62     * @link http://www.gnu.org/licenses/lgpl.txt
63     *
64     * @package org.netfrag.glib
65 joko 1.6 * @subpackage DataLift
66 joko 1.4 * @name Data::Lift
67     *
68     * @link http://cvs.netfrag.org/php/libs/org.netfrag.glib
69     *
70     *
71     * @todo refactor Data::Deep to a plugin module
72     * @todo refactor Data::Encode to a plugin module
73     * @todo combine Data::Lift and Data::Container somehow
74     * @todo integrate with Data::Driver somehow -- proposal:
75 root 1.5 * // $lift = ne w Data::Lift($locator);
76     * // $lift->perform(); // talks to a Data::Driver
77 joko 1.4 *
78     *
79     */
80 joko 1.1 class Data_Lift {
81 root 1.5
82     /**
83     * this is to trick Autodia let understanding "namespaces" in php
84     * unless the pattern can be tweaked by mode (namespace=0|1)
85     * // $this = ne w Data::Lift(&$payload, $options = array());
86     */
87    
88 joko 1.1 var $dblocations;
89     var $actor;
90 root 1.5 var $actor_instance;
91 joko 1.1
92     var $payload;
93     var $vartype;
94     var $metatype;
95    
96     function Data_Lift(&$payload, $options = array()) {
97     $this->_init_locations();
98     //print Dumper($options);
99     //exit;
100     if ($options[metatype]) { $this->metatype = $options[metatype]; }
101     $this->set(&$payload);
102     }
103    
104     function _init_locations() {
105     $this->actor = array();
106     $this->dblocations = array(
107     'bla' => 'blub',
108     );
109     }
110    
111     function set(&$payload, $metatype = '') {
112     $this->payload = &$payload;
113 joko 1.2
114 joko 1.1 if ($metatype) { $this->metatype = $metatype; }
115     $this->_autodetect();
116 joko 1.2 $this->_check();
117 joko 1.1 }
118    
119     function _autodetect() {
120 joko 1.2
121 joko 1.1 // FIXME: distinguish between is_array and is_hash here!
122 joko 1.2 if (is_object($this->payload)) {
123     $this->vartype = 'object';
124     $this->metatype = get_class($this->payload);
125     if ($parent_class = get_parent_class($this->payload)) {
126     $this->metatype = $parent_class;
127     }
128    
129     } elseif (is_array($this->payload)) {
130 joko 1.1 $this->vartype = 'hash';
131 joko 1.2
132     } else {
133     $this->vartype = 'scalar';
134    
135     }
136     }
137    
138     function _check() {
139    
140     $good = $this->vartype && $this->metatype;
141    
142     //print "metatype: " . $this->metatype . "<br>";
143    
144     if (!$good) {
145     print "Data::Lift cannot handle this payload: ";
146     print "(vartype=" . $this->vartype . ", metatype=" . $this->metatype . ")<br/>";
147     print Dumper($this->payload);
148 joko 1.1 }
149 joko 1.2
150 joko 1.1 }
151    
152 joko 1.2 function &to($level) {
153 joko 1.1 $this->_resolve_location($level);
154     //print Dumper($this->actor);
155     //exit;
156     //$result = array( name => 'abc', description => 'def' );
157 joko 1.2 $result = &$this->_perform_actor();
158 joko 1.1 return $result;
159     }
160    
161     function _resolve_location($level) {
162    
163     // location can be resolved by location-table
164     if ($location = $this->dblocations[$level]) {
165     $this->actor = split('/', $location);
166     }
167    
168     // try to automagically resolve location
169     $part = array();
170     array_push($part, $this->vartype);
171     array_push($part, $this->metatype);
172     array_push($part, $level);
173     $this->actor = $part;
174    
175     }
176    
177 joko 1.2 function &_perform_actor() {
178 joko 1.1 //$actor_file = join('/', $this->actor) . '.php';
179     //include($actor_file);
180 root 1.5
181     /**
182 joko 1.6 * <!-- Autodia -->
183 root 1.5 * can do: (this is metadata supplied for Autodia, don't delete!)
184 joko 1.6 * $this->_actor_instance = new Data_Lift_hash_job_html()
185     * $this->_actor_instance = new Data_Lift_hash_tree_PEAR_Tree()
186 root 1.5 * $this->_actor_instance = new Data_Lift_object_tree_common_PEAR_HTML_TreeMenu()
187 joko 1.6 * $this->_actor_instance = new Data_Lift_object_tree_common_PEAR_HTML_TreeMenu_DHTML()
188     * $this->_actor_instance = new Data_Lift_object_tree_common_PEAR_HTML_TreeMenu_Listbox()
189     *
190 root 1.5 */
191    
192 joko 1.1 $actor_name = 'Data/Lift/' . join('/', $this->actor);
193     $actor_object = mkObject($actor_name);
194     return $actor_object->perform($this->payload);
195     }
196    
197     function get() {
198     return $this->payload;
199     }
200    
201     function add($data = array()) {
202     $this->payload = array_merge($this->payload, $data);
203     }
204    
205     }
206    
207 root 1.5 ?>

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