public String searchUsages()

in remoting/server/web/web.ui/src/org/netbeans/modules/jackpot30/backend/ui/UI.java [267:341]


    public String searchUsages(@Context UriInfo uriInfo, @QueryParam("path") List<String> paths, @QueryParam("signature") final String signature) throws URISyntaxException, IOException {
        String urlBase = URL_BASE_OVERRIDE != null ? URL_BASE_OVERRIDE : uriInfo.getBaseUri().toString();
        Map<String, Map<?, ?>> segment2Result = new HashMap<String, Map<?, ?>>();

        if (paths == null) {
            Map<String,Map<String, String>> pathsList = list(urlBase);
            paths = new ArrayList<String>(pathsList.keySet());
        }

        for (String path : paths) {
            Map<String, Map<String, Object>> usageFile2Flags = new HashMap<String, Map<String, Object>>();
            
            URI usagesURI = new URI(urlBase + "index/usages/search?path=" + escapeForQuery(path) + "&signatures=" + escapeForQuery(signature));
            List<String> files = new ArrayList<String>(WebUtilities.requestStringArrayResponse(usagesURI));

            for (String file : files) {
                Map<String, Object> flags = usageFile2Flags.get(file);

                if (flags == null) {
                    usageFile2Flags.put(file, flags = new HashMap<String, Object>());
                }

                flags.put("usage", "true");
            }

            if (signature.startsWith("CLASS:") || signature.startsWith("INTERFACE:") || signature.startsWith("ENUM:") || signature.startsWith("ANNOTATION_TYPE:")) {
                final String type = strip(signature, "CLASS:", "INTERFACE:", "ENUM:", "ANNOTATION_TYPE:");
                URI u = new URI(urlBase + "index/implements/search?path=" + escapeForQuery(path) + "&type=" + escapeForQuery(type));
                Map<String, List<Map<String, String>>> data = Pojson.load(HashMap.class, u);
                for (Entry<String, List<Map<String, String>>> relpath2ImplementorsE : data.entrySet()) {
                    for (Map<String, String> implementorData : relpath2ImplementorsE.getValue()) {
                        String file = implementorData.get("file");
                        Map<String, Object> flags = usageFile2Flags.get(file);

                        if (flags == null) {
                            usageFile2Flags.put(file, flags = new HashMap<String, Object>());
                        }

                        List<String> implementors = (List<String>) flags.get("subtypes");

                        if (implementors == null) {
                            flags.put("subtypes", implementors = new ArrayList<String>());
                        }

                        implementors.add(implementorData.get("class"));
                    }
                }
            } else if (signature.startsWith("METHOD:")) {
                URI u = new URI(urlBase + "index/implements/search?path=" + escapeForQuery(path) + "&method=" + escapeForQuery(signature));
                Map<String, List<Map<String, String>>> data = Pojson.load(HashMap.class, u);
                for (Entry<String, List<Map<String, String>>> relpath2ImplementorsE : data.entrySet()) {
                    for (Map<String, String> implementorData : relpath2ImplementorsE.getValue()) {
                        String file = implementorData.get("file");
                        Map<String, Object> flags = usageFile2Flags.get(file);

                        if (flags == null) {
                            usageFile2Flags.put(file, flags = new HashMap<String, Object>());
                        }

                        List<String> overridersParents = (List<String>) flags.get("overridersParents");

                        if (overridersParents == null) {
                            flags.put("overridersParents", overridersParents = new ArrayList<String>());
                        }

                        overridersParents.add(implementorData.get("enclosingFQN"));
                    }
                }
            }
            
            segment2Result.put(path, usageFile2Flags);
        }

        return Pojson.save(segment2Result);
    }