Lucas Werkmeister (WMDE) has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/373037 )
Change subject: Merge ConstraintParameterParser methods
......................................................................
Merge ConstraintParameterParser methods
Now that we don’t need to parse multiple parameter styles anymore, we
can merge
private function parseXFromStatement(…) {
/* repeated initialization */
/* parsing code */
}
public function parseX(…) {
/* initialization */
if ( parameter present ) {
return parseXFromStatement();
} else {
throw exception;
}
}
into
public function parseX(…) {
/* initialization */
if ( ! parameter present ) {
throw exception;
}
/* parsing code */
}
Note how this gets rid of some repeated initialization (both parseX()
and parseXFromStatement() need the parameter ID from the config).
The condition is inverted so that the parsing code doesn’t gain an extra
indentation level.
parseSyntaxClarificationParameter() is amended to match the same style,
even though it already only had one method, since it never supported
template-style parameters in the first place (it was added after the
constraint statement migration).
Bug: T171291
Change-Id: Iab4f4cc8279ec18292bd0b412645ed32f334d86d
---
M includes/ConstraintCheck/Helper/ConstraintParameterParser.php
1 file changed, 118 insertions(+), 169 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseQualityConstraints
refs/changes/37/373037/1
diff --git a/includes/ConstraintCheck/Helper/ConstraintParameterParser.php
b/includes/ConstraintCheck/Helper/ConstraintParameterParser.php
index c6a54e2..d5360c3 100644
--- a/includes/ConstraintCheck/Helper/ConstraintParameterParser.php
+++ b/includes/ConstraintCheck/Helper/ConstraintParameterParser.php
@@ -148,15 +148,6 @@
}
}
- private function parseClassParameterFromStatement( array
$constraintParameters ) {
- $classId = $this->config->get( 'WBQualityConstraintsClassId' );
- $classes = [];
- foreach ( $constraintParameters[$classId] as $class ) {
- $classes[] = $this->parseEntityIdParameter( $class,
$classId )->getSerialization();
- }
- return $classes;
- }
-
/**
* @param array $constraintParameters see {@link
\WikibaseQuality\Constraint::getConstraintParameters()}
* @param string $constraintTypeItemId used in error messages
@@ -166,9 +157,7 @@
public function parseClassParameter( array $constraintParameters,
$constraintTypeItemId ) {
$this->checkError( $constraintParameters );
$classId = $this->config->get( 'WBQualityConstraintsClassId' );
- if ( array_key_exists( $classId, $constraintParameters ) ) {
- return $this->parseClassParameterFromStatement(
$constraintParameters );
- } else {
+ if ( !array_key_exists( $classId, $constraintParameters ) ) {
throw new ConstraintParameterException(
wfMessage(
'wbqc-violation-message-parameter-needed' )
->rawParams(
$this->constraintParameterRenderer->formatItemId( $constraintTypeItemId,
Role::CONSTRAINT_TYPE_ITEM ) )
@@ -176,28 +165,12 @@
->escaped()
);
}
- }
- private function parseRelationParameterFromStatement( array
$constraintParameters ) {
- $relationId = $this->config->get(
'WBQualityConstraintsRelationId' );
- $this->requireSingleParameter( $constraintParameters,
$relationId );
- $relationEntityId = $this->parseEntityIdParameter(
$constraintParameters[$relationId][0], $relationId );
- $instanceId = $this->config->get(
'WBQualityConstraintsInstanceOfRelationId' );
- $subclassId = $this->config->get(
'WBQualityConstraintsSubclassOfRelationId' );
- switch ( $relationEntityId ) {
- case $instanceId:
- return 'instance';
- case $subclassId:
- return 'subclass';
- default:
- throw new ConstraintParameterException(
- wfMessage(
'wbqc-violation-message-parameter-oneof' )
- ->rawParams(
$this->constraintParameterRenderer->formatPropertyId( $relationId,
Role::CONSTRAINT_PARAMETER_PROPERTY ) )
- ->numParams( 2 )
- ->rawParams(
$this->constraintParameterRenderer->formatItemIdList( [ $instanceId,
$subclassId ], Role::CONSTRAINT_PARAMETER_VALUE ) )
- ->escaped()
- );
- }
+ $classes = [];
+ foreach ( $constraintParameters[$classId] as $class ) {
+ $classes[] = $this->parseEntityIdParameter( $class, $classId
)->getSerialization();
+ }
+ return $classes;
}
/**
@@ -209,9 +182,7 @@
public function parseRelationParameter( array $constraintParameters,
$constraintTypeItemId ) {
$this->checkError( $constraintParameters );
$relationId = $this->config->get(
'WBQualityConstraintsRelationId' );
- if ( array_key_exists( $relationId, $constraintParameters ) ) {
- return $this->parseRelationParameterFromStatement(
$constraintParameters );
- } else {
+ if ( !array_key_exists( $relationId, $constraintParameters ) ) {
throw new ConstraintParameterException(
wfMessage(
'wbqc-violation-message-parameter-needed' )
->rawParams(
$this->constraintParameterRenderer->formatItemId( $constraintTypeItemId,
Role::CONSTRAINT_TYPE_ITEM ) )
@@ -219,6 +190,25 @@
->escaped()
);
}
+
+ $this->requireSingleParameter( $constraintParameters, $relationId );
+ $relationEntityId = $this->parseEntityIdParameter(
$constraintParameters[$relationId][0], $relationId );
+ $instanceId = $this->config->get(
'WBQualityConstraintsInstanceOfRelationId' );
+ $subclassId = $this->config->get(
'WBQualityConstraintsSubclassOfRelationId' );
+ switch ( $relationEntityId ) {
+ case $instanceId:
+ return 'instance';
+ case $subclassId:
+ return 'subclass';
+ default:
+ throw new ConstraintParameterException(
+ wfMessage( 'wbqc-violation-message-parameter-oneof' )
+ ->rawParams(
$this->constraintParameterRenderer->formatPropertyId( $relationId,
Role::CONSTRAINT_PARAMETER_PROPERTY ) )
+ ->numParams( 2 )
+ ->rawParams(
$this->constraintParameterRenderer->formatItemIdList( [ $instanceId,
$subclassId ], Role::CONSTRAINT_PARAMETER_VALUE ) )
+ ->escaped()
+ );
+ }
}
/**
@@ -248,12 +238,6 @@
);
}
- private function parsePropertyParameterFromStatement( array
$constraintParameters ) {
- $propertyIdString = $this->config->get(
'WBQualityConstraintsPropertyId' );
- $this->requireSingleParameter( $constraintParameters,
$propertyIdString );
- return $this->parsePropertyIdParameter(
$constraintParameters[$propertyIdString][0], $propertyIdString );
- }
-
/**
* @param array $constraintParameters see {@link
\WikibaseQuality\Constraint::getConstraintParameters()}
* @param string $constraintTypeItemId used in error messages
@@ -263,9 +247,7 @@
public function parsePropertyParameter( array $constraintParameters,
$constraintTypeItemId ) {
$this->checkError( $constraintParameters );
$propertyId = $this->config->get(
'WBQualityConstraintsPropertyId' );
- if ( array_key_exists( $propertyId, $constraintParameters ) ) {
- return $this->parsePropertyParameterFromStatement(
$constraintParameters );
- } else {
+ if ( !array_key_exists( $propertyId, $constraintParameters ) ) {
throw new ConstraintParameterException(
wfMessage(
'wbqc-violation-message-parameter-needed' )
->rawParams(
$this->constraintParameterRenderer->formatItemId( $constraintTypeItemId,
Role::CONSTRAINT_TYPE_ITEM ) )
@@ -273,6 +255,9 @@
->escaped()
);
}
+
+ $this->requireSingleParameter( $constraintParameters, $propertyId );
+ return $this->parsePropertyIdParameter(
$constraintParameters[$propertyId][0], $propertyId );
}
private function parseItemIdParameter( PropertyValueSnak $snak,
$parameterId ) {
@@ -292,26 +277,6 @@
}
}
- private function parseItemsParameterFromStatement( array
$constraintParameters ) {
- $qualifierId = $this->config->get(
'WBQualityConstraintsQualifierOfPropertyConstraintId' );
- $values = [];
- foreach ( $constraintParameters[$qualifierId] as $parameter ) {
- $snak = $this->snakDeserializer->deserialize(
$parameter );
- switch ( true ) {
- case $snak instanceof PropertyValueSnak:
- $values[] =
$this->parseItemIdParameter( $snak, $qualifierId );
- break;
- case $snak instanceof PropertySomeValueSnak:
- $values[] =
ItemIdSnakValue::someValue();
- break;
- case $snak instanceof PropertyNoValueSnak:
- $values[] = ItemIdSnakValue::noValue();
- break;
- }
- }
- return $values;
- }
-
/**
* @param array $constraintParameters see {@link
\WikibaseQuality\Constraint::getConstraintParameters()}
* @param string $constraintTypeItemId used in error messages
@@ -322,9 +287,7 @@
public function parseItemsParameter( array $constraintParameters,
$constraintTypeItemId, $required ) {
$this->checkError( $constraintParameters );
$qualifierId = $this->config->get(
'WBQualityConstraintsQualifierOfPropertyConstraintId' );
- if ( array_key_exists( $qualifierId, $constraintParameters ) ) {
- return $this->parseItemsParameterFromStatement(
$constraintParameters );
- } else {
+ if ( !array_key_exists( $qualifierId, $constraintParameters ) )
{
if ( $required ) {
throw new ConstraintParameterException(
wfMessage(
'wbqc-violation-message-parameter-needed' )
@@ -336,22 +299,23 @@
return [];
}
}
- }
- private function parsePropertiesParameterFromStatement( array
$constraintParameters ) {
- $propertyId = $this->config->get(
'WBQualityConstraintsPropertyId' );
- $parameters = $constraintParameters[$propertyId];
- if ( count( $parameters ) === 1 &&
- $this->snakDeserializer->deserialize( $parameters[0] )
instanceof PropertyNoValueSnak
- ) {
- return [];
- }
-
- $properties = [];
- foreach ( $parameters as $parameter ) {
- $properties[] = $this->parsePropertyIdParameter(
$parameter, $propertyId );
- }
- return $properties;
+ $values = [];
+ foreach ( $constraintParameters[$qualifierId] as $parameter ) {
+ $snak = $this->snakDeserializer->deserialize( $parameter );
+ switch ( true ) {
+ case $snak instanceof PropertyValueSnak:
+ $values[] = $this->parseItemIdParameter( $snak,
$qualifierId );
+ break;
+ case $snak instanceof PropertySomeValueSnak:
+ $values[] = ItemIdSnakValue::someValue();
+ break;
+ case $snak instanceof PropertyNoValueSnak:
+ $values[] = ItemIdSnakValue::noValue();
+ break;
+ }
+ }
+ return $values;
}
/**
@@ -363,9 +327,7 @@
public function parsePropertiesParameter( array $constraintParameters,
$constraintTypeItemId ) {
$this->checkError( $constraintParameters );
$propertyId = $this->config->get(
'WBQualityConstraintsPropertyId' );
- if ( array_key_exists( $propertyId, $constraintParameters ) ) {
- return $this->parsePropertiesParameterFromStatement(
$constraintParameters );
- } else {
+ if ( !array_key_exists( $propertyId, $constraintParameters ) ) {
throw new ConstraintParameterException(
wfMessage(
'wbqc-violation-message-parameter-needed' )
->rawParams(
$this->constraintParameterRenderer->formatItemId( $constraintTypeItemId,
Role::CONSTRAINT_TYPE_ITEM ) )
@@ -373,6 +335,19 @@
->escaped()
);
}
+
+ $parameters = $constraintParameters[$propertyId];
+ if ( count( $parameters ) === 1 &&
+ $this->snakDeserializer->deserialize( $parameters[0] ) instanceof
PropertyNoValueSnak
+ ) {
+ return [];
+ }
+
+ $properties = [];
+ foreach ( $parameters as $parameter ) {
+ $properties[] = $this->parsePropertyIdParameter( $parameter,
$propertyId );
+ }
+ return $properties;
}
/**
@@ -411,18 +386,6 @@
}
}
- private function parseRangeParameterFromStatement( array
$constraintParameters, $configKey ) {
- $minimumId = $this->config->get( 'WBQualityConstraintsMinimum'
. $configKey . 'Id' );
- $maximumId = $this->config->get( 'WBQualityConstraintsMaximum'
. $configKey . 'Id' );
- $this->requireSingleParameter( $constraintParameters,
$minimumId );
- $this->requireSingleParameter( $constraintParameters,
$maximumId );
- $parseFunction = $configKey === 'Date' ?
'parseValueOrNoValueOrNowParameter' : 'parseValueOrNoValueParameter';
- return [
- $this->$parseFunction(
$constraintParameters[$minimumId][0], $minimumId ),
- $this->$parseFunction(
$constraintParameters[$maximumId][0], $maximumId )
- ];
- }
-
/**
* @param array $constraintParameters see {@link
\WikibaseQuality\Constraint::getConstraintParameters()}
* @param string $constraintTypeItemId used in error messages
@@ -451,11 +414,9 @@
}
$minimumId = $this->config->get( 'WBQualityConstraintsMinimum'
. $configKey . 'Id' );
$maximumId = $this->config->get( 'WBQualityConstraintsMaximum'
. $configKey . 'Id' );
- if ( array_key_exists( $minimumId, $constraintParameters ) &&
- array_key_exists( $maximumId, $constraintParameters )
+ if ( !array_key_exists( $minimumId, $constraintParameters ) ||
+ !array_key_exists( $maximumId, $constraintParameters )
) {
- return $this->parseRangeParameterFromStatement(
$constraintParameters, $configKey );
- } else {
throw new ConstraintParameterException(
wfMessage(
'wbqc-violation-message-range-parameters-needed' )
->rawParams(
@@ -467,6 +428,14 @@
->escaped()
);
}
+
+ $this->requireSingleParameter( $constraintParameters, $minimumId );
+ $this->requireSingleParameter( $constraintParameters, $maximumId );
+ $parseFunction = $configKey === 'Date' ?
'parseValueOrNoValueOrNowParameter' : 'parseValueOrNoValueParameter';
+ return [
+ $this->$parseFunction( $constraintParameters[$minimumId][0],
$minimumId ),
+ $this->$parseFunction( $constraintParameters[$maximumId][0],
$maximumId )
+ ];
}
/**
@@ -494,12 +463,6 @@
}
}
- private function parseNamespaceParameterFromStatement( array
$constraintParameters ) {
- $namespaceId = $this->config->get(
'WBQualityConstraintsNamespaceId' );
- $this->requireSingleParameter( $constraintParameters,
$namespaceId );
- return $this->parseStringParameter(
$constraintParameters[$namespaceId][0], $namespaceId );
- }
-
/**
* @param array $constraintParameters see {@link
\WikibaseQuality\Constraint::getConstraintParameters()}
* @param string $constraintTypeItemId used in error messages
@@ -509,17 +472,12 @@
public function parseNamespaceParameter( array $constraintParameters,
$constraintTypeItemId ) {
$this->checkError( $constraintParameters );
$namespaceId = $this->config->get(
'WBQualityConstraintsNamespaceId' );
- if ( array_key_exists( $namespaceId, $constraintParameters ) ) {
- return $this->parseNamespaceParameterFromStatement(
$constraintParameters );
- } else {
+ if ( !array_key_exists( $namespaceId, $constraintParameters ) )
{
return '';
}
- }
- private function parseFormatParameterFromStatement( array
$constraintParameters ) {
- $formatId = $this->config->get(
'WBQualityConstraintsFormatAsARegularExpressionId' );
- $this->requireSingleParameter( $constraintParameters, $formatId
);
- return $this->parseStringParameter(
$constraintParameters[$formatId][0], $formatId );
+ $this->requireSingleParameter( $constraintParameters, $namespaceId );
+ return $this->parseStringParameter(
$constraintParameters[$namespaceId][0], $namespaceId );
}
/**
@@ -531,9 +489,7 @@
public function parseFormatParameter( array $constraintParameters,
$constraintTypeItemId ) {
$this->checkError( $constraintParameters );
$formatId = $this->config->get(
'WBQualityConstraintsFormatAsARegularExpressionId' );
- if ( array_key_exists( $formatId, $constraintParameters ) ) {
- return $this->parseFormatParameterFromStatement(
$constraintParameters );
- } else {
+ if ( !array_key_exists( $formatId, $constraintParameters ) ) {
throw new ConstraintParameterException(
wfMessage(
'wbqc-violation-message-parameter-needed' )
->rawParams(
$this->constraintParameterRenderer->formatItemId( $constraintTypeItemId,
Role::CONSTRAINT_TYPE_ITEM ) )
@@ -541,16 +497,9 @@
->escaped()
);
}
- }
- private function parseExceptionParameterFromStatement( array
$constraintParameters ) {
- $exceptionId = $this->config->get(
'WBQualityConstraintsExceptionToConstraintId' );
- return array_map(
- function( $snakSerialization ) use ( $exceptionId ) {
- return $this->parseEntityIdParameter(
$snakSerialization, $exceptionId );
- },
- $constraintParameters[$exceptionId]
- );
+ $this->requireSingleParameter( $constraintParameters, $formatId );
+ return $this->parseStringParameter(
$constraintParameters[$formatId][0], $formatId );
}
/**
@@ -561,32 +510,16 @@
public function parseExceptionParameter( array $constraintParameters ) {
$this->checkError( $constraintParameters );
$exceptionId = $this->config->get(
'WBQualityConstraintsExceptionToConstraintId' );
- if ( array_key_exists( $exceptionId, $constraintParameters ) ) {
- return $this->parseExceptionParameterFromStatement(
$constraintParameters );
- } else {
+ if ( !array_key_exists( $exceptionId, $constraintParameters ) )
{
return [];
}
- }
- private function parseConstraintStatusParameterFromStatement( array
$constraintParameters ) {
- $constraintStatusId = $this->config->get(
'WBQualityConstraintsConstraintStatusId' );
- $mandatoryId = $this->config->get(
'WBQualityConstraintsMandatoryConstraintId' );
- $this->requireSingleParameter( $constraintParameters,
$constraintStatusId );
- $snak = $this->snakDeserializer->deserialize(
$constraintParameters[$constraintStatusId][0] );
- $this->requireValueParameter( $snak, $constraintStatusId );
- $statusId =
$snak->getDataValue()->getEntityId()->getSerialization();
-
- if ( $statusId === $mandatoryId ) {
- return 'mandatory';
- } else {
- throw new ConstraintParameterException(
- wfMessage(
'wbqc-violation-message-parameter-oneof' )
- ->rawParams(
$this->constraintParameterRenderer->formatPropertyId( $constraintStatusId,
Role::CONSTRAINT_PARAMETER_PROPERTY ) )
- ->numParams( 1 )
- ->rawParams(
$this->constraintParameterRenderer->formatItemIdList( [ $mandatoryId ],
Role::CONSTRAINT_PARAMETER_VALUE ) )
- ->escaped()
- );
- }
+ return array_map(
+ function( $snakSerialization ) use ( $exceptionId ) {
+ return $this->parseEntityIdParameter( $snakSerialization,
$exceptionId );
+ },
+ $constraintParameters[$exceptionId]
+ );
}
/**
@@ -597,11 +530,27 @@
public function parseConstraintStatusParameter( array
$constraintParameters ) {
$this->checkError( $constraintParameters );
$constraintStatusId = $this->config->get(
'WBQualityConstraintsConstraintStatusId' );
- if ( array_key_exists( $constraintStatusId,
$constraintParameters ) ) {
- return
$this->parseConstraintStatusParameterFromStatement( $constraintParameters );
- } else {
+ if ( !array_key_exists( $constraintStatusId,
$constraintParameters ) ) {
return null;
}
+
+ $mandatoryId = $this->config->get(
'WBQualityConstraintsMandatoryConstraintId' );
+ $this->requireSingleParameter( $constraintParameters,
$constraintStatusId );
+ $snak = $this->snakDeserializer->deserialize(
$constraintParameters[$constraintStatusId][0] );
+ $this->requireValueParameter( $snak, $constraintStatusId );
+ $statusId = $snak->getDataValue()->getEntityId()->getSerialization();
+
+ if ( $statusId === $mandatoryId ) {
+ return 'mandatory';
+ } else {
+ throw new ConstraintParameterException(
+ wfMessage( 'wbqc-violation-message-parameter-oneof' )
+ ->rawParams(
$this->constraintParameterRenderer->formatPropertyId( $constraintStatusId,
Role::CONSTRAINT_PARAMETER_PROPERTY ) )
+ ->numParams( 1 )
+ ->rawParams(
$this->constraintParameterRenderer->formatItemIdList( [ $mandatoryId ],
Role::CONSTRAINT_PARAMETER_VALUE ) )
+ ->escaped()
+ );
+ }
}
/**
@@ -672,25 +621,25 @@
public function parseSyntaxClarificationParameter( array
$constraintParameters, Language $language ) {
$syntaxClarificationId = $this->config->get(
'WBQualityConstraintsSyntaxClarificationId' );
- if ( array_key_exists( $syntaxClarificationId,
$constraintParameters ) ) {
- $languageCodes = $language->getFallbackLanguages();
- array_unshift( $languageCodes, $language->getCode() );
+ if ( !array_key_exists( $syntaxClarificationId,
$constraintParameters ) ) {
+ return null;
+ }
- $syntaxClarifications =
$this->parseMultilingualTextParameter(
- $constraintParameters[$syntaxClarificationId],
- $syntaxClarificationId
- );
+ $languageCodes = $language->getFallbackLanguages();
+ array_unshift( $languageCodes, $language->getCode() );
- foreach ( $languageCodes as $languageCode ) {
- if ( array_key_exists( $languageCode,
$syntaxClarifications ) ) {
- return
$syntaxClarifications[$languageCode];
- }
+ $syntaxClarifications = $this->parseMultilingualTextParameter(
+ $constraintParameters[$syntaxClarificationId],
+ $syntaxClarificationId
+ );
+
+ foreach ( $languageCodes as $languageCode ) {
+ if ( array_key_exists( $languageCode,
$syntaxClarifications ) ) {
+ return $syntaxClarifications[$languageCode];
}
-
- return null;
- } else {
- return null;
}
+
+ return null;
}
}
--
To view, visit https://gerrit.wikimedia.org/r/373037
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iab4f4cc8279ec18292bd0b412645ed32f334d86d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseQualityConstraints
Gerrit-Branch: master
Gerrit-Owner: Lucas Werkmeister (WMDE) <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits