Example #1
0
/*!
 *    \internal
 *    Attempts to create a driver - returns true on success
 */
bool WSqlDatabase::initDriver()
{
    bool blnToReturn = false;
    std::string errmsg;
    
    switch(_driverType)
    {
        case WSql::NONE:
            errmsg = "WSqlDatabase: initDriver failed - no driver type set!";
            break;
        case WSql::WSQLITE :
            _driver = new WSqliteDriver(this);
            if(0 == _driver)
                errmsg = "WSqlDatabase: initDriver failed - memory allocation error!";
            else
                blnToReturn = true;
            break;
        case WSql::WMYSQL :
            _driver = new WMysqlDriver(this);
            if(0 == _driver)
                errmsg = "WSqlDatabase: initDriver failed - memory allocation error!";
            else
                blnToReturn = true;
            break;
        case WSql::WMONGO :
        case WSql::WBERKLEYDB :
        case WSql::WPSQL :
        default:
            errmsg = "WSqlDatabase: initDriver failed - driver unsupported!";
    }
    if(!errmsg.empty())
        _errorStack.push_back(WSqlError(errmsg,1, WSqlError::SYSTEM, WSqlError::WARNING));    
    return blnToReturn;
}
Example #2
0
/*! \brief Initialize templates and metadata
 *
 * This method initializes the database metadata and loads the available
 * templates. It must be called (and optionally checked for success) \em before
 * run().
 * Note also that the templates are expected to end in ".tpl", worm will attempt to
 * identify the type of template according to the filename.
 *
 * On failure this sets a message in the database object and returns false.
 *
 * \retval bool - true if templates and metadata successfully initialized.
 */
bool WormClassGenerator::init()
{
	//load available templates
	DIR *dir;
	struct dirent *ent;

	dir = opendir ( _templateDirectory.c_str() );

	if ( dir != NULL )
	{
		WormCodeTemplate tpl;

		while ( ( ent = readdir ( dir ) ) != NULL )
		{
			if ( ent->d_type != DT_REG )
				continue;

			std::string entry = ent->d_name;
			size_t sz = entry.size();

			if ( sz < MIN_TPL_FILENAME_SIZE )
				continue;

			//only accept .tpl files
			std::string ext = entry.substr ( sz - 4 );

			if ( ext.compare ( ".tpl" ) )
				continue;

			tpl.setUri ( entry );
			_templates.push_back ( tpl );
			if( WormCodeTemplate::ClassDeclarationBase == tpl.type() )
				usesBaseClass = true;

			/* maybe use, pass a string to ctemplate:            std::string tmp;
			fs.open(entry.c_str());
			while(fs)
			    std::getline(fs,tmp);
			tpl.setContent(tmp);
			*/
		}

		closedir ( dir );
	}
	else
	{
		std::string msg = "Cannot open directory: " + _templateDirectory;

		if ( errno == EACCES )
			msg.append ( " - Access denied." );

		_db.addError ( WSqlError ( msg, errno, WSql::WSqlError::SYSTEM, WSql::WSqlError::FATAL ) );
		return false;
	}

	_db.initMetaData();
	return true;
}