private static void VerifyResourceShape(ResourceShape resourceShape, String type) { Assert.IsNotNull(resourceShape); Uri[] describes = resourceShape.GetDescribes(); Assert.IsNotNull(describes); Assert.IsTrue(describes.Length > 0); if (type != null) { Assert.IsTrue(describes.Contains(new Uri(type))); } OSLC4Net.Core.Model.Property[] properties = resourceShape.GetProperties(); Assert.IsNotNull(properties); Assert.IsTrue(properties.Length > 0); foreach (OSLC4Net.Core.Model.Property property in properties) { String name = property.GetName(); Uri propertyDefinition = property.GetPropertyDefinition(); Assert.IsNotNull(property.GetDescription()); Assert.IsNotNull(name); Assert.IsNotNull(property.GetOccurs()); Assert.IsNotNull(propertyDefinition); Assert.IsNotNull(property.GetTitle()); Assert.IsNotNull(property.GetValueType()); Assert.IsTrue(propertyDefinition.ToString().EndsWith(name), "propertyDefinition [" + propertyDefinition.ToString() + "], name [" + name + "]"); } }
protected void TestResourceShape(String mediaType) { ResourceShape resourceShape = GetResourceShape(mediaType, Constants.TYPE_CHANGE_REQUEST); VerifyResourceShape(resourceShape, Constants.TYPE_CHANGE_REQUEST); }
public ResourceShape GetResourceShape(bool getShape) { ServiceProvider serviceProvider = ServiceProviderController.serviceProvider; ResourceShape shape = ResourceShapeFactory.CreateResourceShape(ServiceProviderController.BaseUri, Constants.PATH_STOCK_QUOTE, Constants.PATH_STOCK_QUOTE_SHAPE, typeof(StockQuote)); return(shape); }
public static ResourceShape LookupRequirementsInstanceShapes(string serviceProviderUrl, string oslcDomain, string oslcResourceType, OslcClient client, string requiredInstanceShape) { HttpResponseMessage response = client.GetResource(serviceProviderUrl, OSLCConstants.CT_RDF); ISet <MediaTypeFormatter> formatters = client.GetFormatters(); ServiceProvider serviceProvider = response.Content.ReadAsAsync <ServiceProvider>(formatters).Result; if (serviceProvider != null) { foreach (Service service in serviceProvider.GetServices()) { Uri domain = service.GetDomain(); if (domain != null && domain.ToString().Equals(oslcDomain)) { CreationFactory [] creationFactories = service.GetCreationFactories(); if (creationFactories != null && creationFactories.Length > 0) { foreach (CreationFactory creationFactory in creationFactories) { foreach (Uri resourceType in creationFactory.GetResourceTypes()) { if (resourceType.ToString() != null && resourceType.ToString().Equals(oslcResourceType)) { Uri[] instanceShapes = creationFactory.GetResourceShapes(); if (instanceShapes != null) { foreach (Uri typeURI in instanceShapes) { response = client.GetResource(typeURI.ToString(), OSLCConstants.CT_RDF); ResourceShape resourceShape = response.Content.ReadAsAsync <ResourceShape>(formatters).Result; string typeTitle = resourceShape.GetTitle(); if ((typeTitle != null) && (string.Compare(typeTitle, requiredInstanceShape, true) == 0)) { return(resourceShape); } } } } } } } } } } throw new ResourceNotFoundException(serviceProviderUrl, "InstanceShapes"); }
/// <summary> /// Login to the RRC server and perform some OSLC actions /// </summary> /// <param name="args"></param> static void Main(string[] args) { log4net.Config.XmlConfigurator.Configure(); CommandLineDictionary cmd = CommandLineDictionary.FromArguments(args); if (!ValidateOptions(cmd)) { logger.Error("Syntax: /url=https://<server>:port/<context>/ /user=<user> /password=<password> /project=\"<project_area>\""); logger.Error("Example: /url=https://exmple.com:9443/rm /user=ADMIN /password=ADMIN /project=\"JKE Banking (Requirements Management)\""); return; } String webContextUrl = cmd["url"]; String user = cmd["user"]; String passwd = cmd["password"]; String projectArea = cmd["project"]; try { //STEP 0: Need to accept all SSL certificates for DotNet Open Auth to be able to do it's OAuth token generation UNLESS //the SSL certificate from CLM is a from a trusted certificate authority. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(OslcClient.AcceptAllServerCertificates); //STEP 1: Initialize a Jazz rootservices helper and indicate we're looking for the RequirementManagement catalog JazzRootServicesHelper helper = new JazzRootServicesHelper(webContextUrl, OSLCConstants.OSLC_RM_V2); //STEP 2: Create a new OSLC OAuth capable client, the parameter of following call should be provided //This is a bit of a hack for readability. It is assuming RRC is at context /rm. Could use a regex or UriBuilder instead. String authUrl = webContextUrl.Replace("/rm", "/jts"); // XXX - should be ReplaceFirst(), if it existed JazzOAuthClient client = helper.InitOAuthClient("123456789", "secret", user, passwd, authUrl); //STEP 3: Get the URL of the OSLC ChangeManagement catalog String catalogUrl = helper.GetCatalogUrl(); //STEP 4: Find the OSLC Service Provider for the project area we want to work with String serviceProviderUrl = client.LookupServiceProviderUrl(catalogUrl, projectArea); //STEP 5: Get the Query Capabilities URL so that we can run some OSLC queries String queryCapability = client.LookupQueryCapability(serviceProviderUrl, OSLCConstants.OSLC_RM_V2, OSLCConstants.RM_REQUIREMENT_TYPE); //STEP 6: Create base requirements //Get the Creation Factory URL for change requests so that we can create one Requirement requirement = new Requirement(); String requirementFactory = client.LookupCreationFactory( serviceProviderUrl, OSLCConstants.OSLC_RM_V2, requirement.GetRdfTypes()[0].ToString()); //Get Feature Requirement Type URL ResourceShape featureInstanceShape = RmUtil.LookupRequirementsInstanceShapes( serviceProviderUrl, OSLCConstants.OSLC_RM_V2, requirement.GetRdfTypes()[0].ToString(), client, "Feature"); Uri rootFolder = null; //Get Collection Type URL RequirementCollection collection = new RequirementCollection(); ResourceShape collectionInstanceShape = RmUtil.LookupRequirementsInstanceShapes( serviceProviderUrl, OSLCConstants.OSLC_RM_V2, collection.GetRdfTypes()[0].ToString(), client, "Personal Collection"); String req01URL = null; String req02URL = null; String req03URL = null; String req04URL = null; String reqcoll01URL = null; String primaryText = null; if ((featureInstanceShape != null) && (requirementFactory != null)) { // Create REQ01 requirement.SetInstanceShape(featureInstanceShape.GetAbout()); requirement.SetTitle("Req01"); // Decorate the PrimaryText primaryText = "My Primary Text"; XElement obj = RmUtil.ConvertStringToHTML(primaryText); requirement.GetExtendedProperties().Add(RmConstants.PROPERTY_PRIMARY_TEXT, obj); requirement.SetDescription("Created By OSLC4Net"); requirement.AddImplementedBy(new Link(new Uri("http://google.com"), "Link in REQ01")); //Create the change request HttpResponseMessage creationResponse = client.CreateResource( requirementFactory, requirement, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML); req01URL = creationResponse.Headers.Location.ToString(); creationResponse.ConsumeContent(); // Create REQ02 requirement = new Requirement(); requirement.SetInstanceShape(featureInstanceShape.GetAbout()); requirement.SetTitle("Req02"); requirement.SetDescription("Created By OSLC4Net"); requirement.AddValidatedBy(new Link(new Uri("http://bancomer.com"), "Link in REQ02")); //Create the change request creationResponse = client.CreateResource( requirementFactory, requirement, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML); req02URL = creationResponse.Headers.Location.ToString(); creationResponse.ConsumeContent(); // Create REQ03 requirement = new Requirement(); requirement.SetInstanceShape(featureInstanceShape.GetAbout()); requirement.SetTitle("Req03"); requirement.SetDescription("Created By OSLC4Net"); requirement.AddValidatedBy(new Link(new Uri("http://outlook.com"), "Link in REQ03")); //Create the change request creationResponse = client.CreateResource( requirementFactory, requirement, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML); req03URL = creationResponse.Headers.Location.ToString(); creationResponse.ConsumeContent(); // Create REQ04 requirement = new Requirement(); requirement.SetInstanceShape(featureInstanceShape.GetAbout()); requirement.SetTitle("Req04"); requirement.SetDescription("Created By OSLC4Net"); //Create the Requirement creationResponse = client.CreateResource( requirementFactory, requirement, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML); req04URL = creationResponse.Headers.Location.ToString(); creationResponse.ConsumeContent(); // Now create a collection // Create REQ04 collection = new RequirementCollection(); collection.AddUses(new Uri(req03URL)); collection.AddUses(new Uri(req04URL)); collection.SetInstanceShape(collectionInstanceShape.GetAbout()); collection.SetTitle("Collection01"); collection.SetDescription("Created By OSLC4Net"); //Create the change request creationResponse = client.CreateResource( requirementFactory, collection, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML); reqcoll01URL = creationResponse.Headers.Location.ToString(); creationResponse.ConsumeContent(); } // Check that everything was properly created if (req01URL == null || req02URL == null || req03URL == null || req04URL == null || reqcoll01URL == null) { throw new Exception("Failed to create an artifact"); } // GET the root folder based on First requirement created HttpResponseMessage getResponse = client.GetResource(req01URL, OslcMediaType.APPLICATION_RDF_XML); requirement = getResponse.Content.ReadAsAsync <Requirement>(client.GetFormatters()).Result; String etag1 = getResponse.Headers.ETag.ToString(); // May not be needed getResponse.ConsumeContent(); //Save the Uri of the root folder in order to used it easily rootFolder = (Uri)requirement.GetExtendedProperties()[RmConstants.PROPERTY_PARENT_FOLDER]; String changedPrimaryText = (String )requirement.GetExtendedProperties()[RmConstants.PROPERTY_PRIMARY_TEXT]; if (changedPrimaryText == null) { // Check with the workaround changedPrimaryText = (String )requirement.GetExtendedProperties()[PROPERTY_PRIMARY_TEXT_WORKAROUND]; } if ((changedPrimaryText != null) && (!changedPrimaryText.Contains(primaryText))) { logger.Error("Error getting primary Text"); } //QUERIES // SCENARIO 01 Do a query for type= Requirements OslcQueryParameters queryParams = new OslcQueryParameters(); queryParams.SetPrefix("rdf=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"); queryParams.SetWhere("rdf:type=<http://open-services.net/ns/rm#Requirement>"); OslcQuery query = new OslcQuery(client, queryCapability, 10, queryParams); OslcQueryResult result = query.Submit(); bool processAsDotNetObjects = false; int resultsSize = result.GetMembersUrls().Length; ProcessPagedQueryResults(result, client, processAsDotNetObjects); Console.WriteLine("\n------------------------------\n"); Console.WriteLine("Number of Results for SCENARIO 01 = " + resultsSize + "\n"); // SCENARIO 02 Do a query for type= Requirements and for it folder container = rootFolder queryParams = new OslcQueryParameters(); queryParams.SetPrefix("nav=<http://com.ibm.rdm/navigation#>,rdf=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"); queryParams.SetWhere("rdf:type=<http://open-services.net/ns/rm#Requirement> and nav:parent=<" + rootFolder + ">"); query = new OslcQuery(client, queryCapability, 10, queryParams); result = query.Submit(); processAsDotNetObjects = false; resultsSize = result.GetMembersUrls().Length; ProcessPagedQueryResults(result, client, processAsDotNetObjects); Console.WriteLine("\n------------------------------\n"); Console.WriteLine("Number of Results for SCENARIO 02 = " + resultsSize + "\n"); // SCENARIO 03 Do a query for title queryParams = new OslcQueryParameters(); queryParams.SetPrefix("dcterms=<http://purl.org/dc/terms/>"); queryParams.SetWhere("dcterms:title=\"Req04\""); query = new OslcQuery(client, queryCapability, 10, queryParams); result = query.Submit(); resultsSize = result.GetMembersUrls().Length; processAsDotNetObjects = false; ProcessPagedQueryResults(result, client, processAsDotNetObjects); Console.WriteLine("\n------------------------------\n"); Console.WriteLine("Number of Results for SCENARIO 03 = " + resultsSize + "\n"); // SCENARIO 04 Do a query for the link that is implemented queryParams = new OslcQueryParameters(); queryParams.SetPrefix("oslc_rm=<http://open-services.net/ns/rm#>"); queryParams.SetWhere("oslc_rm:implementedBy=<http://google.com>"); query = new OslcQuery(client, queryCapability, 10, queryParams); result = query.Submit(); resultsSize = result.GetMembersUrls().Length; processAsDotNetObjects = false; ProcessPagedQueryResults(result, client, processAsDotNetObjects); Console.WriteLine("\n------------------------------\n"); Console.WriteLine("Number of Results for SCENARIO 04 = " + resultsSize + "\n"); // SCENARIO 05 Do a query for the links that is validated queryParams = new OslcQueryParameters(); queryParams.SetPrefix("oslc_rm=<http://open-services.net/ns/rm#>"); queryParams.SetWhere("oslc_rm:validatedBy in [<http://bancomer.com>,<http://outlook.com>]"); query = new OslcQuery(client, queryCapability, 10, queryParams); result = query.Submit(); resultsSize = result.GetMembersUrls().Length; processAsDotNetObjects = false; ProcessPagedQueryResults(result, client, processAsDotNetObjects); Console.WriteLine("\n------------------------------\n"); Console.WriteLine("Number of Results for SCENARIO 05 = " + resultsSize + "\n"); // SCENARIO 06 Do a query for it container folder and for the link that is implemented queryParams = new OslcQueryParameters(); queryParams.SetPrefix("nav=<http://com.ibm.rdm/navigation#>,oslc_rm=<http://open-services.net/ns/rm#>"); queryParams.SetWhere("nav:parent=<" + rootFolder + "> and oslc_rm:validatedBy=<http://bancomer.com>"); query = new OslcQuery(client, queryCapability, 10, queryParams); result = query.Submit(); resultsSize = result.GetMembersUrls().Length; processAsDotNetObjects = false; ProcessPagedQueryResults(result, client, processAsDotNetObjects); Console.WriteLine("\n------------------------------\n"); Console.WriteLine("Number of Results for SCENARIO 06 = " + resultsSize + "\n"); // GET resources from req03 in order edit its values getResponse = client.GetResource(req03URL, OslcMediaType.APPLICATION_RDF_XML); requirement = getResponse.Content.ReadAsAsync <Requirement>(client.GetFormatters()).Result; // Get the eTAG, we need it to update String etag = getResponse.Headers.ETag.ToString(); getResponse.ConsumeContent(); requirement.SetTitle("My new Title"); requirement.AddImplementedBy(new Link(new Uri("http://google.com"), "Link created by an Eclipse Lyo user")); // Update the requirement with the proper etag HttpResponseMessage updateResponse = client.UpdateResource(req03URL, requirement, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML, etag); updateResponse.ConsumeContent(); /*Do a query in order to see if the requirement have changed*/ // SCENARIO 07 Do a query for the new title just changed queryParams = new OslcQueryParameters(); queryParams.SetPrefix("dcterms=<http://purl.org/dc/terms/>"); queryParams.SetWhere("dcterms:title=\"My new Title\""); query = new OslcQuery(client, queryCapability, 10, queryParams); result = query.Submit(); resultsSize = result.GetMembersUrls().Length; processAsDotNetObjects = false; ProcessPagedQueryResults(result, client, processAsDotNetObjects); Console.WriteLine("\n------------------------------\n"); Console.WriteLine("Number of Results for SCENARIO 07 = " + resultsSize + "\n"); // SCENARIO 08 Do a query for implementedBy links queryParams = new OslcQueryParameters(); queryParams.SetPrefix("oslc_rm=<http://open-services.net/ns/rm#>"); queryParams.SetWhere("oslc_rm:implementedBy=<http://google.com>"); query = new OslcQuery(client, queryCapability, 10, queryParams); result = query.Submit(); resultsSize = result.GetMembersUrls().Length; processAsDotNetObjects = false; ProcessPagedQueryResults(result, client, processAsDotNetObjects); Console.WriteLine("\n------------------------------\n"); Console.WriteLine("Number of Results for SCENARIO 08 = " + resultsSize + "\n"); } catch (RootServicesException re) { logger.Error("Unable to access the Jazz rootservices document at: " + webContextUrl + "/rootservices", re); } catch (Exception e) { logger.Error(e.Message, e); } }