コード例 #1
0
        private void LoadWellboreFolders(ResourceViewModel parent, string uri)
        {
            var etpUri = new EtpUri(uri);

            DataObjects
            .Select(x => ToResourceViewModel(etpUri.Append(x), x, LoadWellboreObjects))
            .ForEach(parent.Children.Add);
        }
コード例 #2
0
        /// <summary>
        /// Gets the <see cref="EtpUri"/> for a given <see cref="Energistics.DataAccess.WITSML200.ComponentSchemas.DataObjectReference"/>.
        /// </summary>
        /// <param name="reference">The data object reference.</param>
        /// <returns>An <see cref="EtpUri"/> instance.</returns>
        public static EtpUri GetUri(this Witsml200.ComponentSchemas.DataObjectReference reference)
        {
            var contentType = new EtpContentType(reference.ContentType);

            return(string.IsNullOrWhiteSpace(reference.Uri)
                ? Witsml200.Append(contentType.ObjectType, reference.Uuid)
                : new EtpUri(reference.Uri));
        }
コード例 #3
0
        /// <summary>
        /// Initializes a new instance of <see cref="Resource" /> using the specified parameters.
        /// </summary>
        /// <param name="parentUri">The parent URI.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="folderName">Name of the folder.</param>
        /// <param name="hasChildren">The child count.</param>
        /// <returns>A new <see cref="Resource"/> instance.</returns>
        public static Resource NewFolder(EtpUri parentUri, string objectType, string folderName, int hasChildren = -1)
        {
            var resource = New(
                uuid: Guid.NewGuid().ToString(),
                uri: parentUri.Append(folderName),
                resourceType: ResourceTypes.Folder,
                name: folderName,
                count: hasChildren);

            resource.ContentType = new EtpContentType(resource.ContentType).For(objectType);

            return(resource);
        }
コード例 #4
0
        private void LoadWellboreObjects(ResourceViewModel parent, string uri)
        {
            Runtime.ShowBusy();

            Task.Run(async() =>
            {
                var etpUri = new EtpUri(uri);

                if (ObjectTypes.Log.EqualsIgnoreCase(etpUri.ObjectType))
                {
                    var logFolders = new Dictionary <string, string>
                    {
                        {
                            ObjectFolders.Time,
                            Enum.GetName(typeof(Witsml141ReferenceData.LogIndexType), Witsml141ReferenceData.LogIndexType.datetime)
                        },
                        {
                            ObjectFolders.Depth,
                            Enum.GetName(typeof(Witsml141ReferenceData.LogIndexType), Witsml141ReferenceData.LogIndexType.measureddepth)
                        },
                        {
                            ObjectFolders.All, ObjectFolders.All
                        }
                    };

                    logFolders
                    .Select(x => ToResourceViewModel(etpUri.Append(x.Value), x.Key, LoadLogObjects))
                    .ForEach(parent.Children.Add);
                }
                else
                {
                    var dataObjects = ObjectTypes.IsGrowingDataObject(etpUri.ObjectType)
                        ? Context.GetGrowingObjectsWithStatus(etpUri.ObjectType, etpUri)
                        : Context.GetWellboreObjects(etpUri.ObjectType, etpUri);

                    await LoadDataItems(dataObjects, parent.Children, LoadGrowingObjectChildren, x => x.GetUri(), 0);
                }

                Runtime.ShowBusy(false);
            });
        }
コード例 #5
0
        /// <summary>
        /// Gets the uri
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="other"></param>
        /// <returns></returns>
        public static EtpUri GetResolvedHierarchyUri(this EtpUri uri, EtpUri other)
        {
            var resolvedUri = new EtpUri();

            if (other.IsRootUri)
            {
                return(uri);
            }

            if (!uri.IsRelatedTo(other))
            {
                return(resolvedUri);
            }

            var uriHierarchy   = uri.GetObjectIds().ToList();
            var otherHierarchy = other.GetObjectIds().ToList();

            resolvedUri = uri.GetUriFamily();

            var otherHierarchyMap = otherHierarchy
                                    .ToLookup(x => x.ObjectType, x => x.ObjectId, StringComparer.InvariantCultureIgnoreCase)
                                    .ToDictionary(x => x.Key, x => x.First(), StringComparer.InvariantCultureIgnoreCase);

            uriHierarchy.ForEach(segment =>
            {
                var objectType = segment.ObjectType;
                var objectId   = segment.ObjectId;

                if (string.IsNullOrWhiteSpace(objectId))
                {
                    otherHierarchyMap.TryGetValue(objectType, out objectId);
                }

                resolvedUri.Append(objectType, objectId);
            });

            return(resolvedUri);
        }
コード例 #6
0
        public async Task IChannelStreamingProducer_ChannelData_Returned_For_Valid_ChannelRangeRequest_On_TimeLog()
        {
            await RequestSessionAndAssert();

            var handler           = _client.Handler <IChannelStreamingConsumer>();
            var channelRangeInfos = new List <ChannelRangeInfo>();
            var logUri            = new EtpUri("eml://witsml14/well(804415d0-b5e7-4389-a3c6-cdb790f5485f)/wellbore(d3e7d4bf-0f29-4c2b-974d-4871cf8001fd)/log(e2401b72-550f-4695-ab27-d5b0589bde18)");
            var uris = new List <string>
            {
                logUri.Append("logCurveInfo", "ROP"),
            };

            // Register event handlers
            var onChannelMetadata = HandleMultiPartAsync <ChannelMetadata>(x => handler.OnChannelMetadata += x);
            var onChannelData     = HandleMultiPartAsync <ChannelData>(x => handler.OnChannelData += x, uris.Count);

            // Send Start message
            handler.Start();

            // Send ChannelDescribe message for 1 channel
            var messageId = handler.ChannelDescribe(uris);

            // Wait for ChannelMetadata response
            var argsMetadata = await onChannelMetadata;

            // Verify ChannelMetadata
            var channels = VerifyChannelMetadata(argsMetadata, uris, messageId);

            // Get channels by mnemonic for inspection
            var channelRop = channels.FirstOrDefault(c => c.ChannelName.Equals("ROP"));

            // Request data from Mon, 04 Apr 2016 23:40:04.023 GMT to Mon, 04 Apr 2016 23:40:14.001 GMT
            channelRangeInfos.Add(ToChannelRangeInfo(channelRop, 1459813204023000, 1459813214001000));

            // Send ChannelRangeRequest messages for Message channel
            messageId = handler.ChannelRangeRequest(channelRangeInfos);

            // Wait for all ChannelData responses
            var data = await onChannelData;

            // Check count of data for each channel
            Assert.IsNotNull(data);
            Assert.AreEqual(uris.Count, data.Count);
            Assert.AreEqual(5, data.SelectMany(x => x.Message.Data).Count());

            // Check Correlation IDs
            foreach (var arg in data)
            {
                VerifyCorrelationId(arg, messageId);
            }

            // Check channel data is in index order, and
            //... check channel data is within requested range
            VerifyChannelData(channelRangeInfos, data);

            // Check that the index values have the correct milliseconds
            var logData             = data.SelectMany(x => x.Message.Data).ToList();
            var expectedIndexValues = new[]
            {
                new DateTimeOffset(2016, 4, 4, 18, 40, 05, 999, new TimeSpan(-5, 0, 0)),
                new DateTimeOffset(2016, 4, 4, 18, 40, 07, 43, new TimeSpan(-5, 0, 0)),
                new DateTimeOffset(2016, 4, 4, 18, 40, 11, 172, new TimeSpan(-5, 0, 0)),
                new DateTimeOffset(2016, 4, 4, 18, 40, 13, 890, new TimeSpan(-5, 0, 0)),
                new DateTimeOffset(2016, 4, 4, 18, 40, 14, 1, new TimeSpan(-5, 0, 0))
            };

            logData.ForEach((x, i) =>
            {
                Assert.AreEqual(expectedIndexValues[i].ToUnixTimeMicroseconds(), x.Indexes[0]);
            });
        }