예제 #1
0
        static int Main(string[] args)
        {
            try{
                Console.WriteLine("");
                if (args.Length != 2)
                {
                    Console.WriteLine("Error: Number of argument is invalid !");
                    PrintHelper();
                    return((int)ExitCode.InvalidArguments);
                }

                string xmlFIlePath = args[0];
                string logFIlePath = args[1];

                if (!File.Exists(xmlFIlePath))
                {
                    Console.WriteLine("Error: Xml config file argument doesn't exist !");
                    PrintHelper();
                    return((int)ExitCode.InvalidArguments);
                }

                if (!Directory.Exists(Path.GetDirectoryName(logFIlePath)))
                {
                    Console.WriteLine("Error: The directory of the log file argument doesn't exist !");
                    PrintHelper();
                    return((int)ExitCode.InvalidArguments);
                }

                Logger logger;
                try{
                    logger = new Logger(args[1]);
                }catch (Exception ex) {
                    Console.WriteLine("Failed to create log file: " + ex.Message);
                    return((int)ExitCode.InvalidArguments);
                }

                Config config;
                try{
                    logger.Log("Read Xml configuration file " + xmlFIlePath);
                    config = Config.ParseFromXml(xmlFIlePath);
                }catch (Exception ex) {
                    logger.LogAndClose("Failed to parse Xml configuration file: " + ex.Message);
                    return((int)ExitCode.FailedToLoadXml);
                }

                List <IDataBase> databases = new List <IDataBase>();
                try{
                    foreach (Database db in config.Databases)
                    {
                        if (db.Type == "Firebird")
                        {
                            Firebird FbDb = new Firebird();
                            FbDb.Log += new Firebird.LogHandler(logger.Log);
                            FbDb.Initialise(db.Path, db.Username, db.Password, db.Multiload);
                            //FbDb.Initialise(db.Path, db.Username, Utils.XORcrypt(Utils.DecodeFrom64(db.Password)), db.Multiload);
                            databases.Add(FbDb);
                        }
                    }
                }catch (Exception ex) {
                    logger.LogAndClose("Failed to initialise the database: " + ex.Message);
                    return((int)ExitCode.FailedToSetDatabase);
                }

                Etl etl;
                try{
                    etl      = new Etl();
                    etl.Log += new Etl.LogHandler(logger.Log);
                    etl.Login(
                        config.WebService.WebServiceURL,
                        config.WebService.Domain,
                        config.WebService.Login,
                        //Utils.XORcrypt(Utils.DecodeFrom64(config.WebService.Password)),
                        config.WebService.Password,
                        config.WebService.AuthType
                        );
                }catch (Exception ex) {
                    logger.LogAndClose("Failed to login to Business Objects Web Service: " + ex.Message);
                    return((int)ExitCode.FailedToLogin);
                }
                try{
                    bool succeed = etl.ExtractTo(databases.ToArray());
                    etl.Logout();
                    if (succeed == true)
                    {
                        logger.LogAndClose("End of ETL. Data were successfully extrated ! ");
                    }
                    else
                    {
                        logger.LogAndClose("End of ETL. Some errors occured while extracting data ! ");
                    }
                    return((int)ExitCode.Succeed);
                }catch (Exception ex) {
                    logger.Log("Exception : " + ex.Message);
                    etl.Logout();
                    logger.LogAndClose("End of ETL. Failed to extract data ! ");
                    return((int)ExitCode.FailedToExtract);
                }
            }catch (Exception) {
                return((int)ExitCode.UnknownError);
            }
        }