http://www.mediawiki.org/wiki/Special:Code/MediaWiki/88095

Revision: 88095
Author:   mkroetzsch
Date:     2011-05-14 15:30:18 +0000 (Sat, 14 May 2011)
Log Message:
-----------
provide more convenient unserialization methods for data items

Modified Paths:
--------------
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Blob.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Bool.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Concept.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Error.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_GeoCoord.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Number.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Property.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_String.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Time.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_URI.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_WikiPage.php
    trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DataItem.php

Modified: trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Blob.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Blob.php       
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Blob.php       
2011-05-14 15:30:18 UTC (rev 88095)
@@ -46,7 +46,7 @@
         * ID.
         * @return SMWDIBlob
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '_txt' 
) {
                return new SMWDIBlob( $serialization, $typeid );
        }
 

Modified: trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Bool.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Bool.php       
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Bool.php       
2011-05-14 15:30:18 UTC (rev 88095)
@@ -46,7 +46,7 @@
         * ID.
         * @return SMWDIBoolean
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '_boo' 
) {
                if ( $serialization == 't' ) {
                        return new SMWDIBoolean( true, $typeid );
                } elseif  ( $serialization == 'f' ) {

Modified: 
trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Concept.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Concept.php    
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Concept.php    
2011-05-14 15:30:18 UTC (rev 88095)
@@ -97,7 +97,7 @@
         * ID.
         * @return SMWDIConcept
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '__con' 
) {
                $result = unserialize( $serialization );
                if ( $result === false ) {
                        throw new SMWDataItemException( "Unserialization 
failed." );

Modified: trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Error.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Error.php      
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Error.php      
2011-05-14 15:30:18 UTC (rev 88095)
@@ -48,7 +48,7 @@
         * ID.
         * @return SMWDIError
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '__err' 
) {
                return new SMWDIError( unserialize( $serialization ), $typeid );
        }
 

Modified: 
trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_GeoCoord.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_GeoCoord.php   
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_GeoCoord.php   
2011-05-14 15:30:18 UTC (rev 88095)
@@ -69,7 +69,7 @@
         * validation here (because this would require less efficient parsing).
         * @return SMWDINumber
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '_geo' 
) {
                $parts = explode( ',', $serialization );
                
                if ( count( $parts ) != 2 ) {

Modified: 
trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Number.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Number.php     
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Number.php     
2011-05-14 15:30:18 UTC (rev 88095)
@@ -51,7 +51,7 @@
         * validation here (because this would require less efficient parsing).
         * @return SMWDINumber
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '_num' 
) {
                return new SMWDINumber( floatval( $serialization ), $typeid );
        }
 

Modified: 
trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Property.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Property.php   
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Property.php   
2011-05-14 15:30:18 UTC (rev 88095)
@@ -229,7 +229,7 @@
         * ID.
         * @return SMWDIProperty
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '__pro' 
) {
                $inverse = false;
                if ( $serialization{0} == '-' ) {
                        $serialization = substr( $serialization, 1 );

Modified: 
trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_String.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_String.php     
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_String.php     
2011-05-14 15:30:18 UTC (rev 88095)
@@ -43,7 +43,7 @@
         * ID.
         * @return SMWDIString
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '_str' 
) {
                return new SMWDIString( $serialization, $typeid );
        }
 

Modified: trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Time.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Time.php       
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Time.php       
2011-05-14 15:30:18 UTC (rev 88095)
@@ -234,7 +234,7 @@
         * ID.
         * @return SMWDITime
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '_dat' 
) {
                $parts = explode( '/', $serialization, 7 );
                $values = array();
                for ( $i = 0; $i < 7; $i += 1 ) {

Modified: trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_URI.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_URI.php        
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_URI.php        
2011-05-14 15:30:18 UTC (rev 88095)
@@ -103,7 +103,7 @@
         * ID.
         * @return SMWDIUri
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '_uri' 
) {
                $parts = explode( ':', $serialization, 2 ); // try to split 
"schema:rest"
                if ( count( $parts ) <= 1 ) {
                        throw new SMWDataItemException( "Unserialization 
failed: the string \"$serialization\" is no valid URI." );

Modified: 
trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_WikiPage.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_WikiPage.php   
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_WikiPage.php   
2011-05-14 15:30:18 UTC (rev 88095)
@@ -83,7 +83,7 @@
         * ID.
         * @return SMWDIWikiPage
         */
-       public static function doUnserialize( $serialization, $typeid ) {
+       public static function doUnserialize( $serialization, $typeid = '_wpg' 
) {
                $parts = explode( '#', $serialization, 3 );
                if ( count( $parts ) != 3 ) {
                        throw new SMWDataItemException( "Unserialization 
failed: the string \"$serialization\" was not understood." );

Modified: trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DataItem.php
===================================================================
--- trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DataItem.php      
2011-05-14 15:25:27 UTC (rev 88094)
+++ trunk/extensions/SemanticMediaWiki/includes/dataitems/SMW_DataItem.php      
2011-05-14 15:30:18 UTC (rev 88095)
@@ -135,14 +135,40 @@
        }
 
        /**
-        * Create a data item from the provided serialization string and type
-        * ID. This static method really needs to be re-implemented by each
-        * data item class. It is given here only for reference. Note that PHP
-        * does not support "abstract static".
+        * Create a data item of the given dataitem ID based on the the
+        * provided serialization string and (optional) typeid.
+        *
+        * @param $diType integer dataitem ID
+        * @param $serialization string
+        * @param $typeid string SMW type ID (optional)
         * @return SMWDataItem
         */
-       public static function doUnserialize( $serialisation, $typeid ) {
-               throw new ErrorException( "Called doUnserialize() on abstract 
base class SMWDataItem. This means that some data item implementation forgot to 
implement this method statically." );
+       public static function doUnserialize( $diType, $serialization, $typeid 
= '' ) {
+               $diClass = self::getDataItemClassNameForId( $diType );
+               if ( $typeid !== '' ) {
+                       return $diClass::doUnserialize( $serialization, $typeid 
);
+               } else {
+                       return $diClass::doUnserialize( $serialization );
+               }
        }
 
+       public static function getDataItemClassNameForId( $diType ) {
+               switch ( $diType ) {
+                       case TYPE_NUMBER:    return "SMWDINumber";
+                       case TYPE_STRING:    return "SMWDIString";
+                       case TYPE_BLOB:      return "SMWDIBlob";
+                       case TYPE_BOOLEAN:   return "SMWDIBoolean";
+                       case TYPE_URI:       return "SMWDIUri";
+                       case TYPE_TIME:      return "SMWDITimePoint";
+                       case TYPE_GEO:       return "SMWDIGeoCoords";
+                       case TYPE_CONTAINER: return "SMWDIContainer";
+                       case TYPE_WIKIPAGE:  return "SMWDIWikiPage";
+                       case TYPE_CONCEPT:   return "SMWDIConcept";
+                       case TYPE_PROPERTY:  return "SMWDIProperty";
+                       case TYPE_ERROR:     return "SMWDIError";
+                       case TYPE_NOTYPE: default:
+                               throw new InvalidArgumentException( "The value 
\"$diType\" is not a valid dataitem ID." );
+               }
+       }
+
 }


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to