public Measurement(int entityId, string entityType, bool drawPoint, API api)
        {
            _detailPane = MeasurementDetail.Get();
            GlobeSpotter globeSpotter = GlobeSpotter.Current;

            _measurementList = globeSpotter.MeasurementList;

            _ci                = CultureInfo.InvariantCulture;
            _api               = api;
            _settings          = Settings.Instance;
            EntityId           = entityId;
            DrawPoint          = drawPoint;
            _updateMeasurement = false;
            SetDetailPanePoint(null);

            switch (entityType)
            {
            case "pointMeasurement":
                _geometryType = GeometryType.Point;
                break;

            case "surfaceMeasurement":
                _geometryType = GeometryType.Polygon;
                break;

            case "lineMeasurement":
                _geometryType = GeometryType.Polyline;
                break;

            default:
                _geometryType = GeometryType.Unknown;
                break;
            }
        }
Example #2
0
        private void StatisticSubscriptionMetaDataReceived(object sender, EventArgs <DataSet> e)
        {
            LogStatusMessage("Loading received meta-data...", logToClient: false);

            DataSet dataSet = e.Argument;

            m_deviceDetails.Clear();
            m_measurementDetails.Clear();
            m_phasorDetails.Clear();
            m_schemaVersion.Clear();
            m_powerCalculation.Clear();
            m_statusLights.Clear();

            foreach (DataTable table in dataSet.Tables)
            {
                if (table.TableName == "DeviceDetail")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        DeviceDetail deviceDetail = new DeviceDetail
                        {
                            NodeID              = row.ConvertField <Guid>("NodeID"),
                            UniqueID            = row.ConvertField <Guid>("UniqueID"),
                            OriginalSource      = row.ConvertField <string>("OriginalSource"),
                            IsConcentrator      = row.ConvertField <bool>("IsConcentrator"),
                            Acronym             = row.ConvertField <string>("Acronym"),
                            Name                = row.ConvertField <string>("Name"),
                            AccessID            = row.ConvertField <int>("AccessID"),
                            ParentAcronym       = row.ConvertField <string>("ParentAcronym"),
                            ProtocolName        = row.ConvertField <string>("ProtocolName"),
                            FramesPerSecond     = row.ConvertField <int>("FramesPerSecond"),
                            CompanyAcronym      = row.ConvertField <string>("CompanyAcronym"),
                            VendorAcronym       = row.ConvertField <string>("VendorAcronym"),
                            VendorDeviceName    = row.ConvertField <string>("VendorDeviceName"),
                            Longitude           = row.ConvertField <decimal>("Longitude"),
                            Latitude            = row.ConvertField <decimal>("Latitude"),
                            InterconnectionName = row.ConvertField <string>("InterconnectionName"),
                            ContactList         = row.ConvertField <string>("ContactList"),
                            Enabled             = row.ConvertField <bool>("Enabled"),
                            UpdatedOn           = row.ConvertField <DateTime>("UpdatedOn")
                        };

                        if (row.ConvertField <bool>("Enabled"))
                        {
                            StatusLight statusLight = new StatusLight
                            {
                                DeviceAcronym = row.ConvertField <string>("Acronym"),
                                Timestamp     = DateTime.MinValue,
                                GoodData      = false
                            };

                            m_statusLights.Add(statusLight);
                        }

                        m_deviceDetails.Add(deviceDetail);
                    }
                }
                else if (table.TableName == "MeasurementDetail")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        MeasurementDetail measurementDetail = new MeasurementDetail
                        {
                            DeviceAcronym     = row.ConvertField <string>("DeviceAcronym"),
                            ID                = row.ConvertField <string>("ID"),
                            SignalID          = row.ConvertField <Guid>("SignalID"),
                            PointTag          = row.ConvertField <string>("PointTag"),
                            SignalReference   = row.ConvertField <string>("SignalReference"),
                            SignalAcronym     = row.ConvertField <string>("SignalAcronym"),
                            PhasorSourceIndex = row.ConvertField <int>("PhasorSourceIndex"),
                            Description       = row.ConvertField <string>("Description"),
                            Internal          = row.ConvertField <bool>("Internal"),
                            Enabled           = row.ConvertField <bool>("Enabled"),
                            UpdatedOn         = row.ConvertField <DateTime>("UpdatedOn")
                        };

                        m_measurementDetails.Add(measurementDetail);
                    }
                }
                else if (table.TableName == "PhasorDetail")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        PhasorDetail phasorDetail = new PhasorDetail
                        {
                            DeviceAcronym = row.ConvertField <string>("DeviceAcronym"),
                            Label         = row.ConvertField <string>("Label"),
                            Type          = row.ConvertField <string>("Type"),
                            Phase         = row.ConvertField <string>("Phase"),
                            SourceIndex   = row.ConvertField <int>("SourceIndex"),
                            UpdatedOn     = row.ConvertField <DateTime>("UpdatedOn")
                        };

                        m_phasorDetails.Add(phasorDetail);
                    }
                }
                else if (table.TableName == "SchemaVersion")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        SchemaVersion schemaVersion = new SchemaVersion
                        {
                            VersionNumber = row.ConvertField <int>("VersionNumber")
                        };

                        m_schemaVersion.Add(schemaVersion);
                    }
                }
                else if (table.TableName == "PowerCalculation")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        PowerCalculation powerCalculation = new PowerCalculation()
                        {
                            VoltageAngleID = row.ConvertField <Guid>("VoltageAngleSignalID"),
                            CurrentAngleID = row.ConvertField <Guid>("CurrentAngleSignalID")
                        };

                        m_powerCalculation.Add(powerCalculation);
                    }
                }
            }

            try
            {
                string appData           = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
                string ecaClientDataPath = Path.Combine(appData, "Grid Protection Alliance", "openECAClient");
                string metadataCache     = Path.Combine(ecaClientDataPath, "Metadata.xml");

                Directory.CreateDirectory(ecaClientDataPath);

                if (FilePath.TryGetWriteLock(metadataCache))
                {
                    dataSet.WriteXml(metadataCache, XmlWriteMode.WriteSchema);
                    Program.LogStatus($"Data set serialized with {dataSet.Tables.Count} tables...");
                }
            }
            catch (Exception ex)
            {
                Program.LogException(new InvalidOperationException($"Failed to serialize dataset: {ex.Message}", ex));
            }

            try
            {
                ClientScript?.metaDataReceived();
            }
            catch (NullReferenceException)
            {
                // Client script unavailable for self-created hub instances
            }

            MetadataReceived?.Invoke(this, EventArgs.Empty);
        }
        private void StatisticSubscriptionMetaDataReceived(object sender, EventArgs <DataSet> e)
        {
            LogStatusMessage("Loading received meta-data...", logToClient: false);

            DataSet dataSet = e.Argument;

            m_deviceDetails.Clear();
            m_measurementDetails.Clear();
            m_phasorDetails.Clear();
            m_schemaVersion.Clear();
            m_statusLights.Clear();

            foreach (DataTable table in dataSet.Tables)
            {
                if (table.TableName == "DeviceDetail")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        DeviceDetail deviceDetail = new DeviceDetail
                        {
                            NodeID              = row.ConvertField <Guid>("NodeID"),
                            UniqueID            = row.ConvertField <Guid>("UniqueID"),
                            OriginalSource      = row.ConvertField <string>("OriginalSource"),
                            IsConcentrator      = row.ConvertField <bool>("IsConcentrator"),
                            Acronym             = row.ConvertField <string>("Acronym"),
                            Name                = row.ConvertField <string>("Name"),
                            AccessID            = row.ConvertField <int>("AccessID"),
                            ParentAcronym       = row.ConvertField <string>("ParentAcronym"),
                            ProtocolName        = row.ConvertField <string>("ProtocolName"),
                            FramesPerSecond     = row.ConvertField <int>("FramesPerSecond"),
                            CompanyAcronym      = row.ConvertField <string>("CompanyAcronym"),
                            VendorAcronym       = row.ConvertField <string>("VendorAcronym"),
                            VendorDeviceName    = row.ConvertField <string>("VendorDeviceName"),
                            Longitude           = row.ConvertField <decimal>("Longitude"),
                            Latitude            = row.ConvertField <decimal>("Latitude"),
                            InterconnectionName = row.ConvertField <string>("InterconnectionName"),
                            ContactList         = row.ConvertField <string>("ContactList"),
                            Enabled             = row.ConvertField <bool>("Enabled"),
                            UpdatedOn           = row.ConvertField <DateTime>("UpdatedOn")
                        };

                        if (row.ConvertField <bool>("Enabled"))
                        {
                            StatusLight statusLight = new StatusLight
                            {
                                DeviceAcronym = row.ConvertField <string>("Acronym"),
                                Timestamp     = DateTime.MinValue,
                                GoodData      = false
                            };

                            m_statusLights.Add(statusLight);
                        }

                        m_deviceDetails.Add(deviceDetail);
                    }
                }
                else if (table.TableName == "MeasurementDetail")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        MeasurementDetail measurementDetail = new MeasurementDetail
                        {
                            DeviceAcronym     = row.ConvertField <string>("DeviceAcronym"),
                            ID                = row.ConvertField <string>("ID"),
                            SignalID          = row.ConvertField <Guid>("SignalID"),
                            PointTag          = row.ConvertField <string>("PointTag"),
                            SignalReference   = row.ConvertField <string>("SignalReference"),
                            SignalAcronym     = row.ConvertField <string>("SignalAcronym"),
                            PhasorSourceIndex = row.ConvertField <int>("PhasorSourceIndex"),
                            Description       = row.ConvertField <string>("Description"),
                            Internal          = row.ConvertField <bool>("Internal"),
                            Enabled           = row.ConvertField <bool>("Enabled"),
                            UpdatedOn         = row.ConvertField <DateTime>("UpdatedOn")
                        };

                        m_measurementDetails.Add(measurementDetail);
                    }
                }
                else if (table.TableName == "PhasorDetail")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        PhasorDetail phasorDetail = new PhasorDetail
                        {
                            DeviceAcronym = row.ConvertField <string>("DeviceAcronym"),
                            Label         = row.ConvertField <string>("Label"),
                            Type          = row.ConvertField <string>("Type"),
                            Phase         = row.ConvertField <string>("Phase"),
                            SourceIndex   = row.ConvertField <int>("SourceIndex"),
                            UpdatedOn     = row.ConvertField <DateTime>("UpdatedOn")
                        };

                        m_phasorDetails.Add(phasorDetail);
                    }
                }
                else if (table.TableName == "SchemaVersion")
                {
                    foreach (DataRow row in table.Rows)
                    {
                        SchemaVersion schemaVersion = new SchemaVersion
                        {
                            VersionNumber = row.ConvertField <int>("VersionNumber")
                        };

                        m_schemaVersion.Add(schemaVersion);
                    }
                }
            }

            ClientScript?.metaDataReceived();
        }