[MediaWiki-commits] [Gerrit] Refactor ComponentFactory.php - change (mediawiki...chameleon)

2014-11-15 Thread Foxtrott (Code Review)
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)

2014-11-15 Thread Foxtrott (Code Review)
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