def updatePage()

in src/main/groovy/com/epam/esp/confluence/ConfluenceHelper.groovy [147:206]


    def updatePage(Long pageId, String body) {
        // Get current page version
        String pageObj = null
        HttpEntity pageEntity = null
        try {
            HttpGet getPageRequest = new HttpGet(getContentRestUrl(pageId, 'body.storage version ancestors'.split()))
            HttpResponse getPageResponse = client.execute(getPageRequest)
            pageEntity = getPageResponse.getEntity()

            pageObj = IOUtils.toString(pageEntity.getContent())

            logger.info("Get Page Request returned " + getPageResponse.statusLine.toString())
            if (getPageResponse.statusLine.statusCode != 200) {
                logger.error("GET Page Request returned ${getPageResponse.statusLine}")
                throw new ConfluenceException("Unexpected API response code")
            }
        }
        finally {
            if (pageEntity != null) {
                EntityUtils.consume(pageEntity)
            }
        }

        // Parse response into JSON
        JSONObject page = new JSONObject(pageObj)

        // Update page
        // The updated value must be Confluence Storage Format (https://confluence.atlassian.com/display/DOC/Confluence+Storage+Format), NOT HTML.
        page.getJSONObject("body").getJSONObject("storage").put("value", body)

        int currentVersion = page.getJSONObject("version").getInt("number")
        page.getJSONObject("version").put("number", currentVersion + 1)

        // Send update request
        HttpEntity putPageEntity = null

        try {
            HttpPut putPageRequest = new HttpPut(getContentRestUrl(pageId, new String[0]))
            StringEntity entity = new StringEntity(page.toString(), ContentType.APPLICATION_JSON)
            putPageRequest.setEntity(entity)

            HttpResponse putPageResponse = client.execute(putPageRequest)
            putPageEntity = putPageResponse.getEntity()

            logger.info("Put Page Request returned ${putPageResponse.statusLine}")
            pageObj = IOUtils.toString(putPageEntity.getContent())
            page = new JSONObject(pageObj)
            def url = page.getJSONObject('_links').getString('base') + page.getJSONObject('_links').getString('tinyui')
            logger.info("page URL: $url")


            if (putPageResponse.statusLine.statusCode != 200) {
                logger.error("Put Page Request returned ${putPageResponse.statusLine}")
                throw new ConfluenceException("Unexpected API response code")
            }
        }
        finally {
            EntityUtils.consume(putPageEntity)
        }
    }