summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/src/SerializerFactory.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/SerializerFactory.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/src/SerializerFactory.php127
1 files changed, 127 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/SerializerFactory.php b/www/wiki/extensions/SemanticMediaWiki/src/SerializerFactory.php
new file mode 100644
index 00000000..56c322d6
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/src/SerializerFactory.php
@@ -0,0 +1,127 @@
+<?php
+
+namespace SMW;
+
+use Deserializers\Deserializer;
+use OutOfBoundsException;
+use Serializers\Serializer;
+use SMW\Deserializers\ExpDataDeserializer;
+use SMW\Deserializers\SemanticDataDeserializer;
+use SMW\Serializers\ExpDataSerializer;
+use SMW\Serializers\QueryResultSerializer;
+use SMW\Serializers\SemanticDataSerializer;
+use SMWExpData as ExpData;
+use SMWQueryResult as QueryResult;
+
+/**
+ * @license GNU GPL v2+
+ * @since 1.9
+ *
+ * @author mwjames
+ */
+class SerializerFactory {
+
+ /**
+ * Method that assigns registered serializers to an object
+ *
+ * @since 2.2
+ *
+ * @param mixed $object
+ *
+ * @return Serializer
+ */
+ public function getSerializerFor( $object ) {
+
+ $serializer = null;
+
+ if ( $object instanceof SemanticData ) {
+ $serializer = $this->newSemanticDataSerializer();
+ } elseif ( $object instanceof QueryResult ) {
+ $serializer = $this->newQueryResultSerializer();
+ } elseif ( $object instanceof ExpData ) {
+ $serializer = $this->newExpDataSerializer();
+ }
+
+ if ( !$serializer instanceof Serializer ) {
+ throw new OutOfBoundsException( 'No serializer can be matched to the object' );
+ }
+
+ return $serializer;
+ }
+
+ /**
+ * @since 2.2
+ *
+ * @param array $serialization
+ *
+ * @return Deserializer
+ */
+ public function getDeserializerFor( array $serialization ) {
+
+ $deserializer = null;
+
+ if ( isset( $serialization['serializer'] ) ) {
+
+ switch ( $serialization['serializer'] ) {
+ case 'SMW\Serializers\SemanticDataSerializer':
+ $deserializer = $this->newSemanticDataDeserializer();
+ break;
+ case 'SMW\Serializers\ExpDataSerializer':
+ $deserializer = $this->newExpDataDeserializer();
+ break;
+ }
+ }
+
+ if ( !$deserializer instanceof Deserializer ) {
+ throw new OutOfBoundsException( 'No deserializer can be matched to the serialization format' );
+ }
+
+ return $deserializer;
+ }
+
+ /**
+ * @since 2.2
+ *
+ * @return SemanticDataSerializer
+ */
+ public function newSemanticDataSerializer() {
+ return new SemanticDataSerializer();
+ }
+
+ /**
+ * @since 2.2
+ *
+ * @return SemanticDataDeserializer
+ */
+ public function newSemanticDataDeserializer() {
+ return new SemanticDataDeserializer();
+ }
+
+ /**
+ * @since 2.2
+ *
+ * @return QueryResultSerializer
+ */
+ public function newQueryResultSerializer() {
+ return new QueryResultSerializer();
+ }
+
+ /**
+ * @since 2.2
+ *
+ * @return ExpDataSerializer
+ */
+ public function newExpDataSerializer() {
+ return new ExpDataSerializer();
+ }
+
+ /**
+ * @since 2.2
+ *
+ * @return ExpDataDeserializer
+ */
+ public function newExpDataDeserializer() {
+ return new ExpDataDeserializer();
+ }
+
+}