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); }
/// <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)); }
/// <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); }
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); }); }
/// <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); }
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]); }); }