* @package generis */ class core_kernel_uri_DatabaseSerialUriProvider extends ConfigurableService implements UriProvider { const OPTION_PERSISTENCE = 'persistence'; const OPTION_NAMESPACE = 'namespace'; // --- ASSOCIATIONS --- // --- ATTRIBUTES --- // --- OPERATIONS --- /** * @return common_persistence_SqlPersistence */ public function getPersistence() { return common_persistence_SqlPersistence::getPersistence($this->getOption(self::OPTION_PERSISTENCE)); } /** * Generates a URI based on a serial stored in the database. * * @access public * @author Jerome Bogaerts, * @return string * @throws UriProviderException */ public function provide() { $returnValue = (string) ''; try { $sth = $this->getPersistence()->query($this->getPersistence()->getPlatForm()->getSqlFunction("generis_sequence_uri_provider"), [ $this->getOption(self::OPTION_NAMESPACE) ]); if ($sth !== false) { $row = $sth->fetch(); $returnValue = current($row); $sth->closeCursor(); } else { throw new UriProviderException("An error occured while calling the stored procedure for persistence " . $this->getOption(self::OPTION_PERSISTENCE) . "."); } } catch (Exception $e) { throw new UriProviderException("An error occured while calling the stored ': " . $e->getMessage() . "."); } return (string) $returnValue; } }