Search code examples
ibm-doorsoslc

Get desired Module and add artifacts in it using OSCL + JAVA


I am new at OSLC + JAVA framework. Currently I am trying to add some artifacts in particular module.

So I need to fetch that module and add new artifact in it.

As a part of POC currently I am able to add base artifact in some folder by setting that folder path as parent.

Is there any resource available to add artifact in particular module ?

It will be really helpful if we get some sample code.


Solution

  • Posting answer here for the OLSC user :

    package csvImport.poc;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import javax.xml.namespace.QName;
    
    import org.apache.http.HttpHeaders;
    import org.apache.http.HttpStatus;
    import org.apache.wink.client.ClientResponse;
    import org.eclipse.lyo.client.exception.RootServicesException;
    import org.eclipse.lyo.client.oslc.OSLCConstants;
    import org.eclipse.lyo.client.oslc.jazz.JazzFormAuthClient;
    import org.eclipse.lyo.client.oslc.jazz.JazzRootServicesHelper;
    import org.eclipse.lyo.client.oslc.resources.OslcQuery;
    import org.eclipse.lyo.client.oslc.resources.OslcQueryParameters;
    import org.eclipse.lyo.client.oslc.resources.OslcQueryResult;
    import org.eclipse.lyo.client.oslc.resources.Requirement;
    import org.eclipse.lyo.client.oslc.resources.RequirementCollection;
    import org.eclipse.lyo.client.oslc.resources.RmUtil;
    import org.eclipse.lyo.oslc4j.core.model.OslcMediaType;
    import org.eclipse.lyo.oslc4j.core.model.ResourceShape;
    
    import net.oauth.OAuthException;
    
    public class OSLCHelper {
    
        String user;
        String pwd;
        String projectArea;
        String serverUrl;
    
        String catalogUrl;
        String serviceProviderUrl;
        String queryCapability;
        String requirementFactory;
    
        private static JazzRootServicesHelper rootServicesHelper = null;
        private static JazzFormAuthClient client = null;
    
        public boolean logIn() throws Exception {
            if (client.login() == HttpStatus.SC_OK) {
                return true;
            }
            return false;
        }
    
        public OSLCHelper(String user, String pwd, String projectArea, String serverUrl) {
            this.user = user;
            this.pwd = pwd;
            this.projectArea = projectArea;
            this.serverUrl = serverUrl;
            try {
                rootServicesHelper = new JazzRootServicesHelper(serverUrl, OSLCConstants.OSLC_RM_V2);
            } catch (RootServicesException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            client = rootServicesHelper.initFormClient(user, pwd);
        }
    
        public void updateURLs() throws Exception {
            // STEP 4: Get the URL of the OSLC ChangeManagement catalog
            catalogUrl = rootServicesHelper.getCatalogUrl();
    
            // STEP 5: Find the OSLC Service Prsovider for the project area we want to work
            // with
            serviceProviderUrl = client.lookupServiceProviderUrl(catalogUrl, projectArea);
    
            // STEP 6: Get the Query Capabilities URL so that we can run some OSLC queries
            queryCapability = client.lookupQueryCapability(serviceProviderUrl, OSLCConstants.OSLC_RM_V2,
                    OSLCConstants.RM_REQUIREMENT_TYPE);
            // STEP 7: Create base requirements
            // Get the Creation Factory URL for change requests so that we can create one
    
            requirementFactory = client.lookupCreationFactory(serviceProviderUrl, OSLCConstants.OSLC_RM_V2,
                    OSLCConstants.RM_REQUIREMENT_TYPE);
        }
    
        public String[] getAllRequirementURLS() {
            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();
            for (String iterable_element : result.getMembersUrls()) {
                System.out.println(iterable_element);
            }
            return result.getMembersUrls();
        }
        public String[] getAllRequirementCollectionsURLS() {
            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#RequirementCollection>");
            OslcQuery query = new OslcQuery(client, queryCapability, 10, queryParams);
            OslcQueryResult result = query.submit();
            for (String iterable_element : result.getMembersUrls()) {
                System.out.println(iterable_element);
            }
            return result.getMembersUrls();
        }
    
        public String getRequirementById(String id) {
            OslcQueryParameters queryParams = new OslcQueryParameters();
            String url = "";
            queryParams.setPrefix("dcterms=<http://purl.org/dc/terms/>");
            queryParams.setWhere("dcterms:identifier="+id);
            OslcQuery query = new OslcQuery(client, queryCapability, 10, queryParams);
            OslcQueryResult result = query.submit();
            String[] membersUrls = result.getMembersUrls();
            if (membersUrls.length>0) {
                url = membersUrls[0];
            }
            return url ;
        }
    
        public String createRequirement(String requirementType, String title, String description) throws Exception {
            // Get Feature Requirement Type URL
            
            serviceProviderUrl = client.lookupServiceProviderUrl(catalogUrl, projectArea);
    
            // STEP 6: Get the Query Capabilities URL so that we can run some OSLC queries
            queryCapability = client.lookupQueryCapability(serviceProviderUrl, OSLCConstants.OSLC_RM_V2,
                    OSLCConstants.RM_REQUIREMENT_TYPE);
            // STEP 7: Create base requirements
            // Get the Creation Factory URL for change requests so that we can create one
    
            requirementFactory = client.lookupCreationFactory(serviceProviderUrl, OSLCConstants.OSLC_RM_V2,
                    OSLCConstants.RM_REQUIREMENT_TYPE);
            
            ResourceShape featureInstanceShape = RmUtil.lookupRequirementsInstanceShapes(serviceProviderUrl,
                    OSLCConstants.OSLC_RM_V2, OSLCConstants.RM_REQUIREMENT_TYPE, client, requirementType);
            Requirement requirement = new Requirement();
            requirement.setInstanceShape(featureInstanceShape.getAbout());
            requirement.setTitle(title);
            requirement.setDescription(description);
            // Create the Requirement
            ClientResponse creationResponse = client.createResource(requirementFactory, requirement,
                    OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML);
            String req04URL = creationResponse.getHeaders().getFirst(HttpHeaders.LOCATION);
            creationResponse.consumeContent();
            return req04URL;
        }
    
        public boolean createRequirementCollection(String requirementType, String title, String description)
                throws Exception {
            // Get Feature Requirement Type URL
            boolean isAdded = true;
    
            ResourceShape collectionInstanceShape = RmUtil.lookupRequirementsInstanceShapes(serviceProviderUrl,
                    OSLCConstants.OSLC_RM_V2, OSLCConstants.RM_REQUIREMENT_COLLECTION_TYPE, client,
                    "Diagnostics Specification");
            RequirementCollection collection = new RequirementCollection();
    //      collection.addUses(new URI(req04URL));
            collection.setInstanceShape(collectionInstanceShape.getAbout());
            collection.setTitle("All DTCs");
            collection.setDescription("Created By EclipseLyo");
            // Create the collection
            ClientResponse creationResponse = client.createResource(requirementFactory, collection,
                    OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML);
            creationResponse.consumeContent();
    
            String reqcoll01URL = creationResponse.getHeaders().getFirst(HttpHeaders.LOCATION);
            creationResponse.consumeContent();
            if (reqcoll01URL != null) {
                isAdded = false;
            }
            return isAdded;
        }
        
        public Requirement updateRequirement(Map<String,Object> dataMap , String url) throws Exception{
            boolean isUpdated=false;
            ClientResponse getResponse = client.getResource(url,OslcMediaType.APPLICATION_RDF_XML);
            Requirement requirement = getResponse.getEntity(Requirement.class);
            // Get the eTAG, we need it to update
            String etag = getResponse.getHeaders().getFirst(OSLCConstants.ETAG);
            getResponse.consumeContent();
            Map<QName, Object> extendedProperties = requirement.getExtendedProperties();
            Map<QName, Object> removeCurrentProperty = new HashMap<QName, Object>(extendedProperties); 
            for (Entry<String, Object> entry : dataMap.entrySet()) {
                String qName = entry.getKey();
                Object value = entry.getValue();
                removeCurrentProperty = removeCurrentProperty(removeCurrentProperty,qName);
                removeCurrentProperty.put(new QName(qName), value);
                requirement.setExtendedProperties(removeCurrentProperty);
            }
            // Update the requirement with the proper etag
            ClientResponse updateResponse = client.updateResource(url,
                    requirement, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML, etag);
            updateResponse.consumeContent();
            if (updateResponse.getStatusCode()==200) {
                isUpdated=true;
            }
            
            return requirement;
        }
        
        private Map<QName, Object> removeCurrentProperty(Map<QName, Object> extendedProperties, String qName) {
            String comapre = qName.substring(qName.lastIndexOf("/") + 1).trim();
            Map<QName, Object> returnMap= new HashMap<QName, Object>(extendedProperties);
            for (Entry<QName, Object> entry : extendedProperties.entrySet()) {
                QName key = entry.getKey();
                if (key.getLocalPart().equalsIgnoreCase(comapre)) {
                    returnMap.remove(key);
                }
                
            }
            return returnMap;
        }
    
        public Requirement getRequirementByUrl(String url) throws Exception {
            ClientResponse getResponse = null;
            Requirement requirement =null;
            if (url!=null) {
                getResponse = client.getResource(url,OslcMediaType.APPLICATION_RDF_XML);
                requirement = getResponse.getEntity(Requirement.class);
            }
            return requirement;
        }
        
        public RequirementCollection getRequirementCollectionByUrl(String url) throws Exception {
            ClientResponse getResponse = null;
            RequirementCollection requirement =null;
            if (url!=null) {
                getResponse = client.getResource(url,OslcMediaType.APPLICATION_RDF_XML);
                requirement = getResponse.getEntity(RequirementCollection.class);
            }
            return requirement;
        }
        
    
    
        public String getRequirementCollectionByTitle(String title) {
            OslcQueryParameters queryParams = new OslcQueryParameters();
            String url = "";
            queryParams.setPrefix("dcterms=<http://purl.org/dc/terms/>");
            queryParams.setWhere("dcterms:title=\""+title+"\"");
            OslcQuery query = new OslcQuery(client, queryCapability, 10, queryParams);
            OslcQueryResult result = query.submit();
            String[] membersUrls = result.getMembersUrls();
            if (membersUrls.length>0) {
                url = membersUrls[0];
            }
            return url ;
        }
        private String getRequirementCollectionByIdentifier(String id) {
            OslcQueryParameters queryParams = new OslcQueryParameters();
            String url = "";
            queryParams.setPrefix("dcterms=<http://purl.org/dc/terms/>");
            queryParams.setWhere("dcterms:identifier="+id);
            OslcQuery query = new OslcQuery(client, queryCapability, 10, queryParams);
            OslcQueryResult result = query.submit();
            String[] membersUrls = result.getMembersUrls();
            if (membersUrls.length>0) {
                url = membersUrls[0];
            }
            return url ;
        }
    
        public void updateSpecificRequirementCollectionWithRequiremtns(List<Requirement> requiremtns, String title) throws Exception {
            String url = getRequirementCollectionByTitle(title);
            ClientResponse getResponse = null;
            RequirementCollection requirement =null;
            if (url!=null) {
                    getResponse = client.getResource(url,OslcMediaType.APPLICATION_RDF_XML);
                String etag = getResponse.getHeaders().getFirst(OSLCConstants.ETAG);
                requirement = getResponse.getEntity(RequirementCollection.class);
                if (requirement!=null) {
                    for (Requirement requirement2 : requiremtns) {
                        requirement.addUses(new  URI(requirement2.getAbout().toString()));
                        break;
                    }
                }
                ClientResponse updateResponse = client.updateResource(requirement.getAbout().toString(),
                        requirement, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML, etag);
                System.out.println("");
            }
        }
        
         
    
    }