Exemple #1
0
        public void CrunchMetadata(DataSet metadata)
        {
            DataSet   dataSource         = new DataSet();
            DataTable activeMeasurements = new DataTable("ActiveMeasurements");

            activeMeasurements.Columns.Add("SourceNodeID", typeof(Guid));
            activeMeasurements.Columns.Add("ID", typeof(string));
            activeMeasurements.Columns.Add("SignalID", typeof(Guid));
            activeMeasurements.Columns.Add("PointTag", typeof(string));
            activeMeasurements.Columns.Add("AlternateTag", typeof(string));
            activeMeasurements.Columns.Add("SignalReference", typeof(string));
            activeMeasurements.Columns.Add("Internal", typeof(bool));
            activeMeasurements.Columns.Add("Subscribed", typeof(bool));
            activeMeasurements.Columns.Add("Device", typeof(string));
            activeMeasurements.Columns.Add("DeviceID", typeof(int));
            activeMeasurements.Columns.Add("FramesPerSecond", typeof(int));
            activeMeasurements.Columns.Add("Protocol", typeof(string));
            activeMeasurements.Columns.Add("ProtocolType", typeof(string));
            activeMeasurements.Columns.Add("SignalType", typeof(string));
            activeMeasurements.Columns.Add("EngineeringUnits", typeof(string));
            activeMeasurements.Columns.Add("PhasorID", typeof(int));
            activeMeasurements.Columns.Add("PhasorType", typeof(string));
            activeMeasurements.Columns.Add("Phase", typeof(string));
            activeMeasurements.Columns.Add("Adder", typeof(double));
            activeMeasurements.Columns.Add("Multiplier", typeof(double));
            activeMeasurements.Columns.Add("Company", typeof(string));
            activeMeasurements.Columns.Add("Longitude", typeof(decimal));
            activeMeasurements.Columns.Add("Latitude", typeof(decimal));
            activeMeasurements.Columns.Add("Description", typeof(string));
            activeMeasurements.Columns.Add("UpdatedOn", typeof(DateTime));

            IEnumerable <DataRow> deviceDetail      = metadata.Tables["DeviceDetail"].Rows.Cast <DataRow>();
            IEnumerable <DataRow> measurementDetail = metadata.Tables["MeasurementDetail"].Rows.Cast <DataRow>();
            IEnumerable <DataRow> phasorDetail      = metadata.Tables["PhasorDetail"].Rows.Cast <DataRow>();
            MeasurementKey        key;

            measurementDetail
            .Where(measurement => MeasurementKey.TryCreateOrUpdate(measurement.ConvertField <Guid>("SignalID"), measurement.ConvertField <string>("ID"), out key))
            .GroupJoin(deviceDetail,
                       measurement => measurement.ConvertField <string>("DeviceAcronym"),
                       device => device.ConvertField <string>("Acronym"),
                       (measurement, devices) => new
            {
                Measurement = measurement,
                Device      = devices.FirstOrDefault()
            }
                       )
            .GroupJoin(phasorDetail,
                       obj => new
            {
                DeviceAcronym     = obj.Device?.ConvertField <string>("Acronym"),
                PhasorSourceIndex = obj.Measurement.ConvertField <int>("PhasorSourceIndex")
            },
                       phasor => new
            {
                DeviceAcronym     = phasor.ConvertField <string>("DeviceAcronym"),
                PhasorSourceIndex = phasor.ConvertField <int>("SourceIndex")
            },
                       (obj, phasors) => new
            {
                Device      = obj.Device,
                Measurement = obj.Measurement,
                Phasor      = phasors.FirstOrDefault()
            }
                       )
            .ToList()
            .ForEach(obj =>
            {
                activeMeasurements.Rows.Add(
                    obj.Device?.ConvertField <Guid>("NodeID") ?? (object)DBNull.Value,
                    obj.Measurement.ConvertField <string>("ID"),
                    obj.Measurement.ConvertField <Guid>("SignalID"),
                    obj.Measurement.ConvertField <string>("PointTag"),
                    DBNull.Value,
                    obj.Measurement.ConvertField <string>("SignalReference"),
                    obj.Measurement.ConvertField <bool>("Internal"),
                    true,
                    obj.Device?.ConvertField <string>("Acronym") ?? (object)DBNull.Value,
                    DBNull.Value,
                    obj.Device?.ConvertField <int?>("FramesPerSecond") ?? (object)DBNull.Value,
                    DBNull.Value,
                    DBNull.Value,
                    obj.Measurement.ConvertField <string>("SignalAcronym"),
                    DBNull.Value,
                    DBNull.Value,
                    obj.Phasor?.ConvertField <string>("Type") ?? (object)DBNull.Value,
                    obj.Phasor?.ConvertField <string>("Phase") ?? (object)DBNull.Value,
                    0,
                    1,
                    obj.Device?.ConvertField <string>("CompanyAcronym") ?? (object)DBNull.Value,
                    obj.Device?.ConvertField <decimal?>("Longitude") ?? (object)DBNull.Value,
                    obj.Device?.ConvertField <decimal?>("Latitude") ?? (object)DBNull.Value,
                    obj.Measurement.ConvertField <string>("Description"),
                    obj.Measurement.ConvertField <DateTime>("UpdatedOn")
                    );
            });

            dataSource.Tables.Add(activeMeasurements);
            m_dataSource = dataSource;
        }