Smrf.NodeXL.ExcelTemplate.GraphMetricsAggregator.AggregateGraphMetricsInternal C# (CSharp) Method

AggregateGraphMetricsInternal() protected method

protected AggregateGraphMetricsInternal ( AggregateGraphMetricsAsyncArgs oAggregateGraphMetricsAsyncArgs, BackgroundWorker oBackgroundWorker, DoWorkEventArgs oDoWorkEventArgs ) : void
oAggregateGraphMetricsAsyncArgs AggregateGraphMetricsAsyncArgs
oBackgroundWorker System.ComponentModel.BackgroundWorker
oDoWorkEventArgs System.ComponentModel.DoWorkEventArgs
return void
    AggregateGraphMetricsInternal
    (
        AggregateGraphMetricsAsyncArgs oAggregateGraphMetricsAsyncArgs,
        BackgroundWorker oBackgroundWorker,
        DoWorkEventArgs oDoWorkEventArgs
    )
    {
        Debug.Assert(oAggregateGraphMetricsAsyncArgs != null);
        Debug.Assert(oBackgroundWorker != null);
        Debug.Assert(oDoWorkEventArgs != null);
        AssertValid();

        List<OverallMetricsInfo> oOverallMetricsInfos =
            new List<OverallMetricsInfo>();

        OverallMetricsReader oOverallMetricsReader =
            new OverallMetricsReader();

        foreach ( String sFilePath in Directory.GetFiles(
            oAggregateGraphMetricsAsyncArgs.SourceFolderPath, "*.xlsx") )
        {
            if (oBackgroundWorker.CancellationPending)
            {
                oDoWorkEventArgs.Cancel = true;
                return;
            }

            try
            {
                if (!NodeXLWorkbookUtil.FileIsNodeXLWorkbook(sFilePath))
                {
                    continue;
                }
            }
            catch (IOException)
            {
                // Skip any workbooks that are already open, or that have any
                // other problems that prevent them from being opened.

                continue;
            }

            oBackgroundWorker.ReportProgress(0,
                String.Format(
                    "Reading \"{0}\"."
                    ,
                    Path.GetFileName(sFilePath)
                ) );

            OverallMetricsInfo oOverallMetricsInfo;

            for (Int32 iAttempt = 0; iAttempt < 2; iAttempt++)
            {
                // Have overall metrics already been calculated for the
                // workbook?

                if ( TryGetGraphMetricsForOneNodeXLWorkbook(sFilePath,
                    out oOverallMetricsInfo) )
                {
                    // Yes.

                    oOverallMetricsInfos.Add(oOverallMetricsInfo);
                    break;
                }

                if (iAttempt == 0)
                {
                    // No.  Calculate them.

                    TaskAutomator.AutomateOneWorkbookIndirect(sFilePath,
                        oAggregateGraphMetricsAsyncArgs.WorkbookSettings);
                }
            }
        }

        if (oOverallMetricsInfos.Count > 0)
        {
            WriteOverallMetricsToNewWorkbook(
                oAggregateGraphMetricsAsyncArgs.Workbook.Application,
                oOverallMetricsInfos);
        }

        oBackgroundWorker.ReportProgress(0,
            String.Format(
                "Done.  NodeXL workbooks aggregated: {0}."
                ,
                oOverallMetricsInfos.Count
            ) );
    }