public function build()
{
$container = $this->builder->getContainer();
$fullPath = $container->getNamespacePrefix($this->getSection()) . 'Model\\' . ucfirst($container->inflector->pluralize($this->viewName));
// Let's remove the last part and use it to create the class name
$parts = explode('\\', trim($fullPath, '\\'));
$className = array_pop($parts);
// Now glue everything together
$namespace = implode('\\', $parts);
// Let's be sure that the parent class extends with a backslash
$baseClass = '\\' . trim(get_class($this->model), '\\');
$code = '<?php' . PHP_EOL;
$code .= PHP_EOL;
$code .= 'namespace ' . $namespace . ';' . PHP_EOL;
$code .= PHP_EOL;
$code .= "defined('_JEXEC') or die;" . PHP_EOL;
$code .= PHP_EOL;
// Let's create some type-hints for the model class
$typeHints = new ModelTypeHints($this->model);
$typeHints->setClassName($fullPath);
$docBlock = $typeHints->getHints();
$code .= $docBlock;
$code .= 'class ' . $className . ' extends ' . $baseClass . PHP_EOL;
$code .= '{' . PHP_EOL;
$code .= PHP_EOL;
$code .= '}' . PHP_EOL;
$path = $container->backEndPath;
if (in_array('Site', $parts)) {
$path = $container->frontEndPath;
}
$path .= '/Model/' . $className . '.php';
$filesystem = $container->filesystem;
$filesystem->fileWrite($path, $code);
return $path;
}