Smrf.NodeXL.ExcelTemplate.GraphImporter.ImportEdges C# (CSharp) Method

ImportEdges() private static method

private static ImportEdges ( IGraph oSourceGraph, String asEdgeAttributes, ListObject oEdgeTable, Range oVertex1NameColumnData, Range oVertex2NameColumnData, System.Boolean bAppendToTable ) : void
oSourceGraph IGraph
asEdgeAttributes String
oEdgeTable ListObject
oVertex1NameColumnData Range
oVertex2NameColumnData Range
bAppendToTable System.Boolean
return void
    ImportEdges
    (
        IGraph oSourceGraph,
        String [] asEdgeAttributes,
        ListObject oEdgeTable,
        Range oVertex1NameColumnData,
        Range oVertex2NameColumnData,
        Boolean bAppendToTable
    )
    {
        Debug.Assert(oSourceGraph != null);
        Debug.Assert(oEdgeTable != null);
        Debug.Assert(oVertex1NameColumnData != null);
        Debug.Assert(oVertex2NameColumnData != null);

        Int32 iRowOffsetToWriteTo = 0;

        if (bAppendToTable)
        {
            iRowOffsetToWriteTo =
                ExcelTableUtil.GetOffsetOfFirstEmptyTableRow(oEdgeTable);

            ExcelUtil.OffsetRange(ref oVertex1NameColumnData,
                iRowOffsetToWriteTo, 0);

            ExcelUtil.OffsetRange(ref oVertex2NameColumnData,
                iRowOffsetToWriteTo, 0);
        }

        Range [] aoEdgeAttributeColumnData = null;
        Object [][,] aaoEdgeAttributeValues = null;
        Int32 iEdgeAttributes = 0;
        IEdgeCollection oEdges = oSourceGraph.Edges;
        Int32 iEdges = oEdges.Count;

        // Create vertex name and edge attribute arrays that will be written to
        // the edge table.

        Object [,] aoVertex1NameValues =
            ExcelUtil.GetSingleColumn2DArray(iEdges);

        Object [,] aoVertex2NameValues =
            ExcelUtil.GetSingleColumn2DArray(iEdges);

        if (asEdgeAttributes != null)
        {
            iEdgeAttributes = asEdgeAttributes.Length;
            aoEdgeAttributeColumnData = new Range[iEdgeAttributes];
            aaoEdgeAttributeValues = new Object[iEdgeAttributes][,];
            ListColumn oEdgeAttributeColumn;
            Range oEdgeAttributeColumnData;

            for (Int32 i = 0; i < iEdgeAttributes; i++)
            {
                GetAttributeColumn(oEdgeTable, asEdgeAttributes[i],
                    out oEdgeAttributeColumn, out oEdgeAttributeColumnData);

                if (bAppendToTable)
                {
                    ExcelUtil.OffsetRange(ref oEdgeAttributeColumnData,
                        iRowOffsetToWriteTo, 0);
                }

                aoEdgeAttributeColumnData[i] = oEdgeAttributeColumnData;

                aaoEdgeAttributeValues[i] =
                    ExcelUtil.GetSingleColumn2DArray(iEdges);
            }
        }

        // Fill in the vertex name and edge attribute arrays.

        Int32 iEdge = 1;

        foreach (IEdge oEdge in oEdges)
        {
            IVertex [] aoVertices = oEdge.Vertices;

            aoVertex1NameValues[iEdge, 1] = aoVertices[0].Name;
            aoVertex2NameValues[iEdge, 1] = aoVertices[1].Name;

            Object oEdgeAttribute;

            for (Int32 i = 0; i < iEdgeAttributes; i++)
            {
                if ( oEdge.TryGetValue(asEdgeAttributes[i],
                    out oEdgeAttribute) )
                {
                    aaoEdgeAttributeValues[i][iEdge, 1] =
                        CleanUpAttributeValue(oEdgeAttribute);
                }
            }

            iEdge++;
        }

        // Write the vertex name and edge attribute arrays to the table.

        SetRangeValues( (Range)oVertex1NameColumnData.Cells[1, 1],
            aoVertex1NameValues, false );

        SetRangeValues( (Range)oVertex2NameColumnData.Cells[1, 1],
            aoVertex2NameValues, false );

        for (Int32 i = 0; i < iEdgeAttributes; i++)
        {
            SetRangeValues( (Range)aoEdgeAttributeColumnData[i].Cells[1, 1],
                aaoEdgeAttributeValues[i], true );
        }
    }