@Override
    public JFormCollection load() {
        if (loaded) return this;

        String body = null;
        try {
            body = JHttpClientUtil.postText(
                    context.getUrl() + JHttpClientUtil.Forms.URL,
                    JHttpClientUtil.Forms.GetFormCollection.replace("{listName}", list.getId().toString()),
                    JHttpClientClient.getWebserviceSopa()
            );
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }

        Document document;
        try {
            document = DocumentBuilderFactory
                    .newInstance()
                    .newDocumentBuilder()
                    .parse(new ByteArrayInputStream(body.getBytes()));
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }

        NodeList nodes = document.getElementsByTagName("Form");
        for (int i = 0; i < nodes.getLength(); i++) {
            Element node = (Element) nodes.item(i);
            String url = node.getAttribute("Url");

            if (url == null) continue;
            JForm form = getFormByUrl(url);
            if (form == null) {
                form = new JForm(context, web, list);
                form.putAttributes(node.getAttributes());
                add(form);
            } else {
                form.putAttributes(node.getAttributes());
            }
        }

        // Find default
        for (JForm form : forms) {
            if (!"DisplayForm".equalsIgnoreCase(form.getType())) continue;
            if (form.load().isDefault()) break;
        }

        loaded = true;
        return this;
    }