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