Changeset 303 for Dev/branches/rest-dojo-ui/server/classes/Marshaller.php
- Timestamp:
- 03/04/12 15:48:42 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Dev/branches/rest-dojo-ui/server/classes/Marshaller.php
r274 r303 4 4 5 5 const OBJ_TYPE = '__objectType'; 6 const OBJ_UID = '__objectUid'; 7 const REF_TYPE = '__referenceType'; 8 const REF_UID = '__referenceUid'; 6 9 7 10 private static function isWrappedObject($obj) { … … 9 12 } 10 13 14 private static function isWrappedReference($obj) { 15 return isset($obj[self::REF_TYPE]); 16 } 17 11 18 public static function marshall($obj) { 12 19 switch (gettype($obj)) { 13 20 case 'array': 14 return array_map(array('Marshaller', 'marshall'), $obj);21 return array_map(array('Marshaller', 'marshall'), $obj); 15 22 case 'object': 16 23 return static::wrapObject($obj); … … 24 31 if ($objectType == 'DateTime') { 25 32 return array(self::OBJ_TYPE => 'DateTime', 'timestamp' => $obj->getTimestamp()); 33 } else if ($obj instanceof RdfObject) { 34 $array = array( 35 self::OBJ_TYPE => $obj->getType(), 36 self::OBJ_UID => $obj->getUid() 37 ); 38 foreach ($obj as $prop => $val) { 39 $array[$prop] = static::marshall($val); 40 } 41 return $array; 42 } else if ($obj instanceof RdfPointer) { 43 return array( 44 self::REF_TYPE => $obj->getType(), 45 self::REF_UID => $obj->getUid() 46 ); 26 47 } else { 27 $newObj = static::marshall((array) $obj); 28 $newObj[self::OBJ_TYPE] = get_class($obj); 29 return $newObj; 48 return static::marshall((array) $obj); 30 49 } 31 50 } … … 38 57 if (static::isWrappedObject($obj)) { 39 58 return static::unwrapObject($obj); 59 } else if (static::isWrappedReference($obj)) { 60 return static::unwrapReference($obj); 40 61 } else { 41 return array_map(array('Marshaller', 'unmarshall'), $obj);62 return array_map(array('Marshaller', 'unmarshall'), $obj); 42 63 } 43 64 default: … … 47 68 48 69 private static function unwrapObject($obj) { 49 $objectType = $obj[self::OBJ_TYPE]; 50 unset($obj[self::OBJ_TYPE]); 70 if (isset($obj[self::OBJ_TYPE])) { 71 $objectType = $obj[self::OBJ_TYPE]; 72 unset($obj[self::OBJ_TYPE]); 73 } 74 if (isset($obj[self::OBJ_UID])) { 75 $objectUid = $obj[self::OBJ_UID]; 76 unset($obj[self::OBJ_UID]); 77 } 51 78 if ($objectType == 'DateTime') { 52 79 $date = new DateTime(); 53 80 $date->setTimestamp($obj['timestamp']); 54 81 return $date; 55 } else if (is_subclass_of($objectType, 'ResearchToolObjectInterface')) { 56 return $objectType::create((object)static::unmarshall($obj)); 82 } else if (is_subclass_of($objectType, 'RdfObject')) { 83 $rdfObject = new $objectType($objectUid); 84 foreach ($obj as $prop => $val) { 85 $rdfObject->$prop = static::unmarshall($val); 86 } 87 return $rdfObject; 57 88 } else { 58 89 return $obj; … … 60 91 } 61 92 93 private static function unwrapReference($ref) { 94 $refType = $ref[self::REF_TYPE]; 95 $refUid = $ref[self::REF_UID]; 96 return new RdfPointer(RdfObject::typeAndUidToResourceUri($refType, $refUid)); 97 } 98 62 99 } 63 100
Note: See TracChangeset
for help on using the changeset viewer.