/** * Generates the XML view of API tree from apiEntry and saves it to it. * * @param apiEntry Informations about tree. */ private void generateViewOfTreeXML(ApiEntry apiEntry) { StringBuilder sb = new StringBuilder(apiEntry.getMessage()); sb.append("<api_tree>\n"); writeResourceNodeTreeViewXML( apiEntry.getResourceNodes(), apiEntry.getBaseUrl(), apiEntry.getMaxSiblings(), sb); sb.append("</api_tree>\n"); apiEntry.setMessage(sb.toString()); }
/** * Generates the View of APIs resource tree. * * @param apiEntry for which the view is generated and stored into. */ private void generateViewOfTree(ApiEntry apiEntry) { StringBuilder sb = new StringBuilder(apiEntry.getMessage()); sb.append("\n<div id=\"apiTree\">"); sb.append("<h4>The API structure:</h4> "); sb.append("<ul class=\"short\">\n"); writeResourceNodeTreeView( apiEntry.getResourceNodes(), apiEntry.getBaseUrl(), apiEntry.getMaxSiblings(), sb); sb.append("</ul>\n</div><p>"); apiEntry.setMessage(sb.toString()); }
/** * Appends XML information about entrypoint into entrypoints message. * * @param apiEntry data about entrypoint. */ private void generateViewOfEntryPointXML(ApiEntry apiEntry) { StringBuilder sb = new StringBuilder(apiEntry.getMessage()); sb.append("<test_definition>"); sb.append("<request>"); sb.append("<API_entry_URL>"); sb.append(apiEntry.getUrl()); sb.append("</API_entry_URL>"); if (apiEntry.getRequestHeaders().size() > 0) { sb.append("<headers>"); for (Header header : apiEntry.getRequestHeaders()) { sb.append("<header>"); sb.append("<key>"); sb.append(header.getHeaderKey()); sb.append("</key>"); sb.append("<value>"); sb.append(header.getHeaderValue()); sb.append("</value>"); sb.append("</header>"); } sb.append("</headers>"); } sb.append("</request>"); sb.append("<limits>"); sb.append("<max_siblings>"); sb.append(apiEntry.getMaxSiblings()); sb.append("</max_siblings>"); sb.append("<base_url>"); sb.append(apiEntry.getBaseUrl()); sb.append("</base_url>"); sb.append("</limits>"); sb.append("</test_definition>"); apiEntry.setMessage(sb.toString()); }
/** * Discovers and crawls in currentResourceNode for aditional resources. * * @param currentResourceNode resource which will be crawled. * @param apiEntry Informations about api entrypoint. * @param discoveredResources Map which holds informations about already crawled resources. * @param toVisit queue used to store discovered resources for aditional crawling. */ private void doCrawle( ResourceNode currentResourceNode, ApiEntry apiEntry, Map<String, ResourceNode> discoveredResources, Queue<ResourceNode> toVisit) { if (discoveredResources.containsKey(currentResourceNode.getCurrentResource().getUrl())) { currentResourceNode.setCurrentResource( (RemoteResource) discoveredResources .get(currentResourceNode.getCurrentResource().getUrl()) .getCurrentResource()); currentResourceNode.setCurrentResourceOptions( (RemoteResource) discoveredResources .get(currentResourceNode.getCurrentResource().getUrl()) .getCurrentResourceOptions()); return; } currentResourceNode.sendOptions(); currentResourceNode.sendRequest(); LinkExtrator links = new LinkExtrator(); if (currentResourceNode.getCurrentResource().getResponseBody() == null) { return; } List<String> urls = UrlWorker.getUrls( currentResourceNode.getCurrentResource().getUrl(), links.grabHTMLLinks(currentResourceNode.getCurrentResource().getResponseBody())); List<String> validUrls = new ArrayList<String>(); for (String url : urls) { if (url.startsWith(apiEntry.getBaseUrl())) { validUrls.add(url); } } if (validUrls.size() > 0) { RemoteResource nextResource; int maxResourcesToLoad = apiEntry.getMaxSiblings(); for (String url : validUrls) { try { nextResource = (RemoteResource) currentResourceNode.getCurrentResource().clone(); nextResource.deletePreviousResponse(); if (apiEntry.getUrl().contains("?") && !url.contains("?")) { String append = currentResourceNode.getCurrentResource().getUrl(); append = currentResourceNode .getCurrentResource() .getUrl() .substring(currentResourceNode.getCurrentResource().getUrl().lastIndexOf('?')); nextResource.setUrl(url + append); } else { nextResource.setUrl(url); } ResourceNode nextResourceNode = new ResourceNode(nextResource); currentResourceNode.getDescendants().add(nextResourceNode); if (--maxResourcesToLoad < 0) { // No more crawling for this resource's childs. } else { toVisit.add(nextResourceNode); } } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } discoveredResources.put(currentResourceNode.getCurrentResource().getUrl(), currentResourceNode); }