]> git.mxchange.org Git - city.git/commitdiff
Renamed class + introduced BaseCityTask which expands BaseTask. This requires
authorRoland Haeder <roland@mxchange.org>
Wed, 1 Jul 2015 00:49:12 +0000 (02:49 +0200)
committerRoland Haeder <roland@mxchange.org>
Wed, 1 Jul 2015 00:49:12 +0000 (02:49 +0200)
that (an exception of the rules) an attribute must be defined at a 2nd location.

Signed-off-by: Roland Haeder <roland@mxchange.org>
19 files changed:
application/city/main/commands/console/class_CityConsoleDaemonCommand.php
application/city/main/factories/city/.htaccess [deleted file]
application/city/main/factories/city/class_CityDaemonObjectFactory.php [deleted file]
application/city/main/factories/city_daemon/.htaccess [new file with mode: 0644]
application/city/main/factories/city_daemon/class_CityDaemonFactory.php [new file with mode: 0644]
application/city/main/factories/states/city/class_CityStateFactory.php
application/city/main/filter/bootstrap/init/class_CityDaemonBootstrapInitDaemonFilter.php
application/city/main/filter/city_daemon/class_CityDaemonInitializationFilter.php
application/city/main/filter/city_daemon/class_CityDaemonWelcomeTeaserFilter.php
application/city/main/filter/shutdown/city/class_CityDaemonShutdownCityFilter.php
application/city/main/filter/task/city_daemon/class_CityDaemonTaskHandlerInitializerFilter.php
application/city/main/states/city/active/class_CityActiveState.php
application/city/main/tasks/class_BaseCityTask.php [new file with mode: 0644]
application/city/main/tasks/daemon/building/class_CityDaemonBuildingGrowthTask.php
application/city/main/tasks/daemon/city_map/.htaccess [deleted file]
application/city/main/tasks/daemon/city_map/class_CityDaemonMapExpanderTask.php [deleted file]
application/city/main/tasks/daemon/household/class_CityDaemonHouseholdGrowthTask.php
application/city/main/tasks/daemon/map_expander/.htaccess [new file with mode: 0644]
application/city/main/tasks/daemon/map_expander/class_CityDaemonMapExpanderTask.php [new file with mode: 0644]

index a0f444b045c6063ef1a004f01e08cf1bd8c9ad5b..08f564e696d6b36ba72ea12f24c97bd341a0f94c 100644 (file)
@@ -72,7 +72,7 @@ class CityConsoleDaemonCommand extends BaseCommand implements Commandable {
                self::createDebugInstance(__CLASS__)->debugOutput('BOOTSTRAP: Bootstrap finished.');
 
                // Get city instance
-               $cityInstance = CityDaemonObjectFactory::createCityDaemonInstance();
+               $cityInstance = CityDaemonFactory::createCityDaemonInstance();
 
                // Add some city-specific filters, e.g. announcement
                $cityInstance->addExtraCityFilters();
diff --git a/application/city/main/factories/city/.htaccess b/application/city/main/factories/city/.htaccess
deleted file mode 100644 (file)
index 3a42882..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Deny from all
diff --git a/application/city/main/factories/city/class_CityDaemonObjectFactory.php b/application/city/main/factories/city/class_CityDaemonObjectFactory.php
deleted file mode 100644 (file)
index 0acfe5f..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * A factory class for cities
- *
- * @author             Roland Haeder <webmaster@ship-simu.org>
- * @version            0.0.0
- * @copyright  Copyright (c) 2015 City Developer Team
- * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.ship-simu.org
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-class CityDaemonObjectFactory extends ObjectFactory {
-       /**
-        * Protected constructor
-        *
-        * @return      void
-        */
-       protected function __construct () {
-               // Call parent constructor
-               parent::__construct(__CLASS__);
-       }
-
-       /**
-        * Returns a singleton (registry-based) CityHelper instance
-        *
-        * @param       $requestInstance        An instance of a class with an Requestable interface
-        * @param       $responseInstance       An instance of a class with an Responseable interface
-        * @return      $cityInstance           An instance of a CityHelper class
-        * @throws      FactoryRequiredParameterException       If not all parameters are set and no instance 'city' is set.
-        */
-       public static final function createCityDaemonInstance (Requestable $requestInstance = NULL, Responseable $responseInstance = NULL) {
-               // Get new factory instance
-               $factoryInstance = new CityDaemonObjectFactory();
-
-               // If there is no handler?
-               if (Registry::getRegistry()->instanceExists('city')) {
-                       // Get handler from registry
-                       $cityInstance = Registry::getRegistry()->getInstance('city');
-               } elseif (($requestInstance instanceof Requestable) && ($responseInstance instanceof Responseable)) {
-                       // The default city-mode is from our configuration
-                       $cityMode = $factoryInstance->getConfigInstance()->getConfigEntry('city_default_mode');
-
-                       // Is the city 'mode' parameter set?
-                       if ($requestInstance->isRequestElementSet('mode')) {
-                               // Then use this which overrides the config entry temporarily
-                               $cityMode = $requestInstance->getRequestElement('mode');
-                       } else {
-                               // Set it for easier re-usage
-                               $requestInstance->setRequestElement('mode', $cityMode);
-                       }
-
-                       // Now convert the city-mode in a class name
-                       $className = 'Simulation' . $factoryInstance->convertToClassName($cityMode) . 'CityDaemon';
-
-                       // Get the city instance
-                       $cityInstance = ObjectFactory::createObjectByName($className, array($requestInstance));
-
-                       // Get a registry
-                       $applicationInstance = Registry::getRegistry()->getInstance('app');
-
-                       // Set the app instance
-                       $cityInstance->setApplicationInstance($applicationInstance);
-
-                       // Add city-specific filters
-                       $cityInstance->addExtraFilters($applicationInstance->getControllerInstance(), $responseInstance);
-               } else {
-                       // Throw an exception here
-                       throw new FactoryRequiredParameterException($factoryInstance, self::EXCEPTION_FACTORY_REQUIRE_PARAMETER);
-               }
-
-               // Return the instance
-               return $cityInstance;
-       }
-}
-
-// [EOF]
-?>
diff --git a/application/city/main/factories/city_daemon/.htaccess b/application/city/main/factories/city_daemon/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/city/main/factories/city_daemon/class_CityDaemonFactory.php b/application/city/main/factories/city_daemon/class_CityDaemonFactory.php
new file mode 100644 (file)
index 0000000..ac34e8f
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ * A factory class for cities
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2015 City Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class CityDaemonFactory extends ObjectFactory {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Returns a singleton (registry-based) CityHelper instance
+        *
+        * @param       $requestInstance        An instance of a class with an Requestable interface
+        * @param       $responseInstance       An instance of a class with an Responseable interface
+        * @return      $cityInstance           An instance of a CityHelper class
+        * @throws      FactoryRequiredParameterException       If not all parameters are set and no instance 'city' is set.
+        */
+       public static final function createCityDaemonInstance (Requestable $requestInstance = NULL, Responseable $responseInstance = NULL) {
+               // Get new factory instance
+               $factoryInstance = new CityDaemonFactory();
+
+               // If there is no handler?
+               if (Registry::getRegistry()->instanceExists('city')) {
+                       // Get handler from registry
+                       $cityInstance = Registry::getRegistry()->getInstance('city');
+               } elseif (($requestInstance instanceof Requestable) && ($responseInstance instanceof Responseable)) {
+                       // The default city-mode is from our configuration
+                       $cityMode = $factoryInstance->getConfigInstance()->getConfigEntry('city_default_mode');
+
+                       // Is the city 'mode' parameter set?
+                       if ($requestInstance->isRequestElementSet('mode')) {
+                               // Then use this which overrides the config entry temporarily
+                               $cityMode = $requestInstance->getRequestElement('mode');
+                       } else {
+                               // Set it for easier re-usage
+                               $requestInstance->setRequestElement('mode', $cityMode);
+                       }
+
+                       // Now convert the city-mode in a class name
+                       $className = 'Simulation' . $factoryInstance->convertToClassName($cityMode) . 'CityDaemon';
+
+                       // Get the city instance
+                       $cityInstance = ObjectFactory::createObjectByName($className, array($requestInstance));
+
+                       // Get a registry
+                       $applicationInstance = Registry::getRegistry()->getInstance('app');
+
+                       // Set the app instance
+                       $cityInstance->setApplicationInstance($applicationInstance);
+
+                       // Add city-specific filters
+                       $cityInstance->addExtraFilters($applicationInstance->getControllerInstance(), $responseInstance);
+               } else {
+                       // Throw an exception here
+                       throw new FactoryRequiredParameterException($factoryInstance, self::EXCEPTION_FACTORY_REQUIRE_PARAMETER);
+               }
+
+               // Return the instance
+               return $cityInstance;
+       }
+}
+
+// [EOF]
+?>
index 64c42d85a5280956a2e04faf85b88e5a5060ee0f..8332257fadb847d408a7865755a7b76f04b6a7a8 100644 (file)
@@ -47,7 +47,7 @@ class CityStateFactory extends ObjectFactory {
                $stateInstance = self::createObjectByConfiguredName($className);
 
                // Get city instance
-               $cityInstance = CityDaemonObjectFactory::createCityDaemonInstance();
+               $cityInstance = CityDaemonFactory::createCityDaemonInstance();
 
                // Debug message
                self::createDebugInstance(__CLASS__)->debugOutput('CITY-STATE-FACTORY[' . __METHOD__ . ':' . __LINE__ . ']: City state has changed from ' . $cityInstance->getPrintableState() . ' to ' . $stateInstance->getStateName() . '.');
index 69c20ca07a09bf7a0ee5a160d3b4e4cb3da873d6..5bc30aa9fa52844c1ffbc119fb073bc1a7d86924 100644 (file)
@@ -56,7 +56,7 @@ class CityDaemonBootstrapInitDaemonFilter extends BaseCityFilter implements Filt
         */
        public function execute (Requestable $requestInstance, Responseable $responseInstance) {
                // Get city instance
-               $cityInstance = CityDaemonObjectFactory::createCityDaemonInstance();
+               $cityInstance = CityDaemonFactory::createCityDaemonInstance();
 
                // Now bootstrap the daemon
                $cityInstance->bootstrapInitCityDaemon();
index 2a64d19f0bd6b9d5d89fe8c203be84c6c4979f34..74a905efbda273b4b7b15311c74e4a961643c704 100644 (file)
@@ -56,7 +56,7 @@ class CityDaemonInitializationFilter extends BaseCityFilter implements Filterabl
                // Try to instance it by using a factory
                try {
                        // Get an instance
-                       $cityInstance = CityDaemonObjectFactory::createCityDaemonInstance($requestInstance, $responseInstance);
+                       $cityInstance = CityDaemonFactory::createCityDaemonInstance($requestInstance, $responseInstance);
                } catch (ClassNotFoundException $e) {
                        // This exception means, the city mode is invalid.
                        // @TODO Can we rewrite this to app_exit() ?
index caf11ed424467fc4a0707d7c915466500be1cd78..d2b1533eadc786b746b23204bff1795fa2f80242 100644 (file)
@@ -56,7 +56,7 @@ class CityDaemonWelcomeTeaserFilter extends BaseCityFilter implements Filterable
         */
        public function execute (Requestable $requestInstance, Responseable $responseInstance) {
                // Get city instance
-               $cityInstance = CityDaemonObjectFactory::createCityDaemonInstance();
+               $cityInstance = CityDaemonFactory::createCityDaemonInstance();
 
                // Now output the teaser
                $cityInstance->outputConsoleTeaser();
index 9a0faed8169ef3e550d97dcdb09ede5c91b3b010..e92c27a356ce47512808c8066c7b4f4ff6fdbe27 100644 (file)
@@ -57,7 +57,7 @@ class CityDaemonShutdownCityFilter extends BaseCityFilter implements Filterable
         */
        public function execute (Requestable $requestInstance, Responseable $responseInstance) {
                // Get city instance
-               $cityInstance = CityDaemonObjectFactory::createCityDaemonInstance();
+               $cityInstance = CityDaemonFactory::createCityDaemonInstance();
 
                // Shutdown the city. This should be the last line
                $cityInstance->doShutdown();
index f4b8fbfd04e4cf8feadda367178c6299373fa625..1a0eeefdbf25d2355c46de348b7b3a983c528e20 100644 (file)
@@ -56,7 +56,7 @@ class CityDaemonTaskHandlerInitializerFilter extends BaseCityFilter implements F
         */
        public function execute (Requestable $requestInstance, Responseable $responseInstance) {
                // Get city instance
-               $cityInstance = CityDaemonObjectFactory::createCityDaemonInstance();
+               $cityInstance = CityDaemonFactory::createCityDaemonInstance();
 
                // Get a new task handler instance
                $handlerInstance = ObjectFactory::createObjectByConfiguredName('task_handler_class');
index b3956da0adf02ef792472429d7670546e3ea653e..cbf3b67ecad15ac3b3ba3f479e47479416b29a46 100644 (file)
@@ -45,7 +45,7 @@ class CityActiveState extends BaseCityState implements Stateable {
                $stateInstance = new CityActiveState();
 
                // Get city instance and set 'active' flag
-               CityDaemonObjectFactory::createCityDaemonInstance()->enableIsActive();
+               CityDaemonFactory::createCityDaemonInstance()->enableIsActive();
 
                // Return the prepared instance
                return $stateInstance;
diff --git a/application/city/main/tasks/class_BaseCityTask.php b/application/city/main/tasks/class_BaseCityTask.php
new file mode 100644 (file)
index 0000000..1be4e51
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+/**
+ * A general CityTask class
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2015 City Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+class BaseCityTask extends BaseTask {
+       /**
+        * An instance of a city
+        */
+       private $cityInstance = NULL;
+
+       /**
+        * Protected constructor
+        *
+        * @param       $className      Name of the class
+        * @return      void
+        */
+       protected function __construct ($className) {
+               // Call parent constructor
+               parent::__construct($className);
+       }
+
+       /**
+        * Getter for city instance
+        *
+        * @return      $cityInstance   An instance of a city city
+        */
+       public final function getCityInstance () {
+               return $this->cityInstance;
+       }
+
+       /**
+        * Setter for city instance
+        *
+        * @param       $cityInstance   An instance of a city city
+        * @return      void
+        */
+       protected final function setCityInstance (CityHelper $cityInstance) {
+               $this->cityInstance = $cityInstance;
+       }
+}
+
+// [EOF]
+?>
index b1337952575aa6c150a6e904dc097dc413547088..54d6903f67326800cd3ef94cc448bb919913ce72 100644 (file)
@@ -21,7 +21,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-class CityDaemonBuildingGrowthTask extends BaseTask implements Taskable, Visitable {
+class CityDaemonBuildingGrowthTask extends BaseCityTask implements Taskable, Visitable {
        /**
         * Protected constructor
         *
diff --git a/application/city/main/tasks/daemon/city_map/.htaccess b/application/city/main/tasks/daemon/city_map/.htaccess
deleted file mode 100644 (file)
index 3a42882..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Deny from all
diff --git a/application/city/main/tasks/daemon/city_map/class_CityDaemonMapExpanderTask.php b/application/city/main/tasks/daemon/city_map/class_CityDaemonMapExpanderTask.php
deleted file mode 100644 (file)
index 6c0dad5..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-/**
- * A MapExpander city daemon-task
- *
- * @author             Roland Haeder <webmaster@ship-simu.org>
- * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub Developer Team
- * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.ship-simu.org
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-class CityDaemonMapExpanderTask extends BaseTask implements Taskable, Visitable {
-       /**
-        * Protected constructor
-        *
-        * @return      void
-        */
-       protected function __construct () {
-               // Call parent constructor
-               parent::__construct(__CLASS__);
-       }
-
-       /**
-        * Creates an instance of this class
-        *
-        * @return      $taskInstance   An instance of a Visitable class
-        */
-       public final static function createCityDaemonMapExpanderTask () {
-               // Get new instance
-               $taskInstance = new CityDaemonMapExpanderTask();
-
-               // Return the prepared instance
-               return $taskInstance;
-       }
-
-       /**
-        * Accepts the visitor to process the visitor
-        *
-        * @param       $visitorInstance        An instance of a Visitor class
-        * @return      void
-        * @todo        Maybe visit some sub-objects
-        */
-       public function accept (Visitor $visitorInstance) {
-               // Visit this task
-               $visitorInstance->visitTask($this);
-       }
-
-       /**
-        * Executes the task
-        *
-        * @return      void
-        * @todo        0% done
-        */
-       public function executeTask () {
-               $this->partialStub('Unimplemented task.');
-       }
-
-       /**
-        * Shuts down the task
-        *
-        * @return      void
-        * @todo        0% done
-        */
-       public function doShutdown () {
-               self::createDebugInstance(__CLASS__)->debugOutput('TASK[' . __METHOD__ . ':' . __LINE__ . ']: Shutting down...');
-       }
-}
-
-// [EOF]
-?>
index ea041ed31d22b4b9349e6a495528356406b8d380..179a92784050aa049adeec831d3bca2c252a25ca 100644 (file)
@@ -21,7 +21,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-class CityDaemonHouseholdGrowthTask extends BaseTask implements Taskable, Visitable {
+class CityDaemonHouseholdGrowthTask extends BaseCityTask implements Taskable, Visitable {
        /**
         * Protected constructor
         *
diff --git a/application/city/main/tasks/daemon/map_expander/.htaccess b/application/city/main/tasks/daemon/map_expander/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/city/main/tasks/daemon/map_expander/class_CityDaemonMapExpanderTask.php b/application/city/main/tasks/daemon/map_expander/class_CityDaemonMapExpanderTask.php
new file mode 100644 (file)
index 0000000..4152e92
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+/**
+ * A map expander task for the daemon
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+class CityDaemonMapExpanderTask extends BaseCityTask implements Taskable, Visitable {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an instance of this class
+        *
+        * @return      $taskInstance   An instance of a Visitable class
+        */
+       public final static function createCityDaemonMapExpanderTask () {
+               // Get new instance
+               $taskInstance = new CityDaemonMapExpanderTask();
+
+               // Get city daemon instance
+               $cityInstance = CityDaemonFactory::createCityDaemonInstance();
+
+               // Set it here for "caching" it
+               $taskInstance->setCityInstance($cityInstance);
+
+               // Return the prepared instance
+               return $taskInstance;
+       }
+
+       /**
+        * Accepts the visitor to process the visitor
+        *
+        * @param       $visitorInstance        An instance of a Visitor class
+        * @return      void
+        * @todo        Maybe visit some sub-objects
+        */
+       public function accept (Visitor $visitorInstance) {
+               // Visit this task
+               $visitorInstance->visitTask($this);
+       }
+
+       /**
+        * Executes the task
+        *
+        * @return      void
+        * @todo        0% done
+        */
+       public function executeTask () {
+               // Get daemon instance
+               $cityInstance = $this->getCityInstance();
+
+               // Is there at least one map to expand?
+               if ($cityInstance->isMapPendingExpansion()) {
+                       // Expand the map
+                       $cityInstance->expandMaps();
+               } // END - if
+       }
+
+       /**
+        * Shuts down the task
+        *
+        * @return      void
+        * @todo        0% done
+        */
+       public function doShutdown () {
+               self::createDebugInstance(__CLASS__)->debugOutput('TASK[' . __METHOD__ . ':' . __LINE__ . ']: Shutting down...');
+       }
+}
+
+// [EOF]
+?>