From: Roland Häder Date: Tue, 15 Mar 2011 20:35:50 +0000 (+0000) Subject: Many XML-related templates engines renamed: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=c7b93d02caa6eacf04bb1697ab2b2573481e5f14;p=hub.git Many XML-related templates engines renamed: - All XML-bases template engines prefixed with 'Xml' - Directory prepared for template engines handling WU XML templates - TODOs.txt updated --- diff --git a/.gitattributes b/.gitattributes index b0c18b781..1d40663b0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -422,10 +422,15 @@ application/hub/main/tasks/network/class_NetworkPackageWriterTask.php svneol=nat application/hub/main/template/.htaccess -text svneol=unset#text/plain application/hub/main/template/announcement/.htaccess -text svneol=unset#text/plain application/hub/main/template/announcement/class_AnnouncementTemplateEngine.php -text svneol=unset#text/plain +application/hub/main/template/announcement/class_XmlAnnouncementTemplateEngine.php svneol=native#text/plain +application/hub/main/template/class_ -text application/hub/main/template/connect/.htaccess -text svneol=unset#text/plain application/hub/main/template/connect/class_SelfConnectTemplateEngine.php svneol=native#text/plain +application/hub/main/template/connect/class_XmlSelfConnectTemplateEngine.php svneol=native#text/plain application/hub/main/template/objects/.htaccess -text svneol=unset#text/plain application/hub/main/template/objects/class_ObjectRegistryTemplateEngine.php svneol=native#text/plain +application/hub/main/template/objects/class_XmlObjectRegistryTemplateEngine.php svneol=native#text/plain +application/hub/main/template/work_units/.htaccess svneol=native#text/plain application/hub/main/tools/.htaccess -text svneol=unset#text/plain application/hub/main/tools/class_HubTools.php svneol=native#text/plain application/hub/main/visitor/.htaccess -text svneol=unset#text/plain diff --git a/application/hub/config.php b/application/hub/config.php index 4de98c873..97c66392c 100644 --- a/application/hub/config.php +++ b/application/hub/config.php @@ -226,7 +226,7 @@ $cfg->setConfigEntry('cruncher_shutdown_cruncher_filter', 'CruncherShutdownCrunc $cfg->setConfigEntry('news_reader_class', 'ConsoleNewsReader'); // CFG: ANNOUNCEMENT-TEMPLATE-CLASS -$cfg->setConfigEntry('announcement_template_class', 'AnnouncementTemplateEngine'); +$cfg->setConfigEntry('announcement_template_class', 'XmlAnnouncementTemplateEngine'); // CFG: ANNOUNCEMENT-TEMPLATE-EXTENSION $cfg->setConfigEntry('announcement_template_extension', '.xml'); @@ -238,7 +238,7 @@ $cfg->setConfigEntry('announcement_template_type', 'xml/announcement'); $cfg->setConfigEntry('announcement_stacker_class', 'FiLoStacker'); // CFG: SELF-CONNECT-TEMPLATE-CLASS -$cfg->setConfigEntry('self_connect_template_class', 'SelfConnectTemplateEngine'); +$cfg->setConfigEntry('self_connect_template_class', 'XmlSelfConnectTemplateEngine'); // CFG: SELF-CONNECT-TEMPLATE-EXTENSION $cfg->setConfigEntry('self_connect_template_extension', '.xml'); @@ -250,7 +250,7 @@ $cfg->setConfigEntry('self_connect_template_type', 'xml/self_connect'); $cfg->setConfigEntry('self_connect_stacker_class', 'FiLoStacker'); // CFG: OBJECT-REGISTRY-TEMPLATE-CLASS -$cfg->setConfigEntry('object_registry_template_class', 'ObjectRegistryTemplateEngine'); +$cfg->setConfigEntry('object_registry_template_class', 'XmlObjectRegistryTemplateEngine'); // CFG: OBJECT-REGISTRY-TEMPLATE-EXTENSION $cfg->setConfigEntry('object_registry_template_extension', '.xml'); diff --git a/application/hub/main/helper/work_units/cruncher/class_CruncherTestUnitHelper.php b/application/hub/main/helper/work_units/cruncher/class_CruncherTestUnitHelper.php index f97f8d3a0..38cf1c67b 100644 --- a/application/hub/main/helper/work_units/cruncher/class_CruncherTestUnitHelper.php +++ b/application/hub/main/helper/work_units/cruncher/class_CruncherTestUnitHelper.php @@ -1,6 +1,6 @@ * @version 0.0.0 @@ -46,7 +46,8 @@ class CruncherTestUnitHelper extends BaseWorkUnitHelper implements UnitHelper { } /** - * Initializes this WU helper + * Initializes this WU helper. This method satisfies the abstract + * BaseWorkUnitHelper class. * * @return void * @todo 0% done @@ -56,7 +57,8 @@ class CruncherTestUnitHelper extends BaseWorkUnitHelper implements UnitHelper { } /** - * Generates a work/test/foo unit instance + * Generates a work/test/foo unit instance. This method satifies the + * UnitHelper interface. * * @return $unitInstance A work unit instance * @todo 0% done diff --git a/application/hub/main/template/announcement/class_AnnouncementTemplateEngine.php b/application/hub/main/template/announcement/class_AnnouncementTemplateEngine.php index ccfdb498d..f551ef47b 100644 --- a/application/hub/main/template/announcement/class_AnnouncementTemplateEngine.php +++ b/application/hub/main/template/announcement/class_AnnouncementTemplateEngine.php @@ -1,537 +1,3 @@ - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org - * @todo This template engine does not make use of setTemplateType() - * - * 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 . - */ -class AnnouncementTemplateEngine extends BaseTemplateEngine implements CompileableTemplate { - /** - * Main nodes in the XML tree ('menu' is ignored) - */ - private $mainNodes = array( - 'announcement', - ); - - /** - * Sub nodes in the XML tree - */ - private $subNodes = array( - 'announcement-data', - 'listener', - 'hub-listener', - 'client-listener', - 'node-id', - 'node-status', - 'tcp-port', - 'udp-port', - 'session-id', - 'object-type-list', - ); - - /** - * Current main node - */ - private $curr = array(); - - /** - * Content from dependency - */ - private $dependencyContent = array(); - - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates an instance of the class TemplateEngine and prepares it for usage - * - * @param $applicationInstance A manageable application - * @return $templateInstance An instance of TemplateEngine - * @throws BasePathIsEmptyException If the provided $templateBasePath is empty - * @throws InvalidBasePathStringException If $templateBasePath is no string - * @throws BasePathIsNoDirectoryException If $templateBasePath is no - * directory or not found - * @throws BasePathReadProtectedException If $templateBasePath is - * read-protected - */ - public static final function createAnnouncementTemplateEngine (ManageableApplication $applicationInstance) { - // Get a new instance - $templateInstance = new AnnouncementTemplateEngine(); - - // Determine base path - $templateBasePath = $templateInstance->getConfigInstance()->getConfigEntry('application_base_path') . $applicationInstance->getRequestInstance()->getRequestElement('app') . '/'; - - // Is the base path valid? - if (empty($templateBasePath)) { - // Base path is empty - throw new BasePathIsEmptyException($templateInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); - } elseif (!is_string($templateBasePath)) { - // Is not a string - throw new InvalidBasePathStringException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); - } elseif (!is_dir($templateBasePath)) { - // Is not a path - throw new BasePathIsNoDirectoryException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); - } elseif (!is_readable($templateBasePath)) { - // Is not readable - throw new BasePathReadProtectedException(array($templateInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); - } - - // Set the base path - $templateInstance->setTemplateBasePath($templateBasePath); - - // Set template extensions - $templateInstance->setRawTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('raw_template_extension')); - $templateInstance->setCodeTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('announcement_template_extension')); - - // Absolute output path for compiled templates - $templateInstance->setCompileOutputPath($templateInstance->getConfigInstance()->getConfigEntry('base_path') . $templateInstance->getConfigInstance()->getConfigEntry('compile_output_path')); - - // Init a variable stacker - $stackerInstance = ObjectFactory::createObjectByConfiguredName('announcement_stacker_class'); - - // Set it - $templateInstance->setStackerInstance($stackerInstance); - - // Return the prepared instance - return $templateInstance; - } - - /** - * Load a specified announcement template into the engine - * - * @param $template The announcement template we shall load which is - * located in 'announcement' by default - * @return void - */ - public function loadAnnouncementTemplate ($template = 'self_announcement') { - // Set template type - $this->setTemplateType($this->getConfigInstance()->getConfigEntry('announcement_template_type')); - - // Load the special template - $this->loadTemplate($template); - } - - /** - * Getter for current main node - * - * @return $currMainNode Current main node - */ - public final function getCurrMainNode () { - return $this->curr['main_node']; - } - - /** - * Setter for current main node - * - * @param $element Element name to set as current main node - * @return $currMainNode Current main node - */ - private final function setCurrMainNode ($element) { - $this->curr['main_node'] = (string) $element; - } - - /** - * Getter for main node array - * - * @return $mainNodes Array with valid main node names - */ - public final function getMainNodes () { - return $this->mainNodes; - } - - /** - * Getter for sub node array - * - * @return $subNodes Array with valid sub node names - */ - public final function getSubNodes () { - return $this->subNodes; - } - - /** - * Handles the start element of an XML resource - * - * @param $resource XML parser resource (currently ignored) - * @param $element The element we shall handle - * @param $attributes All attributes - * @return void - * @throws InvalidXmlNodeException If an unknown/invalid XML node name was found - */ - public function startElement ($resource, $element, array $attributes) { - // Initial method name which will never be called... - $methodName = 'initAnnouncement'; - - // Make the element name lower-case - $element = strtolower($element); - - // Is the element a main node? - //* DEBUG: */ echo "START: >".$element."<
\n"; - if (in_array($element, $this->getMainNodes())) { - // Okay, main node found! - $methodName = 'start' . $this->convertToClassName($element); - - // Set it - $this->setCurrMainNode($element); - } elseif (in_array($element, $this->getSubNodes())) { - // Sub node found - $methodName = 'start' . $this->convertToClassName($element); - } else { - // Invalid node name found - throw new InvalidXmlNodeException(array($this, $element, $attributes), XmlParser::EXCEPTION_XML_NODE_UNKNOWN); - } - - // Call method - //* DEBUG: */ echo "call: ".$methodName."
\n"; - call_user_func_array(array($this, $methodName), $attributes); - } - - /** - * Ends the main or sub node by sending out the gathered data - * - * @param $resource An XML resource pointer (currently ignored) - * @param $nodeName Name of the node we want to finish - * @return void - * @throws XmlNodeMismatchException If current main node mismatches the closing one - */ - public function endElement ($resource, $nodeName) { - // Make all lower-case - $nodeName = strtolower($nodeName); - - // Does this match with current main node? - //* DEBUG: */ echo "END: >".$nodeName."<
\n"; - if (($nodeName != $this->getCurrMainNode()) && (in_array($nodeName, $this->getMainNodes()))) { - // Did not match! - throw new XmlNodeMismatchException (array($this, $nodeName, $this->getCurrMainNode()), XmlParser::EXCEPTION_XML_NODE_MISMATCH); - } // END - if - - // Construct method name - $methodName = 'finish' . $this->convertToClassName($nodeName); - - // Call the corresponding method - //* DEBUG: */ echo "call: ".$methodName."
\n"; - call_user_func_array(array($this, $methodName), array()); - } - - /** - * Currently not used - * - * @param $resource XML parser resource (currently ignored) - * @param $characters Characters to handle - * @return void - * @todo Find something useful with this! - */ - public function characterHandler ($resource, $characters) { - // Trim all spaces away - $characters = trim($characters); - - // Is this string empty? - if (empty($characters)) { - // Then skip it silently - return false; - } // END - if - - // Assign the found characters to variable and use the last entry from - // stack as the name - parent::assignVariable($this->getStackerInstance()->getNamed('announcement'), $characters); - } - - /** - * Handles the template dependency for given node - * - * @param $node The node we should load a dependency template - * @param $templateDependency A template to load to satisfy dependencies - * @return void - */ - private function handleTemplateDependency ($node, $templateDependency) { - // Is the template dependency set? - if ((!empty($templateDependency)) && (!isset($this->dependencyContent[$node]))) { - // Get a temporay menu template instance - $templateInstance = ObjectFactory::createObjectByConfiguredName('announcement_template_class', array($this->getApplicationInstance())); - - // Then load it - $templateInstance->loadAnnouncementTemplate($templateDependency); - - // Get an XmlParser instance - $templateInstance->renderXmlContent(); - - // Parse the template's content contents - $this->dependencyContent[$node] = $templateInstance->getRawTemplateData(); - } // END - if - } - - /** - * Getter for cache file (FQFN) - * - * @return $fqfn Full-qualified file name of the menu cache - */ - public function getMenuCacheFqfn () { - $this->partialStub('Please implement this method.'); - } - - /** - * Starts the announcement - * - * @return void - */ - private function startAnnouncement () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'announcement'); - } - - /** - * Starts the announcement data - * - * @return void - */ - private function startAnnouncementData () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'announcement-data'); - } - - /** - * Starts the node id - * - * @return void - */ - private function startNodeId () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'node-id'); - } - - /** - * Starts the node status - * - * @return void - */ - private function startNodeStatus () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'node-status'); - } - - /** - * Starts the listener - * - * @return void - */ - private function startListener () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'listener'); - } - - /** - * Starts the client listener - * - * @return void - */ - private function startClientListener () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'client-listener'); - } - - /** - * Starts the hub listener - * - * @return void - */ - private function startHubListener () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'hub-listener'); - } - - /** - * Starts the TCP port - * - * @return void - */ - private function startTcpPort () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'tcp-port'); - } - - /** - * Starts the UDP port - * - * @return void - */ - private function startUdpPort () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'udp-port'); - } - - /** - * Starts the session id - * - * @return void - */ - private function startSessionId () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'session-id'); - } - - /** - * Starts the object type list - * - * @return void - */ - private function startObjectTypeList () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'object-type-list'); - } - - /** - * Starts the object type - * - * @return void - */ - private function startObjectType () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('announcement', 'object-type'); - } - - /** - * Finishes the object type - * - * @return void - */ - private function finishObjectType () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the object type list - * - * @return void - */ - private function finishObjectTypeList () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the session id - * - * @return void - */ - private function finishSessionId () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the UDP port - * - * @return void - */ - private function finishUdpPort () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the TCP port - * - * @return void - */ - private function finishTcpPort () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the hub listener - * - * @return void - */ - private function finishHubListener () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the client listener - * - * @return void - */ - private function finishClientListener () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the listener - * - * @return void - */ - private function finishListener () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the node status - * - * @return void - */ - private function finishNodeStatus () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the node id - * - * @return void - */ - private function finishNodeId () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the announcement data - * - * @return void - */ - private function finishAnnouncementData () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } - - /** - * Finishes the announcement - * - * @return void - */ - private function finishAnnouncement () { - // Pop the last entry - $this->getStackerInstance()->popNamed('announcement'); - } -} - -// [EOF] +// @DEPRECATED ?> diff --git a/application/hub/main/template/announcement/class_XmlAnnouncementTemplateEngine.php b/application/hub/main/template/announcement/class_XmlAnnouncementTemplateEngine.php new file mode 100644 index 000000000..d84ba681c --- /dev/null +++ b/application/hub/main/template/announcement/class_XmlAnnouncementTemplateEngine.php @@ -0,0 +1,537 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @todo This template engine does not make use of setTemplateType() + * + * 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 . + */ +class XmlAnnouncementTemplateEngine extends BaseTemplateEngine implements CompileableTemplate { + /** + * Main nodes in the XML tree + */ + private $mainNodes = array( + 'announcement', + ); + + /** + * Sub nodes in the XML tree + */ + private $subNodes = array( + 'announcement-data', + 'listener', + 'hub-listener', + 'client-listener', + 'node-id', + 'node-status', + 'tcp-port', + 'udp-port', + 'session-id', + 'object-type-list', + ); + + /** + * Current main node + */ + private $curr = array(); + + /** + * Content from dependency + */ + private $dependencyContent = array(); + + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of the class TemplateEngine and prepares it for usage + * + * @param $applicationInstance A manageable application + * @return $templateInstance An instance of TemplateEngine + * @throws BasePathIsEmptyException If the provided $templateBasePath is empty + * @throws InvalidBasePathStringException If $templateBasePath is no string + * @throws BasePathIsNoDirectoryException If $templateBasePath is no + * directory or not found + * @throws BasePathReadProtectedException If $templateBasePath is + * read-protected + */ + public static final function createXmlAnnouncementTemplateEngine (ManageableApplication $applicationInstance) { + // Get a new instance + $templateInstance = new XmlAnnouncementTemplateEngine(); + + // Determine base path + $templateBasePath = $templateInstance->getConfigInstance()->getConfigEntry('application_base_path') . $applicationInstance->getRequestInstance()->getRequestElement('app') . '/'; + + // Is the base path valid? + if (empty($templateBasePath)) { + // Base path is empty + throw new BasePathIsEmptyException($templateInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); + } elseif (!is_string($templateBasePath)) { + // Is not a string + throw new InvalidBasePathStringException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); + } elseif (!is_dir($templateBasePath)) { + // Is not a path + throw new BasePathIsNoDirectoryException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); + } elseif (!is_readable($templateBasePath)) { + // Is not readable + throw new BasePathReadProtectedException(array($templateInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); + } + + // Set the base path + $templateInstance->setTemplateBasePath($templateBasePath); + + // Set template extensions + $templateInstance->setRawTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('raw_template_extension')); + $templateInstance->setCodeTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('announcement_template_extension')); + + // Absolute output path for compiled templates + $templateInstance->setCompileOutputPath($templateInstance->getConfigInstance()->getConfigEntry('base_path') . $templateInstance->getConfigInstance()->getConfigEntry('compile_output_path')); + + // Init a variable stacker + $stackerInstance = ObjectFactory::createObjectByConfiguredName('announcement_stacker_class'); + + // Set it + $templateInstance->setStackerInstance($stackerInstance); + + // Return the prepared instance + return $templateInstance; + } + + /** + * Load a specified announcement template into the engine + * + * @param $template The announcement template we shall load which is + * located in 'announcement' by default + * @return void + */ + public function loadAnnouncementTemplate ($template = 'self_announcement') { + // Set template type + $this->setTemplateType($this->getConfigInstance()->getConfigEntry('announcement_template_type')); + + // Load the special template + $this->loadTemplate($template); + } + + /** + * Getter for current main node + * + * @return $currMainNode Current main node + */ + public final function getCurrMainNode () { + return $this->curr['main_node']; + } + + /** + * Setter for current main node + * + * @param $element Element name to set as current main node + * @return $currMainNode Current main node + */ + private final function setCurrMainNode ($element) { + $this->curr['main_node'] = (string) $element; + } + + /** + * Getter for main node array + * + * @return $mainNodes Array with valid main node names + */ + public final function getMainNodes () { + return $this->mainNodes; + } + + /** + * Getter for sub node array + * + * @return $subNodes Array with valid sub node names + */ + public final function getSubNodes () { + return $this->subNodes; + } + + /** + * Handles the start element of an XML resource + * + * @param $resource XML parser resource (currently ignored) + * @param $element The element we shall handle + * @param $attributes All attributes + * @return void + * @throws InvalidXmlNodeException If an unknown/invalid XML node name was found + */ + public function startElement ($resource, $element, array $attributes) { + // Initial method name which will never be called... + $methodName = 'initAnnouncement'; + + // Make the element name lower-case + $element = strtolower($element); + + // Is the element a main node? + //* DEBUG: */ echo "START: >".$element."<
\n"; + if (in_array($element, $this->getMainNodes())) { + // Okay, main node found! + $methodName = 'start' . $this->convertToClassName($element); + + // Set it + $this->setCurrMainNode($element); + } elseif (in_array($element, $this->getSubNodes())) { + // Sub node found + $methodName = 'start' . $this->convertToClassName($element); + } else { + // Invalid node name found + throw new InvalidXmlNodeException(array($this, $element, $attributes), XmlParser::EXCEPTION_XML_NODE_UNKNOWN); + } + + // Call method + //* DEBUG: */ echo "call: ".$methodName."
\n"; + call_user_func_array(array($this, $methodName), $attributes); + } + + /** + * Ends the main or sub node by sending out the gathered data + * + * @param $resource An XML resource pointer (currently ignored) + * @param $nodeName Name of the node we want to finish + * @return void + * @throws XmlNodeMismatchException If current main node mismatches the closing one + */ + public function endElement ($resource, $nodeName) { + // Make all lower-case + $nodeName = strtolower($nodeName); + + // Does this match with current main node? + //* DEBUG: */ echo "END: >".$nodeName."<
\n"; + if (($nodeName != $this->getCurrMainNode()) && (in_array($nodeName, $this->getMainNodes()))) { + // Did not match! + throw new XmlNodeMismatchException (array($this, $nodeName, $this->getCurrMainNode()), XmlParser::EXCEPTION_XML_NODE_MISMATCH); + } // END - if + + // Construct method name + $methodName = 'finish' . $this->convertToClassName($nodeName); + + // Call the corresponding method + //* DEBUG: */ echo "call: ".$methodName."
\n"; + call_user_func_array(array($this, $methodName), array()); + } + + /** + * Currently not used + * + * @param $resource XML parser resource (currently ignored) + * @param $characters Characters to handle + * @return void + * @todo Find something useful with this! + */ + public function characterHandler ($resource, $characters) { + // Trim all spaces away + $characters = trim($characters); + + // Is this string empty? + if (empty($characters)) { + // Then skip it silently + return false; + } // END - if + + // Assign the found characters to variable and use the last entry from + // stack as the name + parent::assignVariable($this->getStackerInstance()->getNamed('announcement'), $characters); + } + + /** + * Handles the template dependency for given node + * + * @param $node The node we should load a dependency template + * @param $templateDependency A template to load to satisfy dependencies + * @return void + */ + private function handleTemplateDependency ($node, $templateDependency) { + // Is the template dependency set? + if ((!empty($templateDependency)) && (!isset($this->dependencyContent[$node]))) { + // Get a temporay template instance + $templateInstance = ObjectFactory::createObjectByConfiguredName('announcement_template_class', array($this->getApplicationInstance())); + + // Then load it + $templateInstance->loadAnnouncementTemplate($templateDependency); + + // Parse the XML content + $templateInstance->renderXmlContent(); + + // Save the parsed raw content in our dependency array + $this->dependencyContent[$node] = $templateInstance->getRawTemplateData(); + } // END - if + } + + /** + * Getter for cache file (FQFN) + * + * @return $fqfn Full-qualified file name of the menu cache + */ + public function getMenuCacheFqfn () { + $this->partialStub('Please implement this method.'); + } + + /** + * Starts the announcement + * + * @return void + */ + private function startAnnouncement () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'announcement'); + } + + /** + * Starts the announcement data + * + * @return void + */ + private function startAnnouncementData () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'announcement-data'); + } + + /** + * Starts the node id + * + * @return void + */ + private function startNodeId () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'node-id'); + } + + /** + * Starts the node status + * + * @return void + */ + private function startNodeStatus () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'node-status'); + } + + /** + * Starts the listener + * + * @return void + */ + private function startListener () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'listener'); + } + + /** + * Starts the client listener + * + * @return void + */ + private function startClientListener () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'client-listener'); + } + + /** + * Starts the hub listener + * + * @return void + */ + private function startHubListener () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'hub-listener'); + } + + /** + * Starts the TCP port + * + * @return void + */ + private function startTcpPort () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'tcp-port'); + } + + /** + * Starts the UDP port + * + * @return void + */ + private function startUdpPort () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'udp-port'); + } + + /** + * Starts the session id + * + * @return void + */ + private function startSessionId () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'session-id'); + } + + /** + * Starts the object type list + * + * @return void + */ + private function startObjectTypeList () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'object-type-list'); + } + + /** + * Starts the object type + * + * @return void + */ + private function startObjectType () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('announcement', 'object-type'); + } + + /** + * Finishes the object type + * + * @return void + */ + private function finishObjectType () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the object type list + * + * @return void + */ + private function finishObjectTypeList () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the session id + * + * @return void + */ + private function finishSessionId () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the UDP port + * + * @return void + */ + private function finishUdpPort () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the TCP port + * + * @return void + */ + private function finishTcpPort () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the hub listener + * + * @return void + */ + private function finishHubListener () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the client listener + * + * @return void + */ + private function finishClientListener () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the listener + * + * @return void + */ + private function finishListener () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the node status + * + * @return void + */ + private function finishNodeStatus () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the node id + * + * @return void + */ + private function finishNodeId () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the announcement data + * + * @return void + */ + private function finishAnnouncementData () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } + + /** + * Finishes the announcement + * + * @return void + */ + private function finishAnnouncement () { + // Pop the last entry + $this->getStackerInstance()->popNamed('announcement'); + } +} + +// [EOF] +?> diff --git a/application/hub/main/template/class_ b/application/hub/main/template/class_ new file mode 100644 index 000000000..c4bbc31a2 --- /dev/null +++ b/application/hub/main/template/class_ @@ -0,0 +1,278 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @todo This template engine does not make use of setTemplateType() + * + * 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 . + */ +die('YOU NEED TO REPLACE ???, !!! AND ||| IN THIS CLASS BEFORE YOU CAN USE IT.'); +class Xml???TemplateEngine extends BaseTemplateEngine implements CompileableTemplate { + /** + * Main nodes in the XML tree + */ + private $mainNodes = array( + ); + + /** + * Sub nodes in the XML tree + */ + private $subNodes = array( + ); + + /** + * Current main node + */ + private $curr = array(); + + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of the class TemplateEngine and prepares it for usage + * + * @param $applicationInstance A manageable application + * @return $templateInstance An instance of TemplateEngine + * @throws BasePathIsEmptyException If the provided $templateBasePath is empty + * @throws InvalidBasePathStringException If $templateBasePath is no string + * @throws BasePathIsNoDirectoryException If $templateBasePath is no + * directory or not found + * @throws BasePathReadProtectedException If $templateBasePath is + * read-protected + */ + public static final function createXml???TemplateEngine (ManageableApplication $applicationInstance) { + // Get a new instance + $templateInstance = new Xml???TemplateEngine(); + + // Determine base path + $templateBasePath = $templateInstance->getConfigInstance()->getConfigEntry('application_base_path') . $applicationInstance->getRequestInstance()->getRequestElement('app') . '/'; + + // Is the base path valid? + if (empty($templateBasePath)) { + // Base path is empty + throw new BasePathIsEmptyException($templateInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); + } elseif (!is_string($templateBasePath)) { + // Is not a string + throw new InvalidBasePathStringException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); + } elseif (!is_dir($templateBasePath)) { + // Is not a path + throw new BasePathIsNoDirectoryException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); + } elseif (!is_readable($templateBasePath)) { + // Is not readable + throw new BasePathReadProtectedException(array($templateInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); + } + + // Set the base path + $templateInstance->setTemplateBasePath($templateBasePath); + + // Set template extensions + $templateInstance->setRawTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('raw_template_extension')); + $templateInstance->setCodeTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('!!!_template_extension')); + + // Absolute output path for compiled templates + $templateInstance->setCompileOutputPath($templateInstance->getConfigInstance()->getConfigEntry('base_path') . $templateInstance->getConfigInstance()->getConfigEntry('compile_output_path')); + + // Init a variable stacker + $stackerInstance = ObjectFactory::createObjectByConfiguredName('!!!_stacker_class'); + + // Set it + $templateInstance->setStackerInstance($stackerInstance); + + // Return the prepared instance + return $templateInstance; + } + + /** + * Load a specified !!! template into the engine + * + * @param $template The !!! template we shall load which is + * located in '!!!' by default + * @return void + */ + public function load???Template ($template) { + // Set template type + $this->setTemplateType($this->getConfigInstance()->getConfigEntry('!!!_template_type')); + + // Load the special template + $this->loadTemplate($template); + } + + /** + * Getter for current main node + * + * @return $currMainNode Current main node + */ + public final function getCurrMainNode () { + return $this->curr['main_node']; + } + + /** + * Setter for current main node + * + * @param $element Element name to set as current main node + * @return $currMainNode Current main node + */ + private final function setCurrMainNode ($element) { + $this->curr['main_node'] = (string) $element; + } + + /** + * Getter for main node array + * + * @return $mainNodes Array with valid main node names + */ + public final function getMainNodes () { + return $this->mainNodes; + } + + /** + * Getter for sub node array + * + * @return $subNodes Array with valid sub node names + */ + public final function getSubNodes () { + return $this->subNodes; + } + + /** + * Handles the start element of an XML resource + * + * @param $resource XML parser resource (currently ignored) + * @param $element The element we shall handle + * @param $attributes All attributes + * @return void + * @throws InvalidXmlNodeException If an unknown/invalid XML node name was found + */ + public function startElement ($resource, $element, array $attributes) { + // Initial method name which will never be called... + $methodName = 'init???'; + + // Make the element name lower-case + $element = strtolower($element); + + // Is the element a main node? + //* DEBUG: */ echo "START: >".$element."<
\n"; + if (in_array($element, $this->getMainNodes())) { + // Okay, main node found! + $methodName = 'start' . $this->convertToClassName($element); + + // Set it + $this->setCurrMainNode($element); + } elseif (in_array($element, $this->getSubNodes())) { + // Sub node found + $methodName = 'start' . $this->convertToClassName($element); + } else { + // Invalid node name found + throw new InvalidXmlNodeException(array($this, $element, $attributes), XmlParser::EXCEPTION_XML_NODE_UNKNOWN); + } + + // Call method + call_user_func_array(array($this, $methodName), $attributes); + } + + /** + * Ends the main or sub node by sending out the gathered data + * + * @param $resource An XML resource pointer (currently ignored) + * @param $nodeName Name of the node we want to finish + * @return void + * @throws XmlNodeMismatchException If current main node mismatches the closing one + */ + public function endElement ($resource, $nodeName) { + // Make all lower-case + $nodeName = strtolower($nodeName); + + // Does this match with current main node? + //* DEBUG: */ echo "END: >".$nodeName."<
\n"; + if (($nodeName != $this->getCurrMainNode()) && (in_array($nodeName, $this->getMainNodes()))) { + // Did not match! + throw new XmlNodeMismatchException (array($this, $nodeName, $this->getCurrMainNode()), XmlParser::EXCEPTION_XML_NODE_MISMATCH); + } // END - if + + // Construct method name + $methodName = 'finish' . $this->convertToClassName($nodeName); + + // Call the corresponding method + //* DEBUG: */ echo "call: ".$methodName."
\n"; + call_user_func_array(array($this, $methodName), array()); + } + + /** + * Currently not used + * + * @param $resource XML parser resource (currently ignored) + * @param $characters Characters to handle + * @return void + * @todo Find something useful with this! + */ + public function characterHandler ($resource, $characters) { + // Trim all spaces away + $characters = trim($characters); + + // Is this string empty? + if (empty($characters)) { + // Then skip it silently + return false; + } // END - if + + // Get current XML node name as an array index + $nodeName = $this->getStackerInstance()->getNamed('!!!'); + + $this->partialStub('Do something with the gathered data.'); + } + + /** + * Getter for cache file (FQFN) + * + * @return $fqfn Full-qualified file name of the menu cache + */ + public function get???CacheFqfn () { + $this->partialStub('Please implement this method.'); + } + + /** + * Starts the ||| + * + * @return void + */ + private function start??? () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('!!!', '|||'); + } + + /** + * Finishes the ||| + * + * @return void + */ + private function finish??? () { + // Pop the last entry + $this->getStackerInstance()->popNamed('!!!'); + } +} + +// [EOF] +?> diff --git a/application/hub/main/template/connect/class_SelfConnectTemplateEngine.php b/application/hub/main/template/connect/class_SelfConnectTemplateEngine.php index 5d33ef7fc..f551ef47b 100644 --- a/application/hub/main/template/connect/class_SelfConnectTemplateEngine.php +++ b/application/hub/main/template/connect/class_SelfConnectTemplateEngine.php @@ -1,370 +1,3 @@ - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org - * @todo This template engine does not make use of setTemplateType() - * - * 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 . - */ -class SelfConnectTemplateEngine extends BaseTemplateEngine implements CompileableTemplate { - /** - * Main nodes in the XML tree ('menu' is ignored) - */ - private $mainNodes = array( - 'self-connect', - ); - - /** - * Sub nodes in the XML tree - */ - private $subNodes = array( - 'self-connect-data', - 'node-id', - 'session-id' - ); - - /** - * Current main node - */ - private $curr = array(); - - /** - * Content from dependency - */ - private $dependencyContent = array(); - - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - } - - /** - * Creates an instance of the class TemplateEngine and prepares it for usage - * - * @param $applicationInstance A manageable application - * @return $templateInstance An instance of TemplateEngine - * @throws BasePathIsEmptyException If the provided $templateBasePath is empty - * @throws InvalidBasePathStringException If $templateBasePath is no string - * @throws BasePathIsNoDirectoryException If $templateBasePath is no - * directory or not found - * @throws BasePathReadProtectedException If $templateBasePath is - * read-protected - */ - public static final function createSelfConnectTemplateEngine (ManageableApplication $applicationInstance) { - // Get a new instance - $templateInstance = new SelfConnectTemplateEngine(); - - // Determine base path - $templateBasePath = $templateInstance->getConfigInstance()->getConfigEntry('application_base_path') . $applicationInstance->getRequestInstance()->getRequestElement('app') . '/'; - - // Is the base path valid? - if (empty($templateBasePath)) { - // Base path is empty - throw new BasePathIsEmptyException($templateInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); - } elseif (!is_string($templateBasePath)) { - // Is not a string - throw new InvalidBasePathStringException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); - } elseif (!is_dir($templateBasePath)) { - // Is not a path - throw new BasePathIsNoDirectoryException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); - } elseif (!is_readable($templateBasePath)) { - // Is not readable - throw new BasePathReadProtectedException(array($templateInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); - } - - // Set the base path - $templateInstance->setTemplateBasePath($templateBasePath); - - // Set template extensions - $templateInstance->setRawTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('raw_template_extension')); - $templateInstance->setCodeTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('self_connect_template_extension')); - - // Absolute output path for compiled templates - $templateInstance->setCompileOutputPath($templateInstance->getConfigInstance()->getConfigEntry('base_path') . $templateInstance->getConfigInstance()->getConfigEntry('compile_output_path')); - - // Init a variable stacker - $stackerInstance = ObjectFactory::createObjectByConfiguredName('self_connect_stacker_class'); - - // Set it - $templateInstance->setStackerInstance($stackerInstance); - - // Return the prepared instance - return $templateInstance; - } - - /** - * Load a specified self-connect template into the engine - * - * @param $template The self-connect template we shall load which is - * located in 'self_connect' by default - * @return void - */ - public function loadSelfConnectTemplate ($template = 'self_connect') { - // Set template type - $this->setTemplateType($this->getConfigInstance()->getConfigEntry('self_connect_template_type')); - - // Load the special template - $this->loadTemplate($template); - } - - /** - * Getter for current main node - * - * @return $currMainNode Current main node - */ - public final function getCurrMainNode () { - return $this->curr['main_node']; - } - - /** - * Setter for current main node - * - * @param $element Element name to set as current main node - * @return $currMainNode Current main node - */ - private final function setCurrMainNode ($element) { - $this->curr['main_node'] = (string) $element; - } - - /** - * Getter for main node array - * - * @return $mainNodes Array with valid main node names - */ - public final function getMainNodes () { - return $this->mainNodes; - } - - /** - * Getter for sub node array - * - * @return $subNodes Array with valid sub node names - */ - public final function getSubNodes () { - return $this->subNodes; - } - - /** - * Handles the start element of an XML resource - * - * @param $resource XML parser resource (currently ignored) - * @param $element The element we shall handle - * @param $attributes All attributes - * @return void - * @throws InvalidXmlNodeException If an unknown/invalid XML node name was found - */ - public function startElement ($resource, $element, array $attributes) { - // Initial method name which will never be called... - $methodName = 'initSelfConnect'; - - // Make the element name lower-case - $element = strtolower($element); - - // Is the element a main node? - //* DEBUG: */ echo "START: >".$element."<
\n"; - if (in_array($element, $this->getMainNodes())) { - // Okay, main node found! - $methodName = 'start' . $this->convertToClassName($element); - - // Set it - $this->setCurrMainNode($element); - } elseif (in_array($element, $this->getSubNodes())) { - // Sub node found - $methodName = 'start' . $this->convertToClassName($element); - } else { - // Invalid node name found - throw new InvalidXmlNodeException(array($this, $element, $attributes), XmlParser::EXCEPTION_XML_NODE_UNKNOWN); - } - - // Call method - //* DEBUG: */ echo "call: ".$methodName."
\n"; - call_user_func_array(array($this, $methodName), $attributes); - } - - /** - * Ends the main or sub node by sending out the gathered data - * - * @param $resource An XML resource pointer (currently ignored) - * @param $nodeName Name of the node we want to finish - * @return void - * @throws XmlNodeMismatchException If current main node mismatches the closing one - */ - public function endElement ($resource, $nodeName) { - // Make all lower-case - $nodeName = strtolower($nodeName); - - // Does this match with current main node? - //* DEBUG: */ echo "END: >".$nodeName."<
\n"; - if (($nodeName != $this->getCurrMainNode()) && (in_array($nodeName, $this->getMainNodes()))) { - // Did not match! - throw new XmlNodeMismatchException (array($this, $nodeName, $this->getCurrMainNode()), XmlParser::EXCEPTION_XML_NODE_MISMATCH); - } // END - if - - // Construct method name - $methodName = 'finish' . $this->convertToClassName($nodeName); - - // Call the corresponding method - //* DEBUG: */ echo "call: ".$methodName."
\n"; - call_user_func_array(array($this, $methodName), array()); - } - - /** - * Currently not used - * - * @param $resource XML parser resource (currently ignored) - * @param $characters Characters to handle - * @return void - * @todo Find something useful with this! - */ - public function characterHandler ($resource, $characters) { - // Trim all spaces away - $characters = trim($characters); - - // Is this string empty? - if (empty($characters)) { - // Then skip it silently - return false; - } // END - if - - // Assign the found characters to variable and use the last entry from - // stack as the name - parent::assignVariable($this->getStackerInstance()->getNamed('self_connect'), $characters); - } - - /** - * Handles the template dependency for given node - * - * @param $node The node we should load a dependency template - * @param $templateDependency A template to load to satisfy dependencies - * @return void - */ - private function handleTemplateDependency ($node, $templateDependency) { - // Is the template dependency set? - if ((!empty($templateDependency)) && (!isset($this->dependencyContent[$node]))) { - // Get a temporay menu template instance - $templateInstance = ObjectFactory::createObjectByConfiguredName('self_connect_template_class', array($this->getApplicationInstance())); - - // Then load it - $templateInstance->loadSelfConnectTemplate($templateDependency); - - // Get an XmlParser instance - $templateInstance->renderXmlContent(); - - // Parse the template's content contents - $this->dependencyContent[$node] = $templateInstance->getRawTemplateData(); - } // END - if - } - - /** - * Getter for cache file (FQFN) - * - * @return $fqfn Full-qualified file name of the menu cache - */ - public function getMenuCacheFqfn () { - $this->partialStub('Please implement this method.'); - } - - /** - * Starts the self_connect - * - * @return void - */ - private function startSelfConnect () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('self_connect', 'self-connect'); - } - - /** - * Starts the self_connect data - * - * @return void - */ - private function startSelfConnectData () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('self_connect', 'self-connect-data'); - } - - /** - * Starts the node id - * - * @return void - */ - private function startNodeId () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('self_connect', 'node-id'); - } - - /** - * Starts the session id - * - * @return void - */ - private function startSessionId () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('self_connect', 'session-id'); - } - - /** - * Finishes the session id - * - * @return void - */ - private function finishSessionId () { - // Pop the last entry - $this->getStackerInstance()->popNamed('self_connect'); - } - - /** - * Finishes the node id - * - * @return void - */ - private function finishNodeId () { - // Pop the last entry - $this->getStackerInstance()->popNamed('self_connect'); - } - - /** - * Finishes the self_connect data - * - * @return void - */ - private function finishSelfConnectData () { - // Pop the last entry - $this->getStackerInstance()->popNamed('self_connect'); - } - - /** - * Finishes the self_connect - * - * @return void - */ - private function finishSelfConnect () { - // Pop the last entry - $this->getStackerInstance()->popNamed('self_connect'); - } -} - -// [EOF] +// @DEPRECATED ?> diff --git a/application/hub/main/template/connect/class_XmlSelfConnectTemplateEngine.php b/application/hub/main/template/connect/class_XmlSelfConnectTemplateEngine.php new file mode 100644 index 000000000..7ec553fe2 --- /dev/null +++ b/application/hub/main/template/connect/class_XmlSelfConnectTemplateEngine.php @@ -0,0 +1,370 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @todo This template engine does not make use of setTemplateType() + * + * 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 . + */ +class XmlSelfConnectTemplateEngine extends BaseTemplateEngine implements CompileableTemplate { + /** + * Main nodes in the XML tree + */ + private $mainNodes = array( + 'self-connect', + ); + + /** + * Sub nodes in the XML tree + */ + private $subNodes = array( + 'self-connect-data', + 'node-id', + 'session-id' + ); + + /** + * Current main node + */ + private $curr = array(); + + /** + * Content from dependency + */ + private $dependencyContent = array(); + + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of the class TemplateEngine and prepares it for usage + * + * @param $applicationInstance A manageable application + * @return $templateInstance An instance of TemplateEngine + * @throws BasePathIsEmptyException If the provided $templateBasePath is empty + * @throws InvalidBasePathStringException If $templateBasePath is no string + * @throws BasePathIsNoDirectoryException If $templateBasePath is no + * directory or not found + * @throws BasePathReadProtectedException If $templateBasePath is + * read-protected + */ + public static final function createXmlSelfConnectTemplateEngine (ManageableApplication $applicationInstance) { + // Get a new instance + $templateInstance = new XmlSelfConnectTemplateEngine(); + + // Determine base path + $templateBasePath = $templateInstance->getConfigInstance()->getConfigEntry('application_base_path') . $applicationInstance->getRequestInstance()->getRequestElement('app') . '/'; + + // Is the base path valid? + if (empty($templateBasePath)) { + // Base path is empty + throw new BasePathIsEmptyException($templateInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); + } elseif (!is_string($templateBasePath)) { + // Is not a string + throw new InvalidBasePathStringException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); + } elseif (!is_dir($templateBasePath)) { + // Is not a path + throw new BasePathIsNoDirectoryException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); + } elseif (!is_readable($templateBasePath)) { + // Is not readable + throw new BasePathReadProtectedException(array($templateInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); + } + + // Set the base path + $templateInstance->setTemplateBasePath($templateBasePath); + + // Set template extensions + $templateInstance->setRawTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('raw_template_extension')); + $templateInstance->setCodeTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('self_connect_template_extension')); + + // Absolute output path for compiled templates + $templateInstance->setCompileOutputPath($templateInstance->getConfigInstance()->getConfigEntry('base_path') . $templateInstance->getConfigInstance()->getConfigEntry('compile_output_path')); + + // Init a variable stacker + $stackerInstance = ObjectFactory::createObjectByConfiguredName('self_connect_stacker_class'); + + // Set it + $templateInstance->setStackerInstance($stackerInstance); + + // Return the prepared instance + return $templateInstance; + } + + /** + * Load a specified self-connect template into the engine + * + * @param $template The self-connect template we shall load which is + * located in 'self_connect' by default + * @return void + */ + public function loadSelfConnectTemplate ($template = 'self_connect') { + // Set template type + $this->setTemplateType($this->getConfigInstance()->getConfigEntry('self_connect_template_type')); + + // Load the special template + $this->loadTemplate($template); + } + + /** + * Getter for current main node + * + * @return $currMainNode Current main node + */ + public final function getCurrMainNode () { + return $this->curr['main_node']; + } + + /** + * Setter for current main node + * + * @param $element Element name to set as current main node + * @return $currMainNode Current main node + */ + private final function setCurrMainNode ($element) { + $this->curr['main_node'] = (string) $element; + } + + /** + * Getter for main node array + * + * @return $mainNodes Array with valid main node names + */ + public final function getMainNodes () { + return $this->mainNodes; + } + + /** + * Getter for sub node array + * + * @return $subNodes Array with valid sub node names + */ + public final function getSubNodes () { + return $this->subNodes; + } + + /** + * Handles the start element of an XML resource + * + * @param $resource XML parser resource (currently ignored) + * @param $element The element we shall handle + * @param $attributes All attributes + * @return void + * @throws InvalidXmlNodeException If an unknown/invalid XML node name was found + */ + public function startElement ($resource, $element, array $attributes) { + // Initial method name which will never be called... + $methodName = 'initSelfConnect'; + + // Make the element name lower-case + $element = strtolower($element); + + // Is the element a main node? + //* DEBUG: */ echo "START: >".$element."<
\n"; + if (in_array($element, $this->getMainNodes())) { + // Okay, main node found! + $methodName = 'start' . $this->convertToClassName($element); + + // Set it + $this->setCurrMainNode($element); + } elseif (in_array($element, $this->getSubNodes())) { + // Sub node found + $methodName = 'start' . $this->convertToClassName($element); + } else { + // Invalid node name found + throw new InvalidXmlNodeException(array($this, $element, $attributes), XmlParser::EXCEPTION_XML_NODE_UNKNOWN); + } + + // Call method + //* DEBUG: */ echo "call: ".$methodName."
\n"; + call_user_func_array(array($this, $methodName), $attributes); + } + + /** + * Ends the main or sub node by sending out the gathered data + * + * @param $resource An XML resource pointer (currently ignored) + * @param $nodeName Name of the node we want to finish + * @return void + * @throws XmlNodeMismatchException If current main node mismatches the closing one + */ + public function endElement ($resource, $nodeName) { + // Make all lower-case + $nodeName = strtolower($nodeName); + + // Does this match with current main node? + //* DEBUG: */ echo "END: >".$nodeName."<
\n"; + if (($nodeName != $this->getCurrMainNode()) && (in_array($nodeName, $this->getMainNodes()))) { + // Did not match! + throw new XmlNodeMismatchException (array($this, $nodeName, $this->getCurrMainNode()), XmlParser::EXCEPTION_XML_NODE_MISMATCH); + } // END - if + + // Construct method name + $methodName = 'finish' . $this->convertToClassName($nodeName); + + // Call the corresponding method + //* DEBUG: */ echo "call: ".$methodName."
\n"; + call_user_func_array(array($this, $methodName), array()); + } + + /** + * Currently not used + * + * @param $resource XML parser resource (currently ignored) + * @param $characters Characters to handle + * @return void + * @todo Find something useful with this! + */ + public function characterHandler ($resource, $characters) { + // Trim all spaces away + $characters = trim($characters); + + // Is this string empty? + if (empty($characters)) { + // Then skip it silently + return false; + } // END - if + + // Assign the found characters to variable and use the last entry from + // stack as the name + parent::assignVariable($this->getStackerInstance()->getNamed('self_connect'), $characters); + } + + /** + * Handles the template dependency for given node + * + * @param $node The node we should load a dependency template + * @param $templateDependency A template to load to satisfy dependencies + * @return void + */ + private function handleTemplateDependency ($node, $templateDependency) { + // Is the template dependency set? + if ((!empty($templateDependency)) && (!isset($this->dependencyContent[$node]))) { + // Get a temporay template instance + $templateInstance = ObjectFactory::createObjectByConfiguredName('self_connect_template_class', array($this->getApplicationInstance())); + + // Then load it + $templateInstance->loadSelfConnectTemplate($templateDependency); + + // Parse the XML content + $templateInstance->renderXmlContent(); + + // Save the parsed raw content in our dependency array + $this->dependencyContent[$node] = $templateInstance->getRawTemplateData(); + } // END - if + } + + /** + * Getter for cache file (FQFN) + * + * @return $fqfn Full-qualified file name of the menu cache + */ + public function getMenuCacheFqfn () { + $this->partialStub('Please implement this method.'); + } + + /** + * Starts the self_connect + * + * @return void + */ + private function startSelfConnect () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('self_connect', 'self-connect'); + } + + /** + * Starts the self_connect data + * + * @return void + */ + private function startSelfConnectData () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('self_connect', 'self-connect-data'); + } + + /** + * Starts the node id + * + * @return void + */ + private function startNodeId () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('self_connect', 'node-id'); + } + + /** + * Starts the session id + * + * @return void + */ + private function startSessionId () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('self_connect', 'session-id'); + } + + /** + * Finishes the session id + * + * @return void + */ + private function finishSessionId () { + // Pop the last entry + $this->getStackerInstance()->popNamed('self_connect'); + } + + /** + * Finishes the node id + * + * @return void + */ + private function finishNodeId () { + // Pop the last entry + $this->getStackerInstance()->popNamed('self_connect'); + } + + /** + * Finishes the self_connect data + * + * @return void + */ + private function finishSelfConnectData () { + // Pop the last entry + $this->getStackerInstance()->popNamed('self_connect'); + } + + /** + * Finishes the self_connect + * + * @return void + */ + private function finishSelfConnect () { + // Pop the last entry + $this->getStackerInstance()->popNamed('self_connect'); + } +} + +// [EOF] +?> diff --git a/application/hub/main/template/objects/class_ObjectRegistryTemplateEngine.php b/application/hub/main/template/objects/class_ObjectRegistryTemplateEngine.php index 39f6be92e..f551ef47b 100644 --- a/application/hub/main/template/objects/class_ObjectRegistryTemplateEngine.php +++ b/application/hub/main/template/objects/class_ObjectRegistryTemplateEngine.php @@ -1,469 +1,3 @@ - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team - * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org - * @todo This template engine does not make use of setTemplateType() - * - * 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 . - */ -class ObjectRegistryTemplateEngine extends BaseTemplateEngine implements CompileableTemplate { - /** - * Instance for the object registry - */ - private $objectRegistryInstance = null; - - /** - * Main nodes in the XML tree ('menu' is ignored) - */ - private $mainNodes = array( - 'object-registry' - ); - - /** - * Sub nodes in the XML tree - */ - private $subNodes = array( - 'object-list', - 'object-list-entry', - 'object-name', - 'object-recipient-limitation', - 'object-max-spread', - 'object-protocol', - 'object-recipient-type' - ); - - /** - * Current main node - */ - private $curr = array(); - - /** - * Content from dependency - */ - private $dependencyContent = array(); - - /** - * Protected constructor - * - * @return void - */ - protected function __construct () { - // Call parent constructor - parent::__construct(__CLASS__); - - // Init object type registry instance - $this->objectRegistryInstance = ObjectFactory::createObjectByConfiguredName('object_type_registry_class'); - } - - /** - * Creates an instance of the class TemplateEngine and prepares it for usage - * - * @param $applicationInstance A manageable application - * @return $templateInstance An instance of TemplateEngine - * @throws BasePathIsEmptyException If the provided $templateBasePath is empty - * @throws InvalidBasePathStringException If $templateBasePath is no string - * @throws BasePathIsNoDirectoryException If $templateBasePath is no - * directory or not found - * @throws BasePathReadProtectedException If $templateBasePath is - * read-protected - */ - public static final function createObjectRegistryTemplateEngine (ManageableApplication $applicationInstance) { - // Get a new instance - $templateInstance = new ObjectRegistryTemplateEngine(); - - // Determine base path - $templateBasePath = $templateInstance->getConfigInstance()->getConfigEntry('application_base_path') . $applicationInstance->getRequestInstance()->getRequestElement('app') . '/'; - - // Is the base path valid? - if (empty($templateBasePath)) { - // Base path is empty - throw new BasePathIsEmptyException($templateInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); - } elseif (!is_string($templateBasePath)) { - // Is not a string - throw new InvalidBasePathStringException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); - } elseif (!is_dir($templateBasePath)) { - // Is not a path - throw new BasePathIsNoDirectoryException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); - } elseif (!is_readable($templateBasePath)) { - // Is not readable - throw new BasePathReadProtectedException(array($templateInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); - } - - // Set the base path - $templateInstance->setTemplateBasePath($templateBasePath); - - // Set template extensions - $templateInstance->setRawTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('raw_template_extension')); - $templateInstance->setCodeTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('object_registry_template_extension')); - - // Absolute output path for compiled templates - $templateInstance->setCompileOutputPath($templateInstance->getConfigInstance()->getConfigEntry('base_path') . $templateInstance->getConfigInstance()->getConfigEntry('compile_output_path')); - - // Init a variable stacker - $stackerInstance = ObjectFactory::createObjectByConfiguredName('object_registry_stacker_class'); - - // Set it - $templateInstance->setStackerInstance($stackerInstance); - - // Return the prepared instance - return $templateInstance; - } - - /** - * Load a specified object_registry template into the engine - * - * @param $template The object_registry template we shall load which is - * located in 'object_registry' by default - * @return void - */ - public function loadObjectRegistryTemplate ($template) { - // Set template type - $this->setTemplateType($this->getConfigInstance()->getConfigEntry('object_registry_template_type')); - - // Load the special template - $this->loadTemplate($template); - } - - /** - * Getter for current main node - * - * @return $currMainNode Current main node - */ - public final function getCurrMainNode () { - return $this->curr['main_node']; - } - - /** - * Setter for current main node - * - * @param $element Element name to set as current main node - * @return $currMainNode Current main node - */ - private final function setCurrMainNode ($element) { - $this->curr['main_node'] = (string) $element; - } - - /** - * Getter for main node array - * - * @return $mainNodes Array with valid main node names - */ - public final function getMainNodes () { - return $this->mainNodes; - } - - /** - * Getter for sub node array - * - * @return $subNodes Array with valid sub node names - */ - public final function getSubNodes () { - return $this->subNodes; - } - - /** - * Handles the start element of an XML resource - * - * @param $resource XML parser resource (currently ignored) - * @param $element The element we shall handle - * @param $attributes All attributes - * @return void - * @throws InvalidXmlNodeException If an unknown/invalid XML node name was found - */ - public function startElement ($resource, $element, array $attributes) { - // Initial method name which will never be called... - $methodName = 'initObjectRegistry'; - - // Make the element name lower-case - $element = strtolower($element); - - // Is the element a main node? - //* DEBUG: */ echo "START: >".$element."<
\n"; - if (in_array($element, $this->getMainNodes())) { - // Okay, main node found! - $methodName = 'start' . $this->convertToClassName($element); - - // Set it - $this->setCurrMainNode($element); - } elseif (in_array($element, $this->getSubNodes())) { - // Sub node found - $methodName = 'start' . $this->convertToClassName($element); - } else { - // Invalid node name found - throw new InvalidXmlNodeException(array($this, $element, $attributes), XmlParser::EXCEPTION_XML_NODE_UNKNOWN); - } - - // Call method - call_user_func_array(array($this, $methodName), $attributes); - } - - /** - * Ends the main or sub node by sending out the gathered data - * - * @param $resource An XML resource pointer (currently ignored) - * @param $nodeName Name of the node we want to finish - * @return void - * @throws XmlNodeMismatchException If current main node mismatches the closing one - */ - public function endElement ($resource, $nodeName) { - // Make all lower-case - $nodeName = strtolower($nodeName); - - // Does this match with current main node? - //* DEBUG: */ echo "END: >".$nodeName."<
\n"; - if (($nodeName != $this->getCurrMainNode()) && (in_array($nodeName, $this->getMainNodes()))) { - // Did not match! - throw new XmlNodeMismatchException (array($this, $nodeName, $this->getCurrMainNode()), XmlParser::EXCEPTION_XML_NODE_MISMATCH); - } // END - if - - // Construct method name - $methodName = 'finish' . $this->convertToClassName($nodeName); - - // Call the corresponding method - //* DEBUG: */ echo "call: ".$methodName."
\n"; - call_user_func_array(array($this, $methodName), array()); - } - - /** - * Currently not used - * - * @param $resource XML parser resource (currently ignored) - * @param $characters Characters to handle - * @return void - * @todo Find something useful with this! - */ - public function characterHandler ($resource, $characters) { - // Trim all spaces away - $characters = trim($characters); - - // Is this string empty? - if (empty($characters)) { - // Then skip it silently - return false; - } // END - if - - // Get current XML node name as an array index - $nodeName = $this->getStackerInstance()->getNamed('object_registry'); - - // Is the node name 'object-name'? - if ($nodeName == 'object-name') { - // Output debug message - $this->debugOutput('TAGS: Adding object type ' . $characters . ' to registry.'); - } // END - if - - // Add it to the registry - $this->objectRegistryInstance->addEntry($nodeName, $characters); - } - - /** - * Handles the template dependency for given node - * - * @param $node The node we should load a dependency template - * @param $templateDependency A template to load to satisfy dependencies - * @return void - */ - private function handleTemplateDependency ($node, $templateDependency) { - // Is the template dependency set? - if ((!empty($templateDependency)) && (!isset($this->dependencyContent[$node]))) { - // Get a temporay menu template instance - $templateInstance = ObjectFactory::createObjectByConfiguredName('object_registry_template_class', array($this->getApplicationInstance())); - - // Then load it - $templateInstance->loadObjectRegistryTemplate($templateDependency); - - // Get an XmlParser instance - $templateInstance->renderXmlContent(); - - // Parse the template's content contents - $this->dependencyContent[$node] = $templateInstance->getRawTemplateData(); - } // END - if - } - - /** - * Getter for cache file (FQFN) - * - * @return $fqfn Full-qualified file name of the menu cache - */ - public function getObjectRegistryCacheFqfn () { - $this->partialStub('Please implement this method.'); - } - - /** - * Starts the object-registry - * - * @return void - */ - private function startObjectRegistry () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('object_registry', 'object-registry'); - } - - /** - * Starts the object-list - * - * @return void - */ - private function startObjectList () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('object_registry', 'object-list'); - } - - /** - * Starts the object-list-entry - * - * @return void - */ - private function startObjectListEntry () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('object_registry', 'object-list'); - } - - /** - * Starts the object-name - * - * @return void - */ - private function startObjectName () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('object_registry', 'object-name'); - } - - /** - * Starts the object-recipient-limitation - * - * @return void - */ - private function startObjectRecipientLimitation () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('object_registry', 'object-recipient-limitation'); - } - - /** - * Starts the object-max-spread - * - * @return void - */ - private function startObjectMaxSpread () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('object_registry', 'object-max-spread'); - } - - /** - * Starts the object-protocol - * - * @return void - */ - private function startObjectProtocol () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('object_registry', 'object-protocol'); - } - - /** - * Starts the object-recipient-type - * - * @return void - */ - private function startObjectRecipientType () { - // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('object_registry', 'object-recipient-type'); - } - - /** - * Finishes the object-recipient-type - * - * @return void - */ - private function finishObjectRecipientType () { - // Pop the last entry - $this->getStackerInstance()->popNamed('object_registry'); - } - - /** - * Finishes the object-protocol - * - * @return void - */ - private function finishObjectProtocol () { - // Pop the last entry - $this->getStackerInstance()->popNamed('object_registry'); - } - - /** - * Finishes the object-max-spread - * - * @return void - */ - private function finishObjectMaxSpread () { - // Pop the last entry - $this->getStackerInstance()->popNamed('object_registry'); - } - - /** - * Finishes the object-recipient-limitation - * - * @return void - */ - private function finishObjectRecipientLimitation () { - // Pop the last entry - $this->getStackerInstance()->popNamed('object_registry'); - } - - /** - * Finishes the object-name - * - * @return void - */ - private function finishObjectName () { - // Pop the last entry - $this->getStackerInstance()->popNamed('object_registry'); - } - - /** - * Finishes the object-list-entry - * - * @return void - */ - private function finishObjectListEntry () { - // Pop the last entry - $this->getStackerInstance()->popNamed('object_registry'); - } - - /** - * Finishes the object-list - * - * @return void - */ - private function finishObjectList () { - // Pop the last entry - $this->getStackerInstance()->popNamed('object_registry'); - } - - /** - * Finishes the object-registry - * - * @return void - */ - private function finishObjectRegistry () { - // Pop the last entry - $this->getStackerInstance()->popNamed('object_registry'); - } -} - -// [EOF] +// @DEPRECATED ?> diff --git a/application/hub/main/template/objects/class_XmlObjectRegistryTemplateEngine.php b/application/hub/main/template/objects/class_XmlObjectRegistryTemplateEngine.php new file mode 100644 index 000000000..a76a8827e --- /dev/null +++ b/application/hub/main/template/objects/class_XmlObjectRegistryTemplateEngine.php @@ -0,0 +1,469 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.ship-simu.org + * @todo This template engine does not make use of setTemplateType() + * + * 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 . + */ +class XmlObjectRegistryTemplateEngine extends BaseTemplateEngine implements CompileableTemplate { + /** + * Instance for the object registry + */ + private $objectRegistryInstance = null; + + /** + * Main nodes in the XML tree + */ + private $mainNodes = array( + 'object-registry' + ); + + /** + * Sub nodes in the XML tree + */ + private $subNodes = array( + 'object-list', + 'object-list-entry', + 'object-name', + 'object-recipient-limitation', + 'object-max-spread', + 'object-protocol', + 'object-recipient-type' + ); + + /** + * Current main node + */ + private $curr = array(); + + /** + * Content from dependency + */ + private $dependencyContent = array(); + + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + + // Init object type registry instance + $this->objectRegistryInstance = ObjectFactory::createObjectByConfiguredName('object_type_registry_class'); + } + + /** + * Creates an instance of the class TemplateEngine and prepares it for usage + * + * @param $applicationInstance A manageable application + * @return $templateInstance An instance of TemplateEngine + * @throws BasePathIsEmptyException If the provided $templateBasePath is empty + * @throws InvalidBasePathStringException If $templateBasePath is no string + * @throws BasePathIsNoDirectoryException If $templateBasePath is no + * directory or not found + * @throws BasePathReadProtectedException If $templateBasePath is + * read-protected + */ + public static final function createXmlObjectRegistryTemplateEngine (ManageableApplication $applicationInstance) { + // Get a new instance + $templateInstance = new XmlObjectRegistryTemplateEngine(); + + // Determine base path + $templateBasePath = $templateInstance->getConfigInstance()->getConfigEntry('application_base_path') . $applicationInstance->getRequestInstance()->getRequestElement('app') . '/'; + + // Is the base path valid? + if (empty($templateBasePath)) { + // Base path is empty + throw new BasePathIsEmptyException($templateInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); + } elseif (!is_string($templateBasePath)) { + // Is not a string + throw new InvalidBasePathStringException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); + } elseif (!is_dir($templateBasePath)) { + // Is not a path + throw new BasePathIsNoDirectoryException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); + } elseif (!is_readable($templateBasePath)) { + // Is not readable + throw new BasePathReadProtectedException(array($templateInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); + } + + // Set the base path + $templateInstance->setTemplateBasePath($templateBasePath); + + // Set template extensions + $templateInstance->setRawTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('raw_template_extension')); + $templateInstance->setCodeTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('object_registry_template_extension')); + + // Absolute output path for compiled templates + $templateInstance->setCompileOutputPath($templateInstance->getConfigInstance()->getConfigEntry('base_path') . $templateInstance->getConfigInstance()->getConfigEntry('compile_output_path')); + + // Init a variable stacker + $stackerInstance = ObjectFactory::createObjectByConfiguredName('object_registry_stacker_class'); + + // Set it + $templateInstance->setStackerInstance($stackerInstance); + + // Return the prepared instance + return $templateInstance; + } + + /** + * Load a specified object_registry template into the engine + * + * @param $template The object_registry template we shall load which is + * located in 'object_registry' by default + * @return void + */ + public function loadObjectRegistryTemplate ($template) { + // Set template type + $this->setTemplateType($this->getConfigInstance()->getConfigEntry('object_registry_template_type')); + + // Load the special template + $this->loadTemplate($template); + } + + /** + * Getter for current main node + * + * @return $currMainNode Current main node + */ + public final function getCurrMainNode () { + return $this->curr['main_node']; + } + + /** + * Setter for current main node + * + * @param $element Element name to set as current main node + * @return $currMainNode Current main node + */ + private final function setCurrMainNode ($element) { + $this->curr['main_node'] = (string) $element; + } + + /** + * Getter for main node array + * + * @return $mainNodes Array with valid main node names + */ + public final function getMainNodes () { + return $this->mainNodes; + } + + /** + * Getter for sub node array + * + * @return $subNodes Array with valid sub node names + */ + public final function getSubNodes () { + return $this->subNodes; + } + + /** + * Handles the start element of an XML resource + * + * @param $resource XML parser resource (currently ignored) + * @param $element The element we shall handle + * @param $attributes All attributes + * @return void + * @throws InvalidXmlNodeException If an unknown/invalid XML node name was found + */ + public function startElement ($resource, $element, array $attributes) { + // Initial method name which will never be called... + $methodName = 'initObjectRegistry'; + + // Make the element name lower-case + $element = strtolower($element); + + // Is the element a main node? + //* DEBUG: */ echo "START: >".$element."<
\n"; + if (in_array($element, $this->getMainNodes())) { + // Okay, main node found! + $methodName = 'start' . $this->convertToClassName($element); + + // Set it + $this->setCurrMainNode($element); + } elseif (in_array($element, $this->getSubNodes())) { + // Sub node found + $methodName = 'start' . $this->convertToClassName($element); + } else { + // Invalid node name found + throw new InvalidXmlNodeException(array($this, $element, $attributes), XmlParser::EXCEPTION_XML_NODE_UNKNOWN); + } + + // Call method + call_user_func_array(array($this, $methodName), $attributes); + } + + /** + * Ends the main or sub node by sending out the gathered data + * + * @param $resource An XML resource pointer (currently ignored) + * @param $nodeName Name of the node we want to finish + * @return void + * @throws XmlNodeMismatchException If current main node mismatches the closing one + */ + public function endElement ($resource, $nodeName) { + // Make all lower-case + $nodeName = strtolower($nodeName); + + // Does this match with current main node? + //* DEBUG: */ echo "END: >".$nodeName."<
\n"; + if (($nodeName != $this->getCurrMainNode()) && (in_array($nodeName, $this->getMainNodes()))) { + // Did not match! + throw new XmlNodeMismatchException (array($this, $nodeName, $this->getCurrMainNode()), XmlParser::EXCEPTION_XML_NODE_MISMATCH); + } // END - if + + // Construct method name + $methodName = 'finish' . $this->convertToClassName($nodeName); + + // Call the corresponding method + //* DEBUG: */ echo "call: ".$methodName."
\n"; + call_user_func_array(array($this, $methodName), array()); + } + + /** + * Currently not used + * + * @param $resource XML parser resource (currently ignored) + * @param $characters Characters to handle + * @return void + * @todo Find something useful with this! + */ + public function characterHandler ($resource, $characters) { + // Trim all spaces away + $characters = trim($characters); + + // Is this string empty? + if (empty($characters)) { + // Then skip it silently + return false; + } // END - if + + // Get current XML node name as an array index + $nodeName = $this->getStackerInstance()->getNamed('object_registry'); + + // Is the node name 'object-name'? + if ($nodeName == 'object-name') { + // Output debug message + $this->debugOutput('TAGS: Adding object type ' . $characters . ' to registry.'); + } // END - if + + // Add it to the registry + $this->objectRegistryInstance->addEntry($nodeName, $characters); + } + + /** + * Handles the template dependency for given node + * + * @param $node The node we should load a dependency template + * @param $templateDependency A template to load to satisfy dependencies + * @return void + */ + private function handleTemplateDependency ($node, $templateDependency) { + // Is the template dependency set? + if ((!empty($templateDependency)) && (!isset($this->dependencyContent[$node]))) { + // Get a temporay template instance + $templateInstance = ObjectFactory::createObjectByConfiguredName('object_registry_template_class', array($this->getApplicationInstance())); + + // Then load it + $templateInstance->loadObjectRegistryTemplate($templateDependency); + + // Parse the XML content + $templateInstance->renderXmlContent(); + + // Save the parsed raw content in our dependency array + $this->dependencyContent[$node] = $templateInstance->getRawTemplateData(); + } // END - if + } + + /** + * Getter for cache file (FQFN) + * + * @return $fqfn Full-qualified file name of the menu cache + */ + public function getObjectRegistryCacheFqfn () { + $this->partialStub('Please implement this method.'); + } + + /** + * Starts the object-registry + * + * @return void + */ + private function startObjectRegistry () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('object_registry', 'object-registry'); + } + + /** + * Starts the object-list + * + * @return void + */ + private function startObjectList () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('object_registry', 'object-list'); + } + + /** + * Starts the object-list-entry + * + * @return void + */ + private function startObjectListEntry () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('object_registry', 'object-list'); + } + + /** + * Starts the object-name + * + * @return void + */ + private function startObjectName () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('object_registry', 'object-name'); + } + + /** + * Starts the object-recipient-limitation + * + * @return void + */ + private function startObjectRecipientLimitation () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('object_registry', 'object-recipient-limitation'); + } + + /** + * Starts the object-max-spread + * + * @return void + */ + private function startObjectMaxSpread () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('object_registry', 'object-max-spread'); + } + + /** + * Starts the object-protocol + * + * @return void + */ + private function startObjectProtocol () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('object_registry', 'object-protocol'); + } + + /** + * Starts the object-recipient-type + * + * @return void + */ + private function startObjectRecipientType () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('object_registry', 'object-recipient-type'); + } + + /** + * Finishes the object-recipient-type + * + * @return void + */ + private function finishObjectRecipientType () { + // Pop the last entry + $this->getStackerInstance()->popNamed('object_registry'); + } + + /** + * Finishes the object-protocol + * + * @return void + */ + private function finishObjectProtocol () { + // Pop the last entry + $this->getStackerInstance()->popNamed('object_registry'); + } + + /** + * Finishes the object-max-spread + * + * @return void + */ + private function finishObjectMaxSpread () { + // Pop the last entry + $this->getStackerInstance()->popNamed('object_registry'); + } + + /** + * Finishes the object-recipient-limitation + * + * @return void + */ + private function finishObjectRecipientLimitation () { + // Pop the last entry + $this->getStackerInstance()->popNamed('object_registry'); + } + + /** + * Finishes the object-name + * + * @return void + */ + private function finishObjectName () { + // Pop the last entry + $this->getStackerInstance()->popNamed('object_registry'); + } + + /** + * Finishes the object-list-entry + * + * @return void + */ + private function finishObjectListEntry () { + // Pop the last entry + $this->getStackerInstance()->popNamed('object_registry'); + } + + /** + * Finishes the object-list + * + * @return void + */ + private function finishObjectList () { + // Pop the last entry + $this->getStackerInstance()->popNamed('object_registry'); + } + + /** + * Finishes the object-registry + * + * @return void + */ + private function finishObjectRegistry () { + // Pop the last entry + $this->getStackerInstance()->popNamed('object_registry'); + } +} + +// [EOF] +?> diff --git a/application/hub/main/template/work_units/.htaccess b/application/hub/main/template/work_units/.htaccess new file mode 100644 index 000000000..3a4288278 --- /dev/null +++ b/application/hub/main/template/work_units/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/docs/TODOs.txt b/docs/TODOs.txt index f1ebd40ee..9ae4064b3 100644 --- a/docs/TODOs.txt +++ b/docs/TODOs.txt @@ -9,7 +9,7 @@ ./application/hub/main/connectors/query/local/class_LocalQueryConnector.php:10: * @todo Find an interface for: handleAllQueries() ./application/hub/main/connectors/query/local/class_LocalQueryConnector.php:78: * @TODO 0% done: Unfinished work here ./application/hub/main/connectors/queues/local/class_LocalQueueConnector.php:58: * @TODO 0% done: Unfinished work here -./application/hub/main/cruncher/class_BaseHubCruncher.php:154: * @todo Try to make this method more generic so we can move it in BaseFrameworkSystem +./application/hub/main/cruncher/class_BaseHubCruncher.php:175: * @todo Try to make this method more generic so we can move it in BaseFrameworkSystem ./application/hub/main/cruncher/mcrypt/class_HubMcryptCruncher.php:128: * @todo 0% done ./application/hub/main/cruncher/mcrypt/class_HubMcryptCruncher.php:98: * @todo Implement this method ./application/hub/main/discovery/socket/class_PackageSocketDiscovery.php:102: // @TODO We may need some locking here @@ -39,7 +39,8 @@ ./application/hub/main/helper/hub/announcement/class_HubDescriptorHelper.php:10: * @todo Find an interface for hub helper ./application/hub/main/helper/hub/announcement/class_HubDescriptorHelper.php:65: * @todo Rewrite the ->renderXmlContent() call to no arguments ./application/hub/main/helper/hub/connection/class_HubSelfConnectHelper.php:10: * @todo Find an interface for hub helper -./application/hub/main/helper/work_units/cruncher/class_CruncherTestUnitHelper.php:52: * @todo 0% done +./application/hub/main/helper/work_units/cruncher/class_CruncherTestUnitHelper.php:53: * @todo 0% done +./application/hub/main/helper/work_units/cruncher/class_CruncherTestUnitHelper.php:64: * @todo 0% done ./application/hub/main/iterator/network/class_NetworkListenIterator.php:10: * @todo This current implementation is not recommended, use a ./application/hub/main/iterator/network/class_NetworkListenIterator.php:11: * @todo latency-based iteration or similar approaches ./application/hub/main/iterator/pool/handler/class_HandlerPoolIterator.php:10: * @todo This current implementation is not recommended, use a @@ -77,12 +78,12 @@ ./application/hub/main/tasks/hub/class_HubSelfConnectTask.php:53: * @todo 0% ./application/hub/main/tasks/hub/ping/class_HubPingTask.php:63: * @todo 0% ./application/hub/main/tasks/hub/update/class_HubUpdateCheckTask.php:53: * @todo 0% -./application/hub/main/template/announcement/class_AnnouncementTemplateEngine.php:10: * @todo This template engine does not make use of setTemplateType() -./application/hub/main/template/announcement/class_AnnouncementTemplateEngine.php:245: * @todo Find something useful with this! -./application/hub/main/template/connect/class_SelfConnectTemplateEngine.php:10: * @todo This template engine does not make use of setTemplateType() -./application/hub/main/template/connect/class_SelfConnectTemplateEngine.php:238: * @todo Find something useful with this! -./application/hub/main/template/objects/class_ObjectRegistryTemplateEngine.php:10: * @todo This template engine does not make use of setTemplateType() -./application/hub/main/template/objects/class_ObjectRegistryTemplateEngine.php:249: * @todo Find something useful with this! +./application/hub/main/template/announcement/class_XmlAnnouncementTemplateEngine.php:10: * @todo This template engine does not make use of setTemplateType() +./application/hub/main/template/announcement/class_XmlAnnouncementTemplateEngine.php:245: * @todo Find something useful with this! +./application/hub/main/template/connect/class_XmlSelfConnectTemplateEngine.php:10: * @todo This template engine does not make use of setTemplateType() +./application/hub/main/template/connect/class_XmlSelfConnectTemplateEngine.php:238: * @todo Find something useful with this! +./application/hub/main/template/objects/class_XmlObjectRegistryTemplateEngine.php:10: * @todo This template engine does not make use of setTemplateType() +./application/hub/main/template/objects/class_XmlObjectRegistryTemplateEngine.php:249: * @todo Find something useful with this! ./application/hub/main/tools/class_HubTools.php:128: // @TODO We may want to encapsulate this PHP call into an own class ./application/hub/main/visitor/tasks/class_ActiveTaskVisitor.php:105: * @todo Does a query needs to perform some actions as an active task? ./application/hub/main/visitor/tasks/class_ActiveTaskVisitor.php:116: * @todo Does a queue needs to perform some actions as an active task? @@ -216,6 +217,9 @@ ./application/hub/main/filter/task/class_HubTaskHandlerInitializerFilter.php:2:// @DEPRECATED ./application/hub/main/filter/task/class_TaskHandlerInitializerFilter.php:2:// @DEPRECATED ./application/hub/main/nodes/class_BaseHubNode.php:50: * @deprecated +./application/hub/main/template/announcement/class_AnnouncementTemplateEngine.php:2:// @DEPRECATED +./application/hub/main/template/connect/class_SelfConnectTemplateEngine.php:2:// @DEPRECATED +./application/hub/main/template/objects/class_ObjectRegistryTemplateEngine.php:2:// @DEPRECATED ./inc/classes/exceptions/io/class_FileNotFoundException.php:2:// @DEPRECATED ./inc/classes/exceptions/io/class_FilePointerNotOpenedException.php:2:// @DEPRECATED ./inc/classes/exceptions/io/class_InvalidDirectoryResourceException.php:2:// @DEPRECATED