/// <summary> /// Register a ServiceProvider /// </summary> /// <param name="serviceProviderToRegister"></param> /// <returns></returns> public Uri registerServiceProvider(ServiceProvider serviceProviderToRegister) { Uri typeServiceProviderURI = new Uri(OslcConstants.TYPE_SERVICE_PROVIDER); Uri oslcUsageDefault = new Uri(OslcConstants.OSLC_USAGE_DEFAULT); ServiceProvider[] serviceProviders; // We have to first get the ServiceProvider for ServiceProviders and then find the CreationFactory for a ServiceProvider // We first try for a ServiceProviderCatalog ServiceProviderCatalog serviceProviderCatalog = getServiceProviderCatalog(); if (serviceProviderCatalog != null) { serviceProviders = serviceProviderCatalog.GetServiceProviders(); } else { // Secondly we try for a ServiceProvider which is acting as a ServiceProvider registry ServiceProvider serviceProvider = GetServiceProvider(); if (serviceProvider != null) { serviceProviders = new ServiceProvider[] { serviceProvider }; } else { throw new OslcCoreRegistrationException(serviceProviderToRegister, (int)HttpStatusCode.NotFound, "ServiceProviderCatalog"); } } if (serviceProviders != null) { CreationFactory firstCreationFactory = null; CreationFactory firstDefaultCreationFactory = null; for (int serviceProviderIndex = 0; ((serviceProviderIndex < serviceProviders.Length) && (firstDefaultCreationFactory == null)); serviceProviderIndex++) { ServiceProvider serviceProvider = serviceProviders[serviceProviderIndex]; Service[] services = serviceProvider.GetServices(); if (services != null) { for (int serviceIndex = 0; ((serviceIndex < services.Length) && (firstDefaultCreationFactory == null)); serviceIndex++) { Service service = services[serviceIndex]; CreationFactory[] creationFactories = service.GetCreationFactories(); if (creationFactories != null) { for (int creationFactoryIndex = 0; ((creationFactoryIndex < creationFactories.Length) && (firstDefaultCreationFactory == null)); creationFactoryIndex++) { CreationFactory creationFactory = creationFactories[creationFactoryIndex]; Uri[] resourceTypes = creationFactory.GetResourceTypes(); if (resourceTypes != null) { for (int resourceTypeIndex = 0; ((resourceTypeIndex < resourceTypes.Length) && (firstDefaultCreationFactory == null)); resourceTypeIndex++) { Uri resourceType = resourceTypes[resourceTypeIndex]; if (typeServiceProviderURI.Equals(resourceType)) { if (firstCreationFactory == null) { firstCreationFactory = creationFactory; } Uri[] usages = creationFactory.GetUsages(); for (int usageIndex = 0; ((usageIndex < usages.Length) && (firstDefaultCreationFactory == null)); usageIndex++) { Uri usage = usages[usageIndex]; if (oslcUsageDefault.Equals(usage)) { firstDefaultCreationFactory = creationFactory; } } } } } } } } } } if (firstCreationFactory != null) { CreationFactory creationFactory = firstDefaultCreationFactory != null ? firstDefaultCreationFactory : firstCreationFactory; Uri creation = creationFactory.GetCreation(); OslcRestClient oslcRestClient = new OslcRestClient(client.GetFormatters(), creation); HttpResponseMessage clientResponse = oslcRestClient.AddOslcResourceReturnClientResponse(serviceProviderToRegister); HttpStatusCode statusCode = clientResponse.StatusCode; if (statusCode != HttpStatusCode.Created) { throw new OslcCoreRegistrationException(serviceProviderToRegister, (int)statusCode, clientResponse.ReasonPhrase); } return(clientResponse.Headers.Location); } } throw new OslcCoreRegistrationException(serviceProviderToRegister, (int)HttpStatusCode.NotFound, "CreationFactory"); }