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