[MediaWiki-commits] [Gerrit] Refactor ComponentFactory.php - change (mediawiki...chameleon)
Foxtrott has uploaded a new change for review. https://gerrit.wikimedia.org/r/173517 Change subject: Refactor ComponentFactory.php .. Refactor ComponentFactory.php Change-Id: I0dfc0af1a4560017d8025d360c12cce49adea2be --- M src/ComponentFactory.php 1 file changed, 95 insertions(+), 78 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/skins/chameleon refs/changes/17/173517/1 diff --git a/src/ComponentFactory.php b/src/ComponentFactory.php index e07aed7..946904c 100644 --- a/src/ComponentFactory.php +++ b/src/ComponentFactory.php @@ -21,7 +21,7 @@ * with this program. If not, see http://www.gnu.org/licenses/. * * @file - * @ingroup Skins + * @ingroup Skins */ namespace Skins\Chameleon; @@ -34,8 +34,8 @@ /** * Class ComponentFactory * - * @author Stephan Gambke - * @since 1.0 + * @author Stephan Gambke + * @since 1.0 * @ingroup Skins */ class ComponentFactory { @@ -84,6 +84,28 @@ } /** +* @return string +*/ + protected function getLayoutFile() { + + return $this-layoutFile; + } + + /** +* @param string $fileName +*/ + public function setLayoutFile( $fileName ) { + + $fileName = $this-sanitizeFileName( $fileName ); + + if ( !is_readable( $fileName ) ) { + throw new RuntimeException( Expected an accessible {$fileName} layout file ); + } + + $this-layoutFile = $fileName; + } + + /** * @param \DOMElement $description * @param int $indent * @param string $htmlClassAttribute @@ -105,6 +127,75 @@ } return $component; + } + + /** +* @param \DOMElement $description +* +* @return string +* @throws \MWException +* @since 1.1 +*/ + protected function getComponentClassName( \DOMElement $description ) { + + $className = $this-mapComponentDescriptionToClassName( $description ); + + if ( !class_exists( $className ) || !is_subclass_of( $className, 'Skins\\Chameleon\\Components\\Component' ) ) { + throw new \MWException( sprintf( '%s (line %d): Invalid component type: %s.', $this-getLayoutFile(), $description-getLineNo(), $description-getAttribute( 'type' ) ) ); + } + + return $className; + } + + /** +* @param \DOMElement $description +* +* @return string +* @throws \MWException +*/ + protected function mapComponentDescriptionToClassName( \DOMElement $description ) { + + $mapOfComponentsToClassNames = array( + 'structure'= 'Structure', + 'grid' = 'Grid', + 'row' = 'Row', + 'cell' = 'Cell', + 'modification' = 'Silent', + ); + + $nodeName = strtolower( $description-nodeName ); + + if ( array_key_exists( $nodeName, $mapOfComponentsToClassNames ) ) { + + $className = $mapOfComponentsToClassNames[ $nodeName ]; + + } elseif ( $nodeName === 'component' ) { + + if ( $description-hasAttribute( 'type' ) ) { + $className = $description-getAttribute( 'type' ); + } else { + $className = 'Container'; + } + + } else { + throw new \MWException( sprintf( '%s (line %d): XML element not allowed here: %s.', $this-getLayoutFile(), $description-getLineNo(), $description-nodeName ) ); + } + + return 'Skins\\Chameleon\\Components\\' . $className; + } + + /** +* @return mixed +*/ + public function getSkinTemplate() { + return $this-skinTemplate; + } + + /** +* @param ChameleonTemplate $skinTemplate +*/ + public function setSkinTemplate( ChameleonTemplate $skinTemplate ) { + $this-skinTemplate = $skinTemplate; } /** @@ -131,86 +222,12 @@ } /** -* @return string -*/ - protected function getLayoutFile() { - - return $this-layoutFile; - } - - /** * @param string $fileName -*/ - public function setLayoutFile( $fileName ) { - - $fileName = $this-sanitizeFileName( $fileName ); - - if ( !is_readable( $fileName ) ) { - throw new RuntimeException( Expected an accessible {$fileName} layout file ); - } - - $this-layoutFile = $fileName; - } - - /** -* @param string $fileName +
[MediaWiki-commits] [Gerrit] Refactor ComponentFactory.php - change (mediawiki...chameleon)
Foxtrott has submitted this change and it was merged. Change subject: Refactor ComponentFactory.php .. Refactor ComponentFactory.php Change-Id: I0dfc0af1a4560017d8025d360c12cce49adea2be --- M src/ComponentFactory.php 1 file changed, 95 insertions(+), 78 deletions(-) Approvals: Foxtrott: Verified; Looks good to me, approved diff --git a/src/ComponentFactory.php b/src/ComponentFactory.php index e07aed7..946904c 100644 --- a/src/ComponentFactory.php +++ b/src/ComponentFactory.php @@ -21,7 +21,7 @@ * with this program. If not, see http://www.gnu.org/licenses/. * * @file - * @ingroup Skins + * @ingroup Skins */ namespace Skins\Chameleon; @@ -34,8 +34,8 @@ /** * Class ComponentFactory * - * @author Stephan Gambke - * @since 1.0 + * @author Stephan Gambke + * @since 1.0 * @ingroup Skins */ class ComponentFactory { @@ -84,6 +84,28 @@ } /** +* @return string +*/ + protected function getLayoutFile() { + + return $this-layoutFile; + } + + /** +* @param string $fileName +*/ + public function setLayoutFile( $fileName ) { + + $fileName = $this-sanitizeFileName( $fileName ); + + if ( !is_readable( $fileName ) ) { + throw new RuntimeException( Expected an accessible {$fileName} layout file ); + } + + $this-layoutFile = $fileName; + } + + /** * @param \DOMElement $description * @param int $indent * @param string $htmlClassAttribute @@ -105,6 +127,75 @@ } return $component; + } + + /** +* @param \DOMElement $description +* +* @return string +* @throws \MWException +* @since 1.1 +*/ + protected function getComponentClassName( \DOMElement $description ) { + + $className = $this-mapComponentDescriptionToClassName( $description ); + + if ( !class_exists( $className ) || !is_subclass_of( $className, 'Skins\\Chameleon\\Components\\Component' ) ) { + throw new \MWException( sprintf( '%s (line %d): Invalid component type: %s.', $this-getLayoutFile(), $description-getLineNo(), $description-getAttribute( 'type' ) ) ); + } + + return $className; + } + + /** +* @param \DOMElement $description +* +* @return string +* @throws \MWException +*/ + protected function mapComponentDescriptionToClassName( \DOMElement $description ) { + + $mapOfComponentsToClassNames = array( + 'structure'= 'Structure', + 'grid' = 'Grid', + 'row' = 'Row', + 'cell' = 'Cell', + 'modification' = 'Silent', + ); + + $nodeName = strtolower( $description-nodeName ); + + if ( array_key_exists( $nodeName, $mapOfComponentsToClassNames ) ) { + + $className = $mapOfComponentsToClassNames[ $nodeName ]; + + } elseif ( $nodeName === 'component' ) { + + if ( $description-hasAttribute( 'type' ) ) { + $className = $description-getAttribute( 'type' ); + } else { + $className = 'Container'; + } + + } else { + throw new \MWException( sprintf( '%s (line %d): XML element not allowed here: %s.', $this-getLayoutFile(), $description-getLineNo(), $description-nodeName ) ); + } + + return 'Skins\\Chameleon\\Components\\' . $className; + } + + /** +* @return mixed +*/ + public function getSkinTemplate() { + return $this-skinTemplate; + } + + /** +* @param ChameleonTemplate $skinTemplate +*/ + public function setSkinTemplate( ChameleonTemplate $skinTemplate ) { + $this-skinTemplate = $skinTemplate; } /** @@ -131,86 +222,12 @@ } /** -* @return string -*/ - protected function getLayoutFile() { - - return $this-layoutFile; - } - - /** * @param string $fileName -*/ - public function setLayoutFile( $fileName ) { - - $fileName = $this-sanitizeFileName( $fileName ); - - if ( !is_readable( $fileName ) ) { - throw new RuntimeException( Expected an accessible {$fileName} layout file ); - } - - $this-layoutFile = $fileName; - } - - /** -* @param string $fileName +* * @return string */ public function