/// <summary> /// Load XML Cast Report /// </summary> /// <param name="pOutputPath"></param> public static XmlCastReport LoadXML(string pInputPath) { if (string.IsNullOrEmpty(pInputPath)) { throw new ArgumentNullException("pInputPath"); } XmlCastReport report = null; using (TextReader tr = new StreamReader(pInputPath, Encoding.UTF8)) { XmlSerializer sr = new XmlSerializer(typeof(XmlCastReport)); report = sr.Deserialize(tr) as XmlCastReport; } return(report); }
/// <summary> /// Load arguments from array /// </summary> /// <param name="pArgs">Argument array from Main()</param> /// <param name="pShowHelp">Show help indicator</param> /// <returns>Arguments</returns> public XmlCastReport Load(string[] pArgs, out bool pShowHelp) { if (pArgs.Length > 0 && pArgs[1].ToString().ToLower() == "-reporttype") { if (pArgs.Length >= 13) { // Do not show help by default pShowHelp = false; string type; string value; XmlCastReport castReport = new XmlCastReport() { Snapshot = new XmlSnapshot() }; for (int i = 2; i < pArgs.Length; i += 2) { type = LoadType(pArgs[i - 1]); value = pArgs[i]; if (string.IsNullOrEmpty(type)) { // unrecognized type -> show help pShowHelp = true; // return nothing return(null); } // Set Current Argument SetArgument(type, value, castReport); } return(castReport); } else { pShowHelp = true; return(null); } } else { // Do not show help by default pShowHelp = false; if (pArgs == null || pArgs.Length == 0) { // No Arguments // unrecognized type -> show help pShowHelp = true; // return nothing return(null); } if (pArgs.Length == 1) { try { // Load from XML file return(XmlCastReport.LoadXML(pArgs[0])); } catch { // not enough arguments -> show help pShowHelp = true; // return nothing return(null); } } else if (pArgs.Length % 2 == 0) { string type; string value; XmlCastReport castReport = new XmlCastReport() { Snapshot = new XmlSnapshot() }; for (int i = 1; i < pArgs.Length; i += 2) { type = LoadType(pArgs[i - 1]); value = pArgs[i]; if (string.IsNullOrEmpty(type)) { // unrecognized type -> show help pShowHelp = true; // return nothing return(null); } // Set Current Argument SetArgument(type, value, castReport); } // all right if (!castReport.Check()) { // XSD do not check -> show help pShowHelp = true; // return nothing return(null); } return(castReport); } else { // not enough arguments -> show help pShowHelp = true; // return nothing return(null); } } }
/// <summary> /// Set Argument /// </summary> /// <param name="pType">Type</param> /// <param name="pValue">Value</param> /// <param name="pCastReport">Cast Report</param> static void SetArgument(string pType, string pValue, XmlCastReport pCastReport) { if (string.IsNullOrEmpty(pType)) { throw new ArgumentNullException("pType"); } if (pCastReport == null) { throw new ArgumentNullException("pCastReport"); } if (pCastReport.Snapshot == null) { throw new ArgumentException("pCastReport misses Snapshot"); } switch (pType) { case "webservice": pCastReport.Webservice = new XmlTagName() { Name = pValue }; break; case "application": pCastReport.Application = new XmlTagName() { Name = pValue }; break; case "template": pCastReport.Template = new XmlTagName() { Name = pValue }; break; case "file": pCastReport.File = new XmlTagName() { Name = pValue }; break; case "database": pCastReport.Database = new XmlTagName() { Name = pValue }; break; case "snapshot_cur": pCastReport.Snapshot.Current = new XmlTagName() { Name = pValue }; break; case "snapshot_prev": pCastReport.Snapshot.Previous = new XmlTagName() { Name = pValue }; break; case "username": pCastReport.Username = new XmlTagName() { Name = pValue }; break; case "password": pCastReport.Password = new XmlTagName() { Name = pValue }; break; case "reporttype": pCastReport.ReportType = new XmlTagName() { Name = pValue }; break; case "category": pCastReport.Category = new XmlTagName() { Name = pValue }; break; case "tag": pCastReport.Tag = new XmlTagName() { Name = pValue }; break; } }
/// <summary> /// Load arguments from array /// </summary> /// <param name="pArgs">Argument array from Main()</param> /// <param name="pShowHelp">Show help indicator</param> /// <returns>Arguments</returns> public XmlCastReport Load(string[] pArgs, out bool pShowHelp) { // Do not show help by default pShowHelp = false; // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (pArgs == null || pArgs.Length == 0) { // No Arguments // unrecognized type -> show help pShowHelp = true; // return nothing return(null); } if (pArgs.Length == 1) { try { // Load from XML file XmlCastReport cstRep = XmlCastReport.LoadXML(pArgs[0]); if (!cstRep.Check()) { // XSD do not check -> show help pShowHelp = true; // return nothing return(null); } return(cstRep); } catch { // not enough arguments -> show help pShowHelp = true; // return nothing return(null); } } if (pArgs.Length % 2 == 0) { XmlCastReport castReport = new XmlCastReport() { Snapshot = new XmlSnapshot() }; for (int i = 1; i < pArgs.Length; i += 2) { var type = LoadType(pArgs[i - 1]); var value = pArgs[i]; if (string.IsNullOrEmpty(type)) { // unrecognized type -> show help pShowHelp = true; // return nothing return(null); } // Set Current Argument SetArgument(type, value, castReport); } // all right if (!castReport.Check()) { // XSD do not check -> show help pShowHelp = true; // return nothing return(null); } return(castReport); } // not enough arguments -> show help pShowHelp = true; // return nothing return(null); }
/// <summary> /// /// </summary> /// <param name="arguments"></param> /// <param name="help"></param> /// <returns></returns> private static string GenerateReport(XmlCastReport arguments, out string help) { if (arguments.ReportType != null) { string reportPath = string.Empty; string tmpReportFile = string.Empty; try { help = string.Empty; //Get RG settings var settings = SettingsBLL.GetSetting(); LogHelper.Instance.LogInfo("RG settings have been read successfully"); //Initialize temporary directory string workDirectory = SettingsBLL.GetApplicationPath(); //tmpReportFile = PathUtil.CreateTempCopy(workDirectory, Path.Combine(settings.ReportingParameter.TemplatePath, arguments.Template.Name)); //tmpReportFile = PathUtil.CreateTempCopy(workDirectory, arguments.Template.Name); //Initialize Web services var connection = new WSConnection(arguments.Webservice.Name, arguments.Username.Name, arguments.Password.Name, string.Empty); using (CommonBLL commonBLL = new CommonBLL(connection)) { if (!commonBLL.CheckService()) { help = string.Format("Webservice can't be access or is bad formatted. Url:{0} Username:{1} Password:{2}", arguments.Webservice.Name, arguments.Username.Name, arguments.Password.Name); return string.Empty; } } LogHelper.Instance.LogInfo("Web services Initialized successfully"); List<Application> Apps = new List<Application>(); try { using (CastDomainBLL castDomainBLL = new CastDomainBLL(connection)) { if (arguments.Tag == null) { Apps = castDomainBLL.GetCommonTaggedApplications(null); } else { Apps = castDomainBLL.GetCommonTaggedApplications(arguments.Tag.Name); } } } catch (Exception ex) { LogHelper.Instance.LogInfo("Error occured while trying get applications for the portfolio"); } Application[] SelectedApps = Apps.ToArray<Application>(); LogHelper.Instance.LogInfo("Applications is the portfolio found successfully"); string[] AppsToIgnorePortfolioResult = PortfolioBLL.BuildPortfolioResult(connection, SelectedApps); LogHelper.Instance.LogInfo("Build result for the portfolio"); string[] SnapsToIgnore = null; List<Application> N_Apps = new List<Application>(); //Remove from Array the Ignored Apps for (int i = 0; i < SelectedApps.Count(); i++) { int intAppYes = 0; foreach (string s in AppsToIgnorePortfolioResult) { if (s == SelectedApps[i].Name) { intAppYes = 1; break; } else { intAppYes = 0; } } if (intAppYes == 0) { N_Apps.Add(SelectedApps[i]); } } Application[] N_SelectedApps = N_Apps.ToArray(); List<Snapshot> Snapshots = new List<Snapshot>(); try { using (CastDomainBLL castDomainBLL = new CastDomainBLL(connection)) { Snapshots = castDomainBLL.GetAllSnapshots(N_SelectedApps); } } catch (Exception ex) { LogHelper.Instance.LogInfo("Error occured while trying get snapshots of applications for the portfolio"); } LogHelper.Instance.LogInfo("Snapshots is the portfolio found successfully"); List<Snapshot> N_Snaps = new List<Snapshot>(); if (Snapshots != null) { Snapshot[] SelectedApps_Snapshots = Snapshots.ToArray<Snapshot>(); SnapsToIgnore = PortfolioSnapshotsBLL.BuildSnapshotResult(connection, SelectedApps_Snapshots, true); LogHelper.Instance.LogInfo("Build result for snapshots in portfolio"); for (int i = 0; i < SelectedApps_Snapshots.Count(); i++) { int intRemoveYes = 0; foreach (string s in SnapsToIgnore) { if (s == SelectedApps_Snapshots[i].Href) { intRemoveYes = 1; break; } else { intRemoveYes = 0; } } if (intRemoveYes == 0) { N_Snaps.Add(SelectedApps_Snapshots[i]); } } Snapshot[] N_SelectedApps_Snapshots = N_Snaps.ToArray(); //GenerateReportPortfolio(N_SelectedApps, N_SelectedApps_Snapshots); //string tmpReportFile = String.Empty; string tmpReportFileFlexi = String.Empty; try { //Create temporary report //string workDirectory = SettingsBLL.GetApplicationPath(); //tmpReportFile = PathUtil.CreateTempCopy(workDirectory + "\\Portfolio\\", arguments.Template.Name); tmpReportFile = PathUtil.CreateTempCopy(workDirectory, Path.Combine(settings.ReportingParameter.TemplatePath + "\\Portfolio", arguments.Template.Name)); if (tmpReportFile.Contains(".xlsx")) { tmpReportFileFlexi = PathUtil.CreateTempCopyFlexi(workDirectory, arguments.Template.Name); } //Build report ReportData reportData = new ReportData(); if (arguments.Category != null && arguments.Tag != null) { reportData = new ReportData() { FileName = tmpReportFile, Application = null, CurrentSnapshot = null, PreviousSnapshot = null, RuleExplorer = new RuleBLL(connection), CurrencySymbol = "$", Applications = N_SelectedApps, Category = arguments.Category.Name, Tag = arguments.Tag.Name, snapshots = N_SelectedApps_Snapshots, IgnoresApplications = AppsToIgnorePortfolioResult, IgnoresSnapshots = SnapsToIgnore }; } else if (arguments.Category != null && arguments.Tag == null) { reportData = new ReportData() { FileName = tmpReportFile, Application = null, CurrentSnapshot = null, PreviousSnapshot = null, RuleExplorer = new RuleBLL(connection), CurrencySymbol = "$", Applications = N_SelectedApps, Category = arguments.Category.Name, Tag = null, snapshots = N_SelectedApps_Snapshots, IgnoresApplications = AppsToIgnorePortfolioResult, IgnoresSnapshots = SnapsToIgnore }; } else if (arguments.Category == null && arguments.Tag != null) { reportData = new ReportData() { FileName = tmpReportFile, Application = null, CurrentSnapshot = null, PreviousSnapshot = null, RuleExplorer = new RuleBLL(connection), CurrencySymbol = "$", Applications = N_SelectedApps, Category = null, Tag = arguments.Tag.Name, snapshots = N_SelectedApps_Snapshots, IgnoresApplications = AppsToIgnorePortfolioResult, IgnoresSnapshots = SnapsToIgnore }; } else { reportData = new ReportData() { FileName = tmpReportFile, Application = null, CurrentSnapshot = null, PreviousSnapshot = null, RuleExplorer = new RuleBLL(connection), CurrencySymbol = "$", Applications = N_SelectedApps, Category = null, Tag = null, snapshots = N_SelectedApps_Snapshots, IgnoresApplications = AppsToIgnorePortfolioResult, IgnoresSnapshots = SnapsToIgnore }; } using (IDocumentBuilder docBuilder = BuilderFactory.CreateBuilder(reportData, tmpReportFile)) { docBuilder.BuildDocument(); } LogHelper.Instance.LogInfo("Report generated successfully"); //Set filte report SetFileName(arguments); if (string.IsNullOrEmpty(settings.ReportingParameter.GeneratedFilePath)) reportPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), arguments.File.Name); else reportPath = Path.Combine(settings.ReportingParameter.GeneratedFilePath, arguments.File.Name); if (tmpReportFile.Contains(".xlsx")) { tmpReportFile = tmpReportFileFlexi; } //Copy report file to the selected destination File.Copy(tmpReportFile, reportPath, true); } catch (Exception ex) { reportPath = String.Empty; throw (ex); } finally { if (!String.IsNullOrEmpty(tmpReportFile)) File.Delete(tmpReportFile); } } return reportPath; } catch (Exception ex) { help = string.Format("An exception occured : {0}", ex); return string.Empty; } finally { if (!string.IsNullOrEmpty(tmpReportFile)) File.Delete(tmpReportFile); } } else { string tmpReportFile = string.Empty; try { help = string.Empty; //Get RG settings var settings = SettingsBLL.GetSetting(); LogHelper.Instance.LogInfo("RG settings have been read successfully"); //Initialize temporary directory string workDirectory = SettingsBLL.GetApplicationPath(); tmpReportFile = PathUtil.CreateTempCopy(workDirectory, Path.Combine(settings.ReportingParameter.TemplatePath, arguments.Template.Name)); //Initialize Web services var connection = new WSConnection(arguments.Webservice.Name, arguments.Username.Name, arguments.Password.Name, string.Empty); using (CommonBLL commonBLL = new CommonBLL(connection)) { if (!commonBLL.CheckService()) { help = string.Format("Webservice can't be access or is bad formatted. Url:{0} Username:{1} Password:{2}", arguments.Webservice.Name, arguments.Username.Name, arguments.Password.Name); return string.Empty; } } LogHelper.Instance.LogInfo("Web services Initialized successfully"); //Initialize Application Application application = GetApplication(arguments.Application.Name, connection); if (application == null) { help = string.Format("Application {0} can't be found.", arguments.Application.Name); return string.Empty; } LogHelper.Instance.LogInfo(string.Format("Application {0} Initialized successfully", arguments.Application.Name)); //Initialize snapshots SetSnapshots(connection, application); if (application.Snapshots == null) { help = "There is no snapshots for this application."; return string.Empty; } LogHelper.Instance.LogInfo(string.Format("List of Snapshots Initialized successfully", arguments.Application.Name)); //Build Application results ApplicationBLL.BuildApplicationResult(connection, application); LogHelper.Instance.LogInfo(string.Format("Application results built successfully", arguments.Application.Name)); //Set current snapshot Snapshot currentSnapshot = GetSnapshotOrDefault(arguments.Snapshot.Current, application.Snapshots, 0); if (currentSnapshot == null) { help = string.Format("Current snapshot {0} can't be found", arguments.Snapshot.Current.Name); return string.Empty; } LogHelper.Instance.LogInfo(string.Format("Current snapshot {0} initialized successfully", currentSnapshot.Name)); //Build current snapshot results SnapshotBLL.BuildSnapshotResult(connection, currentSnapshot, true); LogHelper.Instance.LogInfo(string.Format("Result of current snapshot {0} built successfully", currentSnapshot.Name)); //Set previous snapshot Snapshot prevSnapshot = GetSnapshotOrDefault(arguments.Snapshot.Previous, application.Snapshots, 1); if (arguments.Snapshot.Previous != null && !string.IsNullOrEmpty(arguments.Snapshot.Previous.Name) && prevSnapshot == null) { help = string.Format("Previous snapshot {0} can't be found", arguments.Snapshot.Previous.Name); return string.Empty; } if (prevSnapshot != null) LogHelper.Instance.LogInfo(string.Format("Previous snapshot {0} Initialized successfully", prevSnapshot.Name)); //Build previous snapshot results if (prevSnapshot != null) { SnapshotBLL.BuildSnapshotResult(connection, prevSnapshot, false); LogHelper.Instance.LogInfo(string.Format("Result of previous snapshot {0} built successfully", prevSnapshot.Name)); } //Build report ReportData reportData = new ReportData() { FileName = tmpReportFile, Application = application, CurrentSnapshot = currentSnapshot, PreviousSnapshot = prevSnapshot, Parameter = settings.ReportingParameter, RuleExplorer = new RuleBLL(connection), SnapshotExplorer = new SnapshotBLL(connection, currentSnapshot), CurrencySymbol = "$" }; using (IDocumentBuilder docBuilder = BuilderFactory.CreateBuilder(reportData, "")) { docBuilder.BuildDocument(); } LogHelper.Instance.LogInfo("Report generated successfully"); //Set filte report SetFileName(arguments); string reportPath; if (string.IsNullOrEmpty(settings.ReportingParameter.GeneratedFilePath)) reportPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), arguments.File.Name); else reportPath = Path.Combine(settings.ReportingParameter.GeneratedFilePath, arguments.File.Name); File.Copy(tmpReportFile, reportPath, true); LogHelper.Instance.LogInfo("Report moved to generation directory successfully"); return reportPath; } catch (Exception ex) { help = string.Format("An exception occured : {0}", ex); return string.Empty; } finally { if (!string.IsNullOrEmpty(tmpReportFile)) File.Delete(tmpReportFile); } } }
/// <summary> /// /// </summary> /// <param name="arguments"></param> private static void SetFileName(XmlCastReport arguments) { if (arguments.File == null) { arguments.File = new XmlTagName() { Name = null }; } if (string.IsNullOrEmpty(arguments.File.Name)) { arguments.File.Name = string.Format ("{0}_{1}{2}" , Path.GetFileNameWithoutExtension(arguments.Template.Name) , DateTime.Now.ToString("yyyy-MM-dd_hh-mm-ss") , Path.GetExtension(arguments.Template.Name) ); } }