/// <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)));
            }
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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);
            }
        }