public function render()
	{
		$this->_path = $this->getPath();

		if (! is_readable($this->_path)) {
			Request::setHttpHeader(Request::HEADER_404);
			$this->setFile(static::ERROR_404);
			$this->_path = $this->getPath();

			if (! is_readable($this->_path)) {
				throw new Exception("View file '" . $this->_path . "' doesn't exists");
			}
		}

		$template = self::getTemplateConfig();
		if (! is_array($template) or ! isset($template['type'])) {
			throw new Exception("A template and a template type are required to render the view");
		}

		$this->_type = $template['type'];

		if (isset($template['file'])) {
			$template = APP_PATH
				        . Agl::APP_TEMPLATE_DIR
				        . $template['file']
				        . Agl::PHP_EXT;

			require($template);
		} else {
			require($this->_path);
		}

		$buffer = ob_get_clean();

		Observer::dispatch(Observer::EVENT_VIEW_RENDER_BUFFER_BEFORE, array(
			'view'   => $this,
			'buffer' => &$buffer
		));

		return $this->_prepareRender($buffer);
	}