コード例 #1
0
        private void OnGetResourcesCore(object sender, ListRequestEventArgs <v11.Protocol.Discovery.GetResources, v11.Datatypes.Object.Resource> args)
        {
            var handler   = (v11.Protocol.Discovery.IDiscoveryStore)sender;
            var resources = Enumerable.Empty <v11.Datatypes.Object.Resource>();

            var uri = new EtpUri(args.Request.Body.Uri);

            if (!uri.IsEtp11)
            {
                args.FinalError = handler.ErrorInfo().InvalidUri(uri);
            }
            else if (uri.IsRootUri && Store.Dataspaces.Count > 1) // List dataspaces
            {
                resources = Store.Dataspaces
                            .Select(d => d.Resource11);
            }
            else if (uri.IsDataspaceUri) // List family versions
            {
                resources = Store.GetFamilies(EtpVersion.v11, uri)
                            .Select(f => f.Resource11);
            }
            else if (uri.IsFolderUri) // List data objects in folder
            {
                // Work around for cross-ML ETP 1.1 URIs:
                var dataType = MockStore.TryGetCorrectedDataObjectType(uri);
                resources = Store.GetObjects(EtpVersion.v11, new MockGraphContext(uri.Parent, dataType))
                            .Select(o => o.Resource11(true));
            }
            else if (uri.IsDataRootUri || uri.IsObjectUri) // List types of data objects available
            {
                resources = Store.GetSupportedTypes(EtpVersion.v11, new MockGraphContext(uri, true, false), true)
                            .Select(st => st.Resource11);
            }
            else
            {
                args.FinalError = handler.ErrorInfo().InvalidUri(uri);
            }

            args.Responses.AddRange(resources);
        }