/// <summary>
        /// Comparing Application vs Application ( A v A )
        /// </summary>
        public GraphWithTabularCompare GetGraphApplications(Guid graphGuid, Guid applicationId,
                                                            IEnumerable <Guid> applicationIdsCompare, DateTime dateStart, DateTime dateEnd)
        {
            GraphWithTabularCompare graphWithTabularCompare = new GraphWithTabularCompare();

            try
            {
                if (applicationIdsCompare.Count() > 0)
                {
                    ReportDefinitionReportReportCompareApplication reportApplication =
                        this.reportRepository.GetReportCompareApplication(graphGuid);

                    graphWithTabularCompare.Data = new Graph(reportApplication.Parent, reportApplication);

                    graphWithTabularCompare.Data.Series = this.dataRepository.GetGraphAxis(reportApplication.Query.Value,
                                                                                           applicationIdsCompare, dateStart, dateEnd);
                    graphWithTabularCompare.Tabular = graphWithTabularCompare.Data.Series;
                }
            }
            catch (DataAccessLayerException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new ServiceLayerException(ex);
            }

            return(graphWithTabularCompare);
        }
        /// <summary>
        /// Comparing Application, Platform vs Platform A ( P v P )
        /// </summary>
        public GraphWithTabularCompare GetGraphPlatform(Guid graphGuid, Guid applicationId,
                                                        IEnumerable <PlatformType> platformTypes, DateTime dateStart, DateTime dateEnd)
        {
            GraphWithTabularCompare graphWithTabularCompare = new GraphWithTabularCompare();

            try
            {
                if (platformTypes.Count() > 0)
                {
                    ReportDefinitionReportComparePlatform reportPlatform =
                        this.reportRepository.GetReportComparePlatform(graphGuid);

                    graphWithTabularCompare.Data = new Graph(reportPlatform.Parent, reportPlatform);

                    graphWithTabularCompare.Data.Series = this.dataRepository.GetGraphAxis(reportPlatform.Query.Value,
                                                                                           applicationId, platformTypes, dateStart, dateEnd);

                    graphWithTabularCompare.Tabular = graphWithTabularCompare.Data.Series;
                }
            }
            catch (DataAccessLayerException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new ServiceLayerException(ex);
            }

            return(graphWithTabularCompare);
        }
        public GraphWithTabularCompare GetGraphVersions(Guid graphGuid, Guid applicationId, List <string> versions, DateTime dateStart, DateTime dateEnd)
        {
            GraphWithTabularCompare graph = null;

            try
            {
                graph = this.iReportService.GetGraphVersions(graphGuid, applicationId, versions, dateStart, dateEnd);
            }
            catch (Exception ex)
            {
                this.iLog.Error(ex);
            }
            return(graph);
        }
        /// <summary>
        /// Gets the graph.
        /// </summary>
        public GraphWithTabularCompare <Platform, PlatformType> GetGraphWithPlatformCompare(Guid graphGuid, Guid applicationId,
                                                                                            DateTime dateStart, DateTime dateEnd)
        {
            GraphWithTabularCompare <Platform, PlatformType> graphWithPlatformCompare =
                new GraphWithTabularCompare <Platform, PlatformType>();

            try
            {
                Application applicationMain = this.applicationRepository.Find(applicationId);

                IEnumerable <PlatformType> platformIdsToCompare = applicationMain.Platforms.Select(x => x.Type);
                IEnumerable <Platform>     platformsToCompare   = this.platformRepository.FindAll();
                platformsToCompare = platformsToCompare.Where(x => platformIdsToCompare.Contains(x.Type)).ToList();

                if (platformsToCompare.Count() != 0)
                {
                    graphWithPlatformCompare.Options  = platformsToCompare.ToList();
                    graphWithPlatformCompare.Selected = platformsToCompare.Select(x => x.Type).Take(2).ToList();

                    graphWithPlatformCompare.Consume
                    (
                        this.GetGraphPlatform
                        (
                            graphGuid,
                            applicationId,
                            graphWithPlatformCompare.Selected,
                            dateStart,
                            dateEnd
                        )
                    );

                    graphWithPlatformCompare.Tabular = graphWithPlatformCompare.Data.Series;
                }
                else
                {
                    graphWithPlatformCompare.NotEnoughData = true;
                }
            }
            catch (BaseException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new ServiceLayerException(ex);
            }

            return(graphWithPlatformCompare);
        }
        public GraphWithTabularCompare <ApplicationMeta, Guid> GetGraphWithApplicationCompare(Guid graphGuid, Guid applicationId, DateTime dateStart,
                                                                                              DateTime dateEnd)
        {
            GraphWithTabularCompare <ApplicationMeta, Guid> graphWithApplicationCompare = null;

            try
            {
                graphWithApplicationCompare = this.iReportService.GetGraphWithApplicationCompare(graphGuid, applicationId, dateStart, dateEnd);
            }
            catch (Exception ex)
            {
                this.iLog.Error(ex);
            }
            return(graphWithApplicationCompare);
        }
        public GraphWithTabularCompare GetGraphPlatform(Guid graphGuid, Guid applicationId,
                                                        List <PlatformType> platformTypes, DateTime dateStart, DateTime dateEnd)
        {
            GraphWithTabularCompare graphWithTabularCompare = null;

            try
            {
                graphWithTabularCompare = this.iReportService.GetGraphPlatform(graphGuid, applicationId,
                                                                               platformTypes, dateStart, dateEnd);
            }
            catch (Exception ex)
            {
                this.iLog.Error(ex);
            }
            return(graphWithTabularCompare);
        }
        public GraphWithTabularCompare GetGraphApplications(Guid graphGuid, Guid applicationId,
                                                            List <Guid> applicationIdCompare, DateTime dateStart, DateTime dateEnd)
        {
            GraphWithTabularCompare graphWithTabularCompare = null;

            try
            {
                graphWithTabularCompare = this.iReportService.GetGraphApplications(graphGuid, applicationId,
                                                                                   applicationIdCompare, dateStart, dateEnd);
            }
            catch (Exception ex)
            {
                this.iLog.Error(ex);
            }
            return(graphWithTabularCompare);
        }
        /// <summary>
        /// Gets the graph with application compare.
        /// </summary>
        public GraphWithTabularCompare <ApplicationMeta, Guid> GetGraphWithApplicationCompare(Guid graphGuid, Guid applicationId,
                                                                                              DateTime dateStart, DateTime dateEnd)
        {
            GraphWithTabularCompare <ApplicationMeta, Guid> graphWithApplicationCompare =
                new GraphWithTabularCompare <ApplicationMeta, Guid>();

            try
            {
                Application applicationMain = this.applicationRepository.Find(applicationId);

                IEnumerable <Application> applicationsToCompare = this.applicationRepository.FindAll();
                applicationsToCompare = applicationsToCompare.Where(x => x.Guid != applicationMain.Guid).ToList();

                List <ApplicationMeta> applications = new List <ApplicationMeta>();
                if (applicationsToCompare.Count() != 0)
                {
                    applications = applicationsToCompare.Cast <ApplicationMeta>().ToList();
                }
                applications.Add(applicationMain);
                graphWithApplicationCompare.Options = applications;


                List <Guid> applicationsSelected = new List <Guid>();
                if (applicationsToCompare.Count() != 0)
                {
                    applicationsSelected = applicationsToCompare.Select(x => x.Guid).Take(2).ToList();
                }
                applicationsSelected.Add(applicationId);
                graphWithApplicationCompare.Selected = applicationsSelected;

                graphWithApplicationCompare.Consume(
                    this.GetGraphApplications(graphGuid, applicationId, applicationsSelected, dateStart, dateEnd)
                    );
            }
            catch (BaseException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new ServiceLayerException(ex);
            }

            return(graphWithApplicationCompare);
        }
        /// <summary>
        /// Gets the graph.
        /// </summary>
        public GraphWithTabularCompare <string, string> GetGraphWithVersionsCompare(Guid graphGuid, Guid applicationId,
                                                                                    DateTime dateStart, DateTime dateEnd)
        {
            GraphWithTabularCompare <string, string> graphWithVersionCompare =
                new GraphWithTabularCompare <string, string>();

            try
            {
                graphWithVersionCompare.Options = this.applicationRepository.GetVersionsByApplication(applicationId).ToList();

                if (graphWithVersionCompare.Options.Count() != 0)
                {
                    graphWithVersionCompare.Selected = graphWithVersionCompare.Options.Take(3).ToList();
                    graphWithVersionCompare.Consume(
                        this.GetGraphVersions(graphGuid, applicationId, graphWithVersionCompare.Selected, dateStart, dateEnd)
                        );

                    graphWithVersionCompare.Tabular = graphWithVersionCompare.Data.Series;
                }
                else
                {
                    graphWithVersionCompare.NotEnoughData = true;
                }
            }
            catch (DataAccessLayerException)
            {
                throw;
            }
            catch (ServiceLayerException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new ServiceLayerException(ex);
            }

            return(graphWithVersionCompare);
        }