summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Utils/Fixtures/Facts/BerlinFactsheet.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Utils/Fixtures/Facts/BerlinFactsheet.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Utils/Fixtures/Facts/BerlinFactsheet.php273
1 files changed, 273 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Utils/Fixtures/Facts/BerlinFactsheet.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Utils/Fixtures/Facts/BerlinFactsheet.php
new file mode 100644
index 00000000..695cd0d0
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Utils/Fixtures/Facts/BerlinFactsheet.php
@@ -0,0 +1,273 @@
+<?php
+
+namespace SMW\Tests\Utils\Fixtures\Facts;
+
+use RuntimeException;
+use SMW\DataValueFactory;
+use SMW\DIWikiPage;
+use SMW\SemanticData;
+use SMW\Subobject;
+use SMW\Tests\Utils\Fixtures\Properties\AreaProperty;
+use SMW\Tests\Utils\Fixtures\Properties\CityCategory;
+use SMW\Tests\Utils\Fixtures\Properties\FoundedProperty;
+use SMW\Tests\Utils\Fixtures\Properties\LocatedInProperty;
+use SMW\Tests\Utils\Fixtures\Properties\PopulationDensityProperty;
+use SMW\Tests\Utils\Fixtures\Properties\PopulationProperty;
+use SMW\Tests\Utils\Fixtures\Properties\TemperatureProperty;
+use SMW\Tests\Utils\Fixtures\Properties\YearProperty;
+use SMW\Tests\Utils\UtilityFactory;
+
+/**
+ * @license GNU GPL v2+
+ * @since 2.1
+ *
+ * @author mwjames
+ */
+class BerlinFactsheet {
+
+ /**
+ * @var DIWikiPage
+ */
+ private $targetSubject = null;
+
+ /**
+ * @var DataValueFactory
+ */
+ private $dataValueFactory;
+
+ /**
+ * @since 2.1
+ *
+ * @param DIWikiPage|null $targetSubject
+ */
+ public function __construct( DIWikiPage $targetSubject = null ) {
+ $this->targetSubject = $targetSubject;
+
+ if ( $this->targetSubject === null ) {
+ $this->targetSubject = $this->asSubject();
+ }
+
+ $this->dataValueFactory = DataValueFactory::getInstance();
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @param DIWikiPage $targetSubject
+ */
+ public function setTargetSubject( DIWikiPage $targetSubject ) {
+ $this->targetSubject = $targetSubject;
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @return DIWikiPage
+ */
+ public function asSubject() {
+ return new DIWikiPage( 'Berlin', NS_MAIN );
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @return SemanticData
+ */
+ public function asEntity() {
+
+ $semanticData = new SemanticData( $this->asSubject() );
+ $semanticData->addDataValue( $this->getAreaValue() );
+ $semanticData->addDataValue( $this->getAverageHighTemperatureValue() );
+ $semanticData->addDataValue( $this->getPopulationValue() );
+ $semanticData->addDataValue( $this->getPopulationDensityValue() );
+ $semanticData->addDataValue( $this->getLocatedInValue() );
+ $semanticData->addDataValue( $this->getFoundedValue() );
+ $semanticData->addSubobject( $this->getDemographics() );
+
+ $cityCategory = new CityCategory();
+
+ $semanticData->addDataValue( $cityCategory->getCategoryValue() );
+
+ return $semanticData;
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @return DataValue
+ */
+ public function getLocatedInValue() {
+
+ $locatedInProperty = new LocatedInProperty();
+
+ return $this->dataValueFactory->newDataValueByItem(
+ new DIWikiPage( 'Germany', NS_MAIN ),
+ $locatedInProperty->getProperty()
+ );
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @see https://en.wikipedia.org/wiki/Berlin
+ *
+ * @return DataValue
+ */
+ public function getAreaValue() {
+
+ $areaProperty = new AreaProperty();
+
+ return $this->dataValueFactory->newDataValueByProperty(
+ $areaProperty->getProperty(),
+ '891.85 km²'
+ );
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @see https://en.wikipedia.org/wiki/Berlin
+ *
+ * @return DataValue
+ */
+ public function getFoundedValue() {
+
+ $foundedProperty = new FoundedProperty();
+
+ return $this->dataValueFactory->newDataValueByProperty(
+ $foundedProperty->getProperty(),
+ '1237'
+ );
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @see https://en.wikipedia.org/wiki/Berlin
+ *
+ * @return DataValue
+ */
+ public function getAverageHighTemperatureValue() {
+
+ $temperatureProperty = new TemperatureProperty();
+
+ return $this->dataValueFactory->newDataValueByProperty(
+ $temperatureProperty->getProperty(),
+ '13.4 °C',
+ 'Average high temperature'
+ );
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @see https://en.wikipedia.org/wiki/Berlin
+ *
+ * @return DataValue
+ */
+ public function getPopulationValue() {
+
+ $populationProperty = new PopulationProperty();
+
+ return $this->dataValueFactory->newDataValueByProperty(
+ $populationProperty->getProperty(),
+ '3517424'
+ );
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @see https://en.wikipedia.org/wiki/Demographics_of_Berlin
+ *
+ * @return DataValue
+ */
+ public function getPopulationDensityValue() {
+
+ if ( $this->targetSubject === null ) {
+ throw new RuntimeException( 'Expected a target subject' );
+ }
+
+ $populationDensityProperty = new PopulationDensityProperty();
+
+ return $this->dataValueFactory->newDataValueByProperty(
+ $populationDensityProperty->getProperty(),
+ '3900;1 km²',
+ 'Population density',
+ $this->targetSubject
+ );
+ }
+
+ /**
+ * @since 2.1
+ *
+ * @see https://en.wikipedia.org/wiki/Demographics_of_Berlin
+ *
+ * @return Subobject
+ */
+ public function getDemographics() {
+
+ if ( $this->targetSubject === null ) {
+ throw new RuntimeException( 'Expected a target subject' );
+ }
+
+ $subobject = new Subobject( $this->targetSubject->getTitle() );
+ $subobject->setEmptyContainerForId( 'Berlin#Demographics' );
+
+ $yearProperty = new YearProperty();
+
+ $yearDataValue = $this->dataValueFactory->newDataValueByProperty(
+ $yearProperty->getProperty(),
+ '2013'
+ );
+
+ $subobject->addDataValue( $yearDataValue );
+ $subobject->addDataValue( $this->getAreaValue() );
+ $subobject->addDataValue( $this->getPopulationValue() );
+ $subobject->addDataValue( $this->getPopulationDensityValue() );
+
+ return $subobject;
+ }
+
+ /**
+ * @since 2.1
+ */
+ public function purge() {
+
+ $subjects = [];
+
+ $subjects[] = $this->asSubject();
+ $subjects[] = $this->targetSubject;
+ $subjects[] = $this->getFoundedValue()->getProperty()->getDiWikiPage();
+ $subjects[] = $this->getAreaValue()->getProperty()->getDiWikiPage();
+ $subjects[] = $this->getAverageHighTemperatureValue()->getProperty()->getDiWikiPage();
+ $subjects[] = $this->getPopulationValue()->getProperty()->getDiWikiPage();
+ $subjects[] = $this->getPopulationDensityValue()->getProperty()->getDiWikiPage();
+ $subjects[] = $this->getDemographics()->getProperty()->getDiWikiPage();
+ $subjects[] = $this->getLocatedInValue()->getProperty()->getDiWikiPage();
+ $subjects[] = $this->getLocatedInValue()->getDataItem();
+
+ // Record type needs extra attention
+ $dataItems = $this->getPopulationDensityValue()->getDataItems();
+
+ foreach ( $dataItems as $dataItem ) {
+ $subjects[] = $dataItem;
+ }
+
+ // Clean-up subobject
+ $properties = $this->getDemographics()->getSemanticData()->getProperties();
+
+ foreach ( $properties as $property ) {
+ $subjects[] = $property->getDiWikiPage();
+ }
+
+ $pageDeleter = UtilityFactory::getInstance()->newPageDeleter();
+
+ foreach ( $subjects as $subject ) {
+ if ( $subject instanceof DIWikiPage ) {
+ $pageDeleter->deletePage( $subject->getTitle() );
+ }
+ }
+ }
+
+}