Skip to content

Commit

Permalink
Add links to sub endpoints and wd/pd to item and property get endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
JeroenDeDauw committed Dec 4, 2015
1 parent 41b9549 commit 82ee42d
Show file tree
Hide file tree
Showing 23 changed files with 421 additions and 164 deletions.
7 changes: 5 additions & 2 deletions src/ApiFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,17 @@ public function newGetItemUseCase(): GetItemUseCase {
return new GetItemUseCase(
$this->getItemStore(),
$this->getLabelLookup(),
$this->getEntityDeserializer()
$this->getEntityDeserializer(),
$this->getUrlBuilder()
);
}

public function newGetPropertyUseCase(): GetPropertyUseCase {
return new GetPropertyUseCase(
$this->getPropertyStore(),
$this->getEntityDeserializer()
$this->getLabelLookup(),
$this->getEntityDeserializer(),
$this->getUrlBuilder()
);
}

Expand Down
61 changes: 61 additions & 0 deletions src/ResponseModel/SimpleEntityTrait.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

namespace Queryr\WebApi\ResponseModel;

/**
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
trait SimpleEntityTrait {

/**
* @var string[]
*/
public $ids = [];

/**
* @var string
*/
public $label = '';

/**
* @var string
*/
public $description = '';

/**
* @var string[]
*/
public $aliases = [];

/**
* @var SimpleStatement[]
*/
public $statements = [];

/**
* @var string
*/
public $dataUrl = '';

/**
* @var string
*/
public $labelUrl = '';

/**
* @var string
*/
public $descriptionUrl = '';

/**
* @var string
*/
public $aliasesUrl = '';

/**
* @var string
*/
public $wikidataUrl = '';

}
4 changes: 2 additions & 2 deletions src/ResponseModel/SimpleStatement.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ public static function newInstance() {
return new self();
}

public function withPropertyName( $propertyName ) {
public function withPropertyName( string $propertyName ) {
$this->propertyName = $propertyName;
return $this;
}

public function withType( $type ) {
public function withType( string $type ) {
$this->valueType = $type;
return $this;
}
Expand Down
6 changes: 3 additions & 3 deletions src/ResponseModel/SimpleStatementsBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class SimpleStatementsBuilder {
private $languageCode;
private $labelLookup;

public function __construct( $languageCode, LabelLookup $labelLookup ) {
public function __construct( string $languageCode, LabelLookup $labelLookup ) {
$this->languageCode = $languageCode;
$this->labelLookup = $labelLookup;
}
Expand All @@ -31,7 +31,7 @@ public function __construct( $languageCode, LabelLookup $labelLookup ) {
*
* @return array
*/
public function buildFromStatements( StatementList $statements ) {
public function buildFromStatements( StatementList $statements ): array {
$simpleStatements = [];

foreach ( $statements->getPropertyIds() as $propertyId ) {
Expand All @@ -52,7 +52,7 @@ public function buildFromStatements( StatementList $statements ) {
return $simpleStatements;
}

private function getEntityName( EntityId $id ) {
private function getEntityName( EntityId $id ): string {
$label = $this->labelLookup->getLabelByIdAndLanguage( $id, $this->languageCode );

return $label === null ? $id->getSerialization() : $label;
Expand Down
10 changes: 5 additions & 5 deletions src/Serializers/SerializerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use Queryr\WebApi\Serializers\ItemListSerializer;
use Queryr\WebApi\Serializers\ItemTypeSerializer;
use Queryr\WebApi\Serializers\PropertyListSerializer;
use Queryr\WebApi\Serializers\SimpleFoundationSerializer;
use Queryr\WebApi\Serializers\SimpleEntitySerializer;
use Queryr\WebApi\Serializers\SimpleItemSerializer;
use Queryr\WebApi\Serializers\SimplePropertySerializer;
use Queryr\WebApi\Serializers\SimpleStatementSerializer;
Expand All @@ -24,8 +24,8 @@ class SerializerFactory {
*/
public function newSimpleItemSerializer() {
return new SimpleItemSerializer(
new SimpleFoundationSerializer(),
new SimpleStatementSerializer()
new SimpleEntitySerializer( new SimpleStatementSerializer() )

);
}

Expand All @@ -34,7 +34,7 @@ public function newSimpleItemSerializer() {
*/
public function newSimplePropertySerializer() {
return new SimplePropertySerializer(
new SimpleFoundationSerializer()
new SimpleEntitySerializer( new SimpleStatementSerializer() )
);
}

Expand All @@ -44,7 +44,7 @@ public function newSimplePropertySerializer() {
*/
public function newStableItemSerializer( array $propertyMap ) {
return new StableItemSerializer(
new SimpleFoundationSerializer(),
new SimpleEntitySerializer( new SimpleStatementSerializer() ),
new SimpleStatementSerializer(),
$propertyMap
);
Expand Down
85 changes: 85 additions & 0 deletions src/Serializers/SimpleEntitySerializer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php

namespace Queryr\WebApi\Serializers;

use Queryr\WebApi\ResponseModel\SimpleEntityTrait;
use Serializers\Exceptions\UnsupportedObjectException;
use Serializers\Serializer;

/**
* @access private
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class SimpleEntitySerializer implements Serializer {

/**
* @var SimpleEntityTrait
*/
private $entity;

private $statementSerializer;

public function __construct( Serializer $statementSerializer ) {
$this->statementSerializer = $statementSerializer;
}

public function serialize( $object ) {
if ( !in_array( SimpleEntityTrait::class, class_uses( $object ) ) ) {
throw new UnsupportedObjectException( $object, 'Can only serialize instances of SimpleEntityTrait' );
}

$this->entity = $object;

return $this->serializeEntity();
}

private function serializeEntity(): array {
$serialization = [ 'id' => $this->entity->ids ];

if ( $this->entity->label !== '' ) {
$serialization['label'] = $this->entity->label;
}

if ( $this->entity->description !== '' ) {
$serialization['description'] = $this->entity->description;
}

if ( !empty( $this->entity->aliases ) ) {
$serialization['aliases'] = $this->entity->aliases;
}

if ( $this->entity->labelUrl !== '' ) {
$serialization['label_url'] = $this->entity->labelUrl;
}

if ( $this->entity->description !== '' ) {
$serialization['description_url'] = $this->entity->descriptionUrl;
}

if ( $this->entity->aliasesUrl !== '' ) {
$serialization['aliases_url'] = $this->entity->aliasesUrl;
}

if ( $this->entity->wikidataUrl !== '' ) {
$serialization['wikidata_url'] = $this->entity->wikidataUrl;
}

$serialization['data_url'] = $this->entity->dataUrl;

$serialization['data'] = $this->getDataSection();

return $serialization;
}

private function getDataSection(): array {
$data = [];

foreach ( $this->entity->statements as $simpleStatement ) {
$data[$simpleStatement->propertyName] = $this->statementSerializer->serialize( $simpleStatement );
}

return $data;
}

}
50 changes: 0 additions & 50 deletions src/Serializers/SimpleFoundationSerializer.php

This file was deleted.

28 changes: 5 additions & 23 deletions src/Serializers/SimpleItemSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,15 @@ class SimpleItemSerializer implements Serializer {
/**
* @var Serializer
*/
private $foundationalSerializer;

/**
* @var Serializer
*/
private $statementSerializer;
private $entitySerializer;

/**
* @var SimpleItem
*/
private $item;

public function __construct( Serializer $foundationalSerializer, Serializer $statementSerializer ) {
$this->foundationalSerializer = $foundationalSerializer;
$this->statementSerializer = $statementSerializer;
public function __construct( Serializer $simpleEntitySerializer ) {
$this->entitySerializer = $simpleEntitySerializer;
}

public function serialize( $object ) {
Expand All @@ -43,22 +37,10 @@ public function serialize( $object ) {
return $this->serializeItem();
}

private function serializeItem() {
$serialization = $this->foundationalSerializer->serialize( $this->item );

$serialization['data'] = $this->getDataSection();
private function serializeItem(): array {
$serialization = $this->entitySerializer->serialize( $this->item );

return $serialization;
}

private function getDataSection() {
$data = [];

foreach ( $this->item->statements as $simpleStatement ) {
$data[$simpleStatement->propertyName] = $this->statementSerializer->serialize( $simpleStatement );
}

return $data;
}

}
17 changes: 8 additions & 9 deletions src/Serializers/SimplePropertySerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ class SimplePropertySerializer implements Serializer {
/**
* @var Serializer
*/
private $foundationalSerializer;
private $entitySerializer;

/**
* @var SimpleProperty
*/
private $property;

public function __construct( Serializer $foundationalSerializer ) {
$this->foundationalSerializer = $foundationalSerializer;
public function __construct( Serializer $simpleEntitySerializer ) {
$this->entitySerializer = $simpleEntitySerializer;
}

public function serialize( $object ) {
Expand All @@ -37,12 +37,11 @@ public function serialize( $object ) {
return $this->serializeProperty();
}

private function serializeProperty() {
$serialization = $this->foundationalSerializer->serialize( $this->property );

$serialization['type'] = $this->property->type;

return $serialization;
private function serializeProperty(): array {
return array_merge(
[ 'type' => $this->property->type ],
$this->entitySerializer->serialize( $this->property )
);
}

}
Loading

0 comments on commit 82ee42d

Please sign in to comment.