/** * There is a special kind of url: a url that may receive a body (with parameters in it), * or may not. For example, when deleting a datacenter, the user may pass nothing in the body, * or may pass <action><force>true</force></action>. * * RSDL builder will encounter both signatures during construction, and when it encounters the * first is has no knowledge of the second yet, so it must create both linke. * * This method will be called at the end of construction, and search for such duplicate links. * It will unite these pairs into a single link with required=false in the <body>. */ private void uniteDuplicateLinks(Rsdl rsdl) { Map<String, DetailedLink> linksMap = new HashMap<>(); Collection<DetailedLink> linksToDelete = new LinkedList<>(); for (DetailedLink link : rsdl.getLinks().getLinks()) { String linkId = link.getHref() + link.getRel(); if (linksMap.containsKey(linkId)) { //duplicate found, determine which of the two should be deleted DetailedLink linkToDelete = decideWhichToDelete(linksMap.get(linkId), link); if (linkToDelete!=null) { linksToDelete.add(linkToDelete); } } else { linksMap.put(linkId, link); } } for (DetailedLink link : linksToDelete) { rsdl.getLinks().getLinks().remove(link); } }
private DetailedLink addParametersMetadata(DetailedLink link) { String link_name = link.getHref() + "|rel=" + link.getRel(); if (this.parametersMetaData.containsKey(link_name)) { Action action = this.parametersMetaData.get(link_name); if (action.getDescription() != null) { link.setDescription(action.getDescription()); } if (action.getRequest() != null) { addUrlParams(link, action); addHeaderParams(link, action); addBodyParams(link, action); } } return link; }
private Api getApi() { Api api = new Api(); api.setTime(DateMapper.map(new Date(), null)); for (DetailedLink detailedLink : getLinks()) { //add thin link api.getLinks().add(LinkCreator.createLink(detailedLink.getHref(), detailedLink.getRel())); //when required - add extra link for search if (detailedLink.isSetLinkCapabilities() && detailedLink.getLinkCapabilities().isSetSearchable() && detailedLink.getLinkCapabilities().isSearchable()) { api.getLinks().add(LinkCreator.createLink(detailedLink.getHref(), detailedLink.getRel(), detailedLink.getRequest().getUrl().getParametersSets())); } //add special links SpecialObjects specialObjects = new SpecialObjects(); specialObjects.setBlankTemplate(createBlankTemplate()); specialObjects.setRootTag(createRootTag()); api.setSpecialObjects(specialObjects); } return api; }
private Api getGlusterApi() { Api api = new Api(); api.setTime(DateMapper.map(new Date(), null)); for (DetailedLink detailedLink : getGlusterLinks()) { // add thin link api.getLinks().add(LinkCreator.createLink(detailedLink.getHref(), detailedLink.getRel())); // when required - add extra link for search if (detailedLink.isSetLinkCapabilities() && detailedLink.getLinkCapabilities().isSetSearchable() && detailedLink.getLinkCapabilities().isSearchable()) { api.getLinks().add(LinkCreator.createLink(detailedLink.getHref(), detailedLink.getRel(), detailedLink.getRequest().getUrl().getParametersSets())); } // add special links SpecialObjects specialObjects = new SpecialObjects(); specialObjects.setRootTag(createRootTag()); api.setSpecialObjects(specialObjects); } return api; }