public static ApiRegions parseApiRegions()

in src/main/java/org/apache/sling/feature/apiregions/model/io/json/ApiRegionsJSONParser.java [93:158]


    public static ApiRegions parseApiRegions(String jsonRepresentation) {
        requireNonNull(jsonRepresentation, "Impossible to extract api-regions from a null JSON representation");

        ApiRegions apiRegions = new ApiRegions();

        // pointers
        Event event;
        String regionName;
        Collection<String> apis;

        JsonParser parser = Json.createParser(new StringReader(jsonRepresentation));
        if (Event.START_ARRAY != parser.next()) {
            throw new IllegalStateException("Expected 'api-region' element to start with an Array: "
                                             + parser.getLocation());
        }

        while (Event.END_ARRAY != (event = parser.next())) {
            if (Event.START_OBJECT != event) {
                throw new IllegalStateException("Expected 'api-region' data to start with an Object: "
                                                + parser.getLocation());
            }

            regionName = null;
            apis = null;

            while (Event.END_OBJECT != (event = parser.next())) {
                if (Event.KEY_NAME == event) {
                    switch (parser.getString()) {
                        case NAME_KEY:
                            parser.next();
                            regionName = parser.getString();
                            break;

                        case EXPORTS_KEY:
                            // start array
                            parser.next();

                            apis = new ArrayList<>();

                            while (parser.hasNext() && Event.VALUE_STRING == parser.next()) {
                                String api = parser.getString();
                                // skip comments
                                if ('#' != api.charAt(0)) {
                                    apis.add(api);
                                }
                            }

                            break;

                        default:
                            break;
                    }
                }
            }

            if (regionName != null
                    && !regionName.isEmpty()
                    && apis != null
                    && !apis.isEmpty()) {
                ApiRegion apiRegion = apiRegions.addNew(regionName);
                apiRegion.addAll(apis);
            }
        }

        return apiRegions;
    }