|
|
- /*
- * WORM - a DAL/ORM code generation framework
- * Copyright (C) 2011 Erik Winn <sidewalksoftware@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
- #include "sql/wsqldatabase.h"
- #include "orm/wormclassgenerator.h"
- #include <iostream>
- #include <getopt.h>
- #include <dirent.h>
-
- #define PACKAGE "wormgen"
- #define VERSION "0.2"
-
- #define DEFAULT_TPL_DIR "/usr/local/share/worm"
-
- void print_help( int exval )
- {
- std::cout << PACKAGE << " " << VERSION << "\n Usage:\n" << std::endl;
- std::cout << PACKAGE << " [-hVv] <-d database> \n [-t templates_dir ] [-o outputdir] [-u username] [-p password] [-s hostname] [-D driver] \n" << std::endl;
- std::cout << " -h print this help and exit" << std::endl;
- std::cout << " -V print version and exit" << std::endl;
- std::cout << " -v set verbose flag" << std::endl;
- std::cout << " -d database set database schema to use" << std::endl;
- std::cout << " -u username set username" << std::endl;
- std::cout << " -p password set password" << std::endl;
- std::cout << " -s server set server or hostname" << std::endl;
- std::cout << " -o DIRECTORY set output directory" << std::endl;
- std::cout << " -t DIRECTORY set templates directory" << std::endl;
- std::cout << " -D driver set database driver (default MYSQL)" << std::endl
- << "Note: driver may be one of: 'mysql' or 'sqlite'. " << std::endl;
-
- exit( exval );
- }
-
- WSql::DriverType getDriver(const std::string drivername)
- {
- if(drivername.compare("mysql")==0)
- return WSql::WMYSQL;
- if(drivername.compare("sqlite")==0)
- return WSql::WSQLITE;
- std::cout << PACKAGE << ": Error - driver not supported:" << drivername << " \n" << std::endl;
- print_help( 1 );
- }
-
- int main( int argc, char ** argv )
- {
- if ( argc == 1 )
- print_help( 1 );
- int opt;
- bool verbose = false;
- std::string hostname = "localhost";
- std::string dbname;
- std::string username = "root";
- std::string password = "";
- std::string outputdir = ".";
- std::string templatesdir = "./src/orm/templates";
- DIR *dir = opendir (DEFAULT_TPL_DIR);
- if (dir != NULL){
- templatesdir = DEFAULT_TPL_DIR;
- closedir(dir);
- }
- WSql::DriverType drivertype = WSql::WMYSQL;
-
- while (( opt = getopt( argc, argv, "hVvf:o:u:d:D:p:s:t:" ) ) != -1 ) {
- switch ( opt ) {
- case 'h':
- print_help( 0 );
- break;
- case 'V':
- std::cout << PACKAGE << " " << VERSION << std::endl;
- exit( 0 );
- break;
- case 'v':
- verbose = true;
- break;
- case 'u':
- username = optarg;
- break;
- case 'd':
- dbname = optarg;
- break;
- case 'D':
- drivertype = getDriver(std::string(optarg));
- break;
- case 'p':
- password = optarg;
- break;
- case 's':
- hostname = optarg;
- break;
- case 'o':
- outputdir = optarg;
- break;
- case 't':
- templatesdir = optarg;
- break;
- case ':':
- std::cout << PACKAGE << ": Error - Option " << optopt << " requires a value\n" << std::endl;
- print_help( 1 );
- break;
- default:
- std::cout << PACKAGE << ": Error - No such option:" << optopt << " \n" << std::endl;
- print_help( 1 );
- }
- }
-
- if ( (dir = opendir(templatesdir.c_str())) == NULL) {
- std::cout << PACKAGE << " - FATAL: Cannot find template directory " << templatesdir << "!" << std::endl;
- print_help(2);
- }
- closedir(dir);
- if ( dbname.empty() ) {
- std::cerr << PACKAGE << "FATAL: Error - no database specified! \n" << std::endl;
- print_help(3);
- }
-
- //OK, lets go!
- WSql::WSqlDatabase db( drivertype );
- db.setDatabaseName( dbname );
- db.setUserName( username );
- db.setHostName( hostname );
- db.setPassword( password );
-
- if ( !db.open() ) {
- std::cerr << "FATAL: Failed to open database - error: " << db.error().text() << std::endl;
- return 4;
- }
-
- WSql::WormClassGenerator gen(db);
- gen.setTemplateDirectory(templatesdir);
- gen.setOutputDirectory(outputdir);
- gen.init();
- gen.run();
-
- return 0;
- }
|