/// <summary> /// Gets a collection of resources associated to the specified URI. /// </summary> /// <param name="args">The <see cref="ProtocolEventArgs{GetResources, IList}"/> instance containing the event data.</param> public void GetResources(ProtocolEventArgs <GetResources, IList <Resource> > args) { if (EtpUri.IsRoot(args.Message.Uri)) { args.Context.Add(DiscoveryStoreProvider.NewProtocol(EtpUris.Witsml131, "WITSML Store (1.3.1.1)")); return; } var uri = new EtpUri(args.Message.Uri); var parentUri = uri.Parent; // Append query string, if any if (!string.IsNullOrWhiteSpace(uri.Query)) { parentUri = new EtpUri(parentUri + uri.Query); } if (!uri.IsRelatedTo(EtpUris.Witsml131)) { return; } if (uri.IsBaseUri || (string.IsNullOrWhiteSpace(uri.ObjectId) && ObjectTypes.Well.EqualsIgnoreCase(uri.ObjectType))) { _wellDataProvider.GetAll(uri) .ForEach(x => args.Context.Add(ToResource(x))); } else if (string.IsNullOrWhiteSpace(uri.ObjectId) && ObjectTypes.Wellbore.EqualsIgnoreCase(parentUri.ObjectType)) { var objectType = ObjectTypes.PluralToSingle(uri.ObjectType); var dataProvider = _container.Resolve <IEtpDataProvider>(new ObjectName(objectType, uri.Version)); dataProvider .GetAll(parentUri) .Cast <IWellboreObject>() .ForEach(x => args.Context.Add(ToResource(x))); } else if (ObjectTypes.Well.EqualsIgnoreCase(uri.ObjectType)) { _wellboreDataProvider.GetAll(uri) .ForEach(x => args.Context.Add(ToResource(x))); } else if (ObjectTypes.Wellbore.EqualsIgnoreCase(uri.ObjectType)) { var wellboreObjectType = typeof(IWellboreObject); Providers .OfType <IWitsmlDataAdapter>() .Where(x => wellboreObjectType.IsAssignableFrom(x.DataObjectType)) .Select(x => ObjectTypes.GetObjectType(x.DataObjectType)) .OrderBy(x => x) .ForEach(x => args.Context.Add(DiscoveryStoreProvider.NewFolder(uri, x, ObjectTypes.SingleToPlural(x, false)))); } else if (ObjectTypes.Log.EqualsIgnoreCase(uri.ObjectType)) { var log = _logDataProvider.Get(uri); log?.LogCurveInfo?.ForEach(x => args.Context.Add(ToResource(log, x))); } }
private void GetResources <T>(IEtpAdapter etpAdapter, string uri, IList <T> resources, out string serverSortOrder) where T : IResource { // Default to Name in IResource serverSortOrder = ObjectTypes.NameProperty; var etpUri = new EtpUri(uri); var parentUri = etpUri.Parent; if (EtpUris.IsRootUri(uri)) { resources.Add(etpAdapter.NewProtocol(EtpUris.Witsml131, "WITSML Store (1.3.1.1)", _wellDataProvider.Count(etpUri))); return; } // Append query string, if any if (!string.IsNullOrWhiteSpace(etpUri.Query)) { parentUri = new EtpUri(parentUri + etpUri.Query); } if (!etpUri.IsRelatedTo(EtpUris.Witsml131)) { return; } if (etpUri.IsBaseUri || (string.IsNullOrWhiteSpace(etpUri.ObjectId) && ObjectTypes.Well.EqualsIgnoreCase(etpUri.ObjectType))) { _wellDataProvider.GetAll(etpUri) .ForEach(x => resources.Add(ToResource(etpAdapter, x))); serverSortOrder = _wellDataProvider.ServerSortOrder; } else if (string.IsNullOrWhiteSpace(etpUri.ObjectId) && ObjectTypes.Wellbore.EqualsIgnoreCase(parentUri.ObjectType)) { var dataProvider = _container.Resolve <IEtpDataProvider>(new ObjectName(etpUri.ObjectType, etpUri.Version)); serverSortOrder = dataProvider.ServerSortOrder; dataProvider .GetAll(parentUri) .Cast <IWellboreObject>() .ForEach(x => resources.Add(ToResource(etpAdapter, x))); } else if (ObjectTypes.Well.EqualsIgnoreCase(etpUri.ObjectType)) { _wellboreDataProvider.GetAll(etpUri) .ForEach(x => resources.Add(ToResource(etpAdapter, x))); serverSortOrder = _wellboreDataProvider.ServerSortOrder; } else if (ObjectTypes.Wellbore.EqualsIgnoreCase(etpUri.ObjectType)) { foreach (var adapter in GetWellboreDataAdapters()) { var type = EtpContentTypes.GetContentType(adapter.DataObjectType); var count = adapter.Count(etpUri); resources.Add(etpAdapter.NewFolder(etpUri, type, type.ObjectType, count)); } } else if (ObjectTypes.Log.EqualsIgnoreCase(etpUri.ObjectType)) { var log = _logDataProvider.Get(etpUri); log?.LogCurveInfo?.ForEach(x => resources.Add(ToResource(etpAdapter, log, x))); serverSortOrder = string.Empty; } }
private void GetResources <T>(IEtpAdapter etpAdapter, string uri, IList <T> resources) where T : IResource { if (EtpUris.IsRootUri(uri)) { resources.Add(etpAdapter.NewProtocol(EtpUris.Witsml131, "WITSML Store (1.3.1.1)")); return; } var etpUri = new EtpUri(uri); var parentUri = etpUri.Parent; // Append query string, if any if (!string.IsNullOrWhiteSpace(etpUri.Query)) { parentUri = new EtpUri(parentUri + etpUri.Query); } if (!etpUri.IsRelatedTo(EtpUris.Witsml131)) { return; } if (etpUri.IsBaseUri || (string.IsNullOrWhiteSpace(etpUri.ObjectId) && ObjectTypes.Well.EqualsIgnoreCase(etpUri.ObjectType))) { _wellDataProvider.GetAll(etpUri) .ForEach(x => resources.Add(ToResource(etpAdapter, x))); } else if (string.IsNullOrWhiteSpace(etpUri.ObjectId) && ObjectTypes.Wellbore.EqualsIgnoreCase(parentUri.ObjectType)) { var dataProvider = _container.Resolve <IEtpDataProvider>(new ObjectName(etpUri.ObjectType, etpUri.Version)); dataProvider .GetAll(parentUri) .Cast <IWellboreObject>() .ForEach(x => resources.Add(ToResource(etpAdapter, x))); } else if (ObjectTypes.Well.EqualsIgnoreCase(etpUri.ObjectType)) { _wellboreDataProvider.GetAll(etpUri) .ForEach(x => resources.Add(ToResource(etpAdapter, x))); } else if (ObjectTypes.Wellbore.EqualsIgnoreCase(etpUri.ObjectType)) { var wellboreObjectType = typeof(IWellboreObject); Providers .OfType <IWitsmlDataAdapter>() .Where(x => wellboreObjectType.IsAssignableFrom(x.DataObjectType)) .Select(x => EtpContentTypes.GetContentType(x.DataObjectType)) .OrderBy(x => x.ObjectType) .ForEach(x => { var hasChildren = ObjectTypes.Log.EqualsIgnoreCase(x.ObjectType) ? _logDataProvider.Count(etpUri) : -1; resources.Add(etpAdapter.NewFolder(etpUri, x, x.ObjectType, hasChildren)); }); } else if (ObjectTypes.Log.EqualsIgnoreCase(etpUri.ObjectType)) { var log = _logDataProvider.Get(etpUri); log?.LogCurveInfo?.ForEach(x => resources.Add(ToResource(etpAdapter, log, x))); } }
/// <summary> /// Gets a collection of resources associated to the specified URI. /// </summary> /// <param name="args">The <see cref="ProtocolEventArgs{GetResources, IList}"/> instance containing the event data.</param> public void GetResources(ProtocolEventArgs <GetResources, IList <Resource> > args) { if (EtpUri.IsRoot(args.Message.Uri)) { args.Context.Add(DiscoveryStoreProvider.NewProtocol(EtpUris.Witsml200, "WITSML Store (2.0)")); return; } var uri = new EtpUri(args.Message.Uri); var parentUri = uri.Parent; // Append query string, if any if (!string.IsNullOrWhiteSpace(uri.Query)) { parentUri = new EtpUri(parentUri + uri.Query); } if (!uri.IsRelatedTo(EtpUris.Witsml200) && !uri.IsRelatedTo(EtpUris.Eml210)) { return; } if (uri.IsBaseUri) { CreateFoldersByObjectType(uri) .ForEach(args.Context.Add); } else if (string.IsNullOrWhiteSpace(uri.ObjectId)) { var wellboreUri = parentUri.Parent; // Append query string, if any if (!string.IsNullOrWhiteSpace(uri.Query)) { wellboreUri = new EtpUri(wellboreUri + uri.Query); } if (ObjectFolders.Logs.EqualsIgnoreCase(uri.ObjectType)) { var logs = _logDataProvider.GetAll(wellboreUri); var timeCount = logs.Count(x => ObjectFolders.Time.EqualsIgnoreCase(x.TimeDepth)); var depthCount = logs.Count(x => ObjectFolders.Depth.EqualsIgnoreCase(x.TimeDepth)); var otherCount = logs.Count - (timeCount + depthCount); args.Context.Add(DiscoveryStoreProvider.NewFolder(uri, ObjectTypes.Log, ObjectFolders.Time, timeCount)); args.Context.Add(DiscoveryStoreProvider.NewFolder(uri, ObjectTypes.Log, ObjectFolders.Depth, depthCount)); if (otherCount > 0) { args.Context.Add(DiscoveryStoreProvider.NewFolder(uri, ObjectTypes.Log, ObjectFolders.Other, otherCount)); } } else if (ObjectFolders.Logs.EqualsIgnoreCase(parentUri.ObjectType) && (ObjectFolders.Time.EqualsIgnoreCase(uri.ObjectType) || ObjectFolders.Depth.EqualsIgnoreCase(uri.ObjectType) || ObjectFolders.Other.EqualsIgnoreCase(uri.ObjectType))) { var logs = _logDataProvider.GetAll(wellboreUri).AsEnumerable(); logs = ObjectFolders.Other.EqualsIgnoreCase(uri.ObjectType) ? logs.Where(x => !ObjectFolders.Time.EqualsIgnoreCase(x.TimeDepth) && !ObjectFolders.Depth.EqualsIgnoreCase(x.TimeDepth)) : logs.Where(x => x.TimeDepth.EqualsIgnoreCase(uri.ObjectType)); logs.ForEach(x => args.Context.Add(ToResource(x))); } else if (ObjectFolders.ChannelSets.EqualsIgnoreCase(uri.ObjectType) && ObjectTypes.Log.EqualsIgnoreCase(parentUri.ObjectType)) { var log = _logDataProvider.Get(parentUri); log?.ChannelSet?.ForEach(x => args.Context.Add(ToResource(x))); } else if (ObjectFolders.Channels.EqualsIgnoreCase(uri.ObjectType) && ObjectTypes.ChannelSet.EqualsIgnoreCase(parentUri.ObjectType)) { var set = _channelSetDataProvider.Get(parentUri); set?.Channel?.ForEach(x => args.Context.Add(ToResource(set, x))); } else { var dataProvider = GetDataProvider(uri.ObjectType); var hasChildren = uri.IsRelatedTo(EtpUris.Eml210) ? 0 : -1; dataProvider .GetAll(parentUri) .Cast <AbstractObject>() .ForEach(x => args.Context.Add(ToResource(x, hasChildren))); } } else if (ObjectTypes.Log.EqualsIgnoreCase(uri.ObjectType)) { var log = _logDataProvider.Get(uri); var hasChildren = log?.ChannelSet?.Count ?? 0; CreateFoldersByObjectType(uri, "Log", ObjectTypes.ChannelSet, hasChildren) .ForEach(args.Context.Add); } else if (ObjectTypes.ChannelSet.EqualsIgnoreCase(uri.ObjectType)) { var set = _channelSetDataProvider.Get(uri); var hasChildren = set?.Channel?.Count ?? 0; CreateFoldersByObjectType(uri, "ChannelSet", ObjectTypes.Channel, hasChildren) .ForEach(args.Context.Add); } else { var propertyName = ObjectTypes.PluralToSingle(uri.ObjectType).ToPascalCase(); CreateFoldersByObjectType(uri, propertyName) .ForEach(args.Context.Add); } }