/**
  * Generate a constructor
  */
 private function _generateGetServiceConfig($className, $tables)
 {
     $this->_data .= "\t/**\n";
     $this->_data .= "\t* getServiceConfig\n";
     $this->_data .= "\t*\n";
     $this->_data .= "\t**/\n";
     $this->_data .= "\tpublic function getServiceConfig()\n";
     $this->_data .= "\t{\n";
     $this->_data .= "\t\treturn array(\n";
     $this->_data .= "\t\t\t'shared' => array(\n";
     $this->_data .= "\t\t\t),\n";
     $this->_data .= "\t\t\t'factories' => array(\n";
     // First add mappers
     $this->_data .= "\t\t\t\t// Adding all mappers for namespace\n";
     foreach ($tables as $table => $data) {
         $this->_data .= "\t\t\t\t'" . ZendModelCreator::getNamespace() . "\\Mapper\\" . ZendModelCreator::toCamelCase(ucfirst(strtolower($table))) . "Mapper' => function(\$sm) {\n";
         $this->_data .= "\t\t\t\t\t\$mapper = new Mapper\\" . ZendModelCreator::toCamelCase(ucfirst(strtolower($table))) . "Mapper;\n";
         $this->_data .= "\t\t\t\t\t\$mapper->setDbAdapter(\$sm->get('" . strtolower(ZendModelCreator::getNamespace()) . "_zend_db_adapter'));\n";
         $this->_data .= "\t\t\t\t\treturn \$mapper;\n";
         $this->_data .= "\t\t\t\t},\n";
     }
     $this->_data .= "\n";
     $this->_data .= "\t\t\t\t// Adding all services for namespace\n";
     // Then add Services
     foreach ($tables as $table => $data) {
         $this->_data .= "\t\t\t\t'" . ZendModelCreator::getNamespace() . "\\Service\\" . ZendModelCreator::toCamelCase(ucfirst(strtolower($table))) . "' => function(\$sm) {\n";
         $this->_data .= "\t\t\t\t\t\$service = new Service\\" . ZendModelCreator::toCamelCase(ucfirst(strtolower($table))) . ";\n";
         $this->_data .= "\t\t\t\t\t\$service->setMapper(\$sm->get('" . ZendModelCreator::getNamespace() . "\\Mapper\\" . ZendModelCreator::toCamelCase(ucfirst(strtolower($table))) . "Mapper'));\n";
         $this->_data .= "\t\t\t\t\t\$service->setOptions(\$sm->get('" . ZendModelCreator::getNamespace() . "\\Options\\ModuleOptions'));\n";
         $this->_data .= "\t\t\t\t\treturn \$service;\n";
         $this->_data .= "\t\t\t\t},\n";
     }
     // Add module options
     $this->_data .= "\n";
     $this->_data .= "\t\t\t\t// Adding module options\n";
     $this->_data .= "\t\t\t\t'" . ZendModelCreator::getNamespace() . "\\Options\\ModuleOptions' => function(\$sm) {\n";
     $this->_data .= "\t\t\t\t\t\$config = \$sm->get('Configuration');\n";
     $this->_data .= "\t\t\t\t\t\$moduleConfig = isset(\$config['" . strtolower(ZendModelCreator::getNamespace()) . "']) ? \$config['" . strtolower(ZendModelCreator::getNamespace()) . "'] : array();\n";
     $this->_data .= "\t\t\t\t\treturn new Options\\ModuleOptions(\$moduleConfig);\n";
     $this->_data .= "\t\t\t\t},\n";
     $this->_data .= "\t\t\t),\n";
     $this->_data .= "\t\t);\n";
     $this->_data .= "\t}\n\n";
 }
 /**
  * Generates header for entity class
  *
  */
 private function _generateClassHeader($className)
 {
     $this->_data .= "<?php\n/**\n* file: " . ucfirst(strtolower($className)) . ".php\n* " . ucfirst(strtolower($className)) . " entity\n*\n* @author " . ZendModelCreator::getGenerator() . "\n* @version " . ZendModelCreator::getVersion() . "\n* @package " . ZendModelCreator::getNamespace() . "\n* @since " . date("Y-m-d") . "\n* @package " . ZendModelCreator::getNamespace() . "\n*/\n\nnamespace " . ZendModelCreator::getNamespace() . "\\Entity;\n\n/**\n* " . ucfirst(strtolower($className)) . "\n*\n* @author " . ZendModelCreator::getGenerator() . "\n* @version " . ZendModelCreator::getVersion() . "\n* @package " . ZendModelCreator::getNamespace() . "\n* @since " . date("Y-m-d") . "\n*\n**/\nclass " . ucfirst(strtolower($className)) . "\n{\n";
 }
 /**
  * Generates header for Options class
  *
  */
 private function _generateClassHeader($className)
 {
     $this->_data .= "<?php\n/**\n* file: ModuleOptions.php\n* Module options\n*\n* @author " . ZendModelCreator::getGenerator() . "\n* @version " . ZendModelCreator::getVersion() . "\n* @package " . ZendModelCreator::getNamespace() . "\n* @package " . ZendModelCreator::getNamespace() . "\n* @since " . date("Y-m-d") . "\n*/\n\nnamespace " . ZendModelCreator::getNamespace() . "\\Options;\n\nuse Zend\\Stdlib\\AbstractOptions;\n\n/**\n* Module\n*\n* @author " . ZendModelCreator::getGenerator() . "\n* @version " . ZendModelCreator::getVersion() . "\n* @package " . ZendModelCreator::getNamespace() . "\n* @since " . date("Y-m-d") . "\n*\n**/\nclass ModuleOptions extends AbstractOptions\n{\n    protected \$__strictMode__ = false;\n    protected \$hydrateResultsByDefault = true;\n";
 }
 /**
  * Generates setEventManager
  *
  */
 private function _generateSetEventManager($className)
 {
     // Set fetch function headers
     $this->_data .= "\t/**\n";
     $this->_data .= "\t* Set the Event Manager\n";
     $this->_data .= "\t*\n";
     $this->_data .= "\t* @param object Zend\\EventManager\\EventManagerInterface\n";
     $this->_data .= "\t* @return object \$this\n";
     $this->_data .= "\t**/\n";
     $this->_data .= "\tpublic function setEventManager(EventManagerInterface \$eventManager)\n";
     $this->_data .= "\t{\n";
     $this->_data .= "\t\t\$eventManager->setIdentifiers(\n";
     $this->_data .= "\t\t\t__CLASS__,\n";
     $this->_data .= "\t\t\tget_called_class(),\n";
     $this->_data .= "\t\t\t'" . strtolower($className) . "'\n";
     $this->_data .= "\t\t);\n";
     $this->_data .= "\n";
     $this->_data .= "\t\t\$eventManager->setEventClass('" . ZendModelCreator::getNamespace() . "\\Service\\" . ucfirst(strtolower($className)) . "Event');\n";
     $this->_data .= "\n";
     $this->_data .= "\t\t\$this->eventManager = \$eventManager;\n";
     $this->_data .= "\t\treturn \$this;\n";
     $this->_data .= "\t}\n";
 }
 /**
  * Get generated data from our services
  */
 public function getDataFromServices()
 {
     $createModule = false;
     $createAutoloaders = false;
     $createConfig = false;
     $createOptions = false;
     foreach (self::$tables as $table => $data) {
         // clean interface array
         foreach ($this->getSetting('types') as $type => $get_data) {
             if ($get_data) {
                 // Quit if no primary key is set.
                 if (isset($data['primary_key'])) {
                     // set object names to Ucfirst then lowercase.
                     $table = ucfirst(strtolower($table));
                     switch ($type) {
                         case "create_entity":
                             $EntityService = new EntityCreatorService();
                             $this->_data[$table]['entity'] = $EntityService->createEntity($table, $data);
                             break;
                         case "create_mapper":
                             $MapperService = new MapperCreatorService();
                             $this->_data[$table]['mapper'] = $MapperService->createMapper($table, $data);
                             break;
                         case "create_service":
                             $serviceCreator = new ServiceCreatorService();
                             $this->_data[$table]['service'] = $serviceCreator->createService($table, $data);
                             $EventService = new EventCreatorService();
                             $this->_data[$table]['service_event'] = $EventService->createEventService($table, $data);
                             break;
                         case "create_module":
                             $createModule = true;
                             break;
                         case "create_autoloaders":
                             $createAutoloaders = true;
                             break;
                         case "create_config":
                             $createConfig = true;
                             break;
                         case "create_options":
                             $createOptions = true;
                             break;
                         default:
                             die("Settings not set correctly. [types]");
                             break;
                     }
                 }
             }
         }
     }
     // Check if we want to create the module
     if ($createModule) {
         $moduleCreator = new ModuleCreatorService();
         $this->_files['module'] = $moduleCreator->createModule($table, self::$tables);
     }
     // Check if we want to create the options file
     if ($createOptions) {
         $optionsCreator = new OptionsCreatorService();
         $this->_files['options'] = $optionsCreator->createOptions($table);
     }
     // Check if we want to create the config
     if ($createConfig) {
         // Build config file
         $this->_files['config'] = "<?php\n";
         $this->_files['config'] .= "return array(\n";
         $this->_files['config'] .= "\t'service_manager' => array(\n";
         $this->_files['config'] .= "\t\t'aliases' => array(\n";
         $this->_files['config'] .= "\t\t\t'" . strtolower(self::getNamespace()) . "_zend_db_adapter' => 'Zend\\Db\\Adapter\\Adapter',\n";
         $this->_files['config'] .= "\t\t),\n";
         $this->_files['config'] .= "\t),\n";
         $this->_files['config'] .= ");";
     }
     // Check if we want to create the options file
     if ($createConfig) {
         // Build config file
         $this->_files['config'] = "<?php\n";
         $this->_files['config'] .= "return array(\n";
         $this->_files['config'] .= "\t'service_manager' => array(\n";
         $this->_files['config'] .= "\t\t'aliases' => array(\n";
         $this->_files['config'] .= "\t\t\t'" . strtolower(self::getNamespace()) . "_zend_db_adapter' => 'Zend\\Db\\Adapter\\Adapter',\n";
         $this->_files['config'] .= "\t\t),\n";
         $this->_files['config'] .= "\t),\n";
         $this->_files['config'] .= ");";
     }
     // Check if we want to create autoloaders
     if ($createAutoloaders) {
         // Build classmap file
         $this->_files['classmap'] = "<?php\n";
         $this->_files['classmap'] .= "return array(\n";
         $this->_files['classmap'] .= "\t'" . ZendModelCreator::getNamespace() . "\\Module' => __DIR__ . '/Module.php',\n";
         $this->_files['classmap'] .= ");";
         // Build function file
         $this->_files['function'] = "<?php\n";
         $this->_files['function'] .= "return function (\$class) {\n";
         $this->_files['function'] .= "\tstatic \$map;\n";
         $this->_files['function'] .= "\tif (!\$map) {\n";
         $this->_files['function'] .= "\t\t\$map = include __DIR__ . '/autoload_classmap.php';\n";
         $this->_files['function'] .= "\t}\n";
         $this->_files['function'] .= "\tif (!isset(\$map[\$class])) {\n";
         $this->_files['function'] .= "\t\treturn false;\n";
         $this->_files['function'] .= "\t}\n";
         $this->_files['function'] .= "\treturn include \$map[\$class];\n";
         $this->_files['function'] .= "};\n";
         // Build register file
         $this->_files['register'] = "<?php\n";
         $this->_files['register'] .= "spl_autoload_register(include __DIR__ . '/autoload_function.php');";
     }
 }
 /**
  * Generate persist method
  *
  */
 private function _generatePersist($className)
 {
     // Set fetch function headers
     $this->_data .= "\t/**\n";
     $this->_data .= "\t* Save a record\n";
     $this->_data .= "\t*\n";
     $this->_data .= "\t* @param object " . ZendModelCreator::getNamespace() . "\\Entity\\" . ucfirst(strtolower($className)) . "\n";
     $this->_data .= "\t* @return object " . ZendModelCreator::getNamespace() . "\\Entity\\" . ucfirst(strtolower($className)) . "\n";
     $this->_data .= "\t**/\n";
     $this->_data .= "\tpublic function persist(" . ucfirst(strtolower($className)) . " \$" . strtolower($className) . ")\n";
     $this->_data .= "\t{\n";
     $this->_data .= "\t\tif (\$" . strtolower($className) . "->get" . ZendModelCreator::toCamelCase($this->_primary_key) . "() > 0) {\n";
     $this->_data .= "\t\t\t\$where = new Where;\n";
     $this->_data .= "\t\t\t\$where->equalTo('" . $this->_primary_key . "', \$" . strtolower($className) . "->get" . ZendModelCreator::toCamelCase($this->_primary_key) . "());\n";
     $this->_data .= "\t\t\t\$this->update(\$" . strtolower($className) . ", \$where, '" . strtolower($className) . "');\n";
     $this->_data .= "\t\t} else {\n";
     $this->_data .= "\t\t\t\$result = \$this->insert(\$" . strtolower($className) . ", '" . strtolower($className) . "');\n";
     $this->_data .= "\t\t\t\$" . strtolower($className) . "->set" . ZendModelCreator::toCamelCase($this->_primary_key) . "(\$result->getGeneratedValue());\n";
     $this->_data .= "\t\t}\n";
     $this->_data .= "\t\treturn \$" . strtolower($className) . ";\n";
     $this->_data .= "\t}\n\n";
 }
 /**
  * Generates header for Mapper class
  *
  */
 private function _generateClassHeader($className)
 {
     $this->_data .= "<?php\n/**\n* file: " . ucfirst(strtolower($className)) . "Event.php\n* " . ucfirst(strtolower($className)) . " Event\n*\n* @author " . ZendModelCreator::getGenerator() . "\n* @version " . ZendModelCreator::getVersion() . "\n* @package " . ZendModelCreator::getNamespace() . "\n* @since " . date("Y-m-d") . "\n*/\n\nnamespace " . ZendModelCreator::getNamespace() . "\\Service;\n\nuse ArrayObject;\n\nuse " . ZendModelCreator::getNamespace() . "\\Entity\\" . $className . " as " . $className . "Entity;\n\nuse Zend\\EventManager\\Event;\n\n/**\n* " . ucfirst(strtolower($className)) . "Event\n*\n* @author " . ZendModelCreator::getGenerator() . "\n* @version " . ZendModelCreator::getVersion() . "\n* @package " . ZendModelCreator::getNamespace() . "\n* @since " . date("Y-m-d") . "\n*\n**/\nclass " . ucfirst(strtolower($className)) . " extends Event\n{\n";
 }