/** * Handles POST requests for / * * @param apiEntry the object with form data about entry point. * @param result BindingResult with data about validation of input data. * @return JSP page which will be shown. */ @RequestMapping(value = "/", method = RequestMethod.POST) public String doCheckAPI(ApiEntry apiEntry, BindingResult result) { if (result.hasErrors()) { return JSP; } if (!apiEntry.getUrl().startsWith("http://") && !apiEntry.getUrl().startsWith("https://")) { apiEntry.setUrl("http://" + apiEntry.getUrl()); } if (apiEntry.getUrl().length() < 10) { apiEntry.setMessage("Invalid URL"); return JSP; } createTree(apiEntry); if (HttpValidator.responseOk(apiEntry) && apiEntry.getResourceNodes().getDescendants().size() > 0) { validateTree(apiEntry); generateViewOfQuestionnaires(apiEntry); generateViewOfResources(apiEntry); generateViewOfTree(apiEntry); return JSPOkResponse; } else { return JSPBadResponse; } }
/** * Writes the View of APIs resource tree for specified resourceNode and its descendants. * * @param resourceNode for which the view is written. * @param baseUrl Used for shortening the URI id's of resources and limiting API scope. * @param maxSiblings limits number of children for one resource. * @param sb StringBuilder in which the view is written. */ private void writeResourceNodeTreeView( ResourceNode resourceNode, String baseUrl, int maxSiblings, StringBuilder sb) { String temp; sb.append("<li>"); temp = resourceNode.getCurrentResource().getUrl().replaceFirst(baseUrl, ""); if (temp.length() == 0) { temp = "/"; } sb.append(temp); sb.append( " <a class=\"right\" href=\"#\" onclick=\"toggleVisibility(document.getElementById(\'" + HttpValidator.toSafeId(resourceNode.getCurrentResource().getUrl()) + "\')); return false\" > more info</a> "); if (resourceNode.getViolationMessages().size() > 0) { for (String violationKey : resourceNode.getViolationMessages().keySet()) { String messagesDisp = ""; for (String vilationMessages : resourceNode.getViolationMessages().get(violationKey).getMessages()) { messagesDisp = messagesDisp + ", " + vilationMessages; } if (messagesDisp.startsWith(", ")) { messagesDisp = messagesDisp.substring(2); } sb.append( " <img src=\"../redDot.gif\" alt=\" x \" title=\"" + violationKey + ": " + messagesDisp + "\" height=\"13\" width=\"13\" /> "); } } if (resourceNode.getNonViolationMessages().size() > 0) { for (String violationKey : resourceNode.getNonViolationMessages().keySet()) { String messagesDisp = ""; for (String vilationMessages : resourceNode.getNonViolationMessages().get(violationKey).getMessages()) { messagesDisp = messagesDisp + ", " + vilationMessages; } if (messagesDisp.startsWith(", ")) { messagesDisp = messagesDisp.substring(2); } sb.append( " <img class=\"right\" src=\"../orangeDot.gif\" alt=\" ? \" title=\"" + violationKey + ": " + messagesDisp + "\" height=\"13\" width=\"13\" /> "); } } if (resourceNode.getDescendants().size() > 0) { sb.append("\n<ul>\n"); try { for (ResourceNode rs : resourceNode.getDescendants().subList(0, maxSiblings)) { writeResourceNodeTreeView(rs, baseUrl, maxSiblings, sb); } int overSize = resourceNode.getDescendants().size() - maxSiblings; if (overSize > 0) { sb.append("<li>...and " + overSize + " more.</li>"); } } catch (java.lang.IndexOutOfBoundsException e) { for (ResourceNode rs : resourceNode.getDescendants()) { writeResourceNodeTreeView(rs, baseUrl, maxSiblings, sb); } } sb.append("</ul>\n"); } sb.append("</li>"); sb.append("\n"); }