private void processServerUpdateResponse(String response, boolean notificationsEnabled)
        throws ExecutionException, InterruptedException {
        // Reset last known update information
        serverUpdate = null;
        Element xmlResponse = SAXReaderUtil.readRootElement(response);
        // Parse response and keep info as Update objects
        Element openfire = xmlResponse.element("openfire");
        if (openfire != null) {
            // A new version of openfire was found
            Version latestVersion = new Version(openfire.attributeValue("latest"));
            if (latestVersion.isNewerThan(XMPPServer.getInstance().getServerInfo().getVersion())) {
                URL changelog = null;
                try
                {
                    changelog = new URL( openfire.attributeValue("changelog") );
                }
                catch ( MalformedURLException e )
                {
                    Log.warn( "Unable to parse URL from openfire changelog value '{}'.", openfire.attributeValue("changelog"), e );
                }

                URL url = null;
                try
                {
                    url = new URL( openfire.attributeValue("url") );
                }
                catch ( MalformedURLException e )
                {
                    Log.warn( "Unable to parse URL from openfire download url value '{}'.", openfire.attributeValue("url"), e );
                }
                // Keep information about the available server update
                serverUpdate = new Update("Openfire", latestVersion, String.valueOf(changelog), String.valueOf(url));
            }
        }
        // Check if we need to send notifications to admins
        if (notificationsEnabled && isNotificationEnabled() && serverUpdate != null) {
            XMPPServer.getInstance().sendMessageToAdmins(getNotificationMessage() +
                " " + serverUpdate.getComponentName() +
                " " + serverUpdate.getLatestVersion());
        }
        // Save response in a file for later retrieval
        saveLatestServerInfo();
    }
Returns the plugin update or {@code null} if the plugin is up to date.

@param pluginName     the name of the plugin (as described in the meta-data).
@param currentVersion current version of the plugin that is installed.
@return the plugin update or null if the plugin is up to date.
xmppserver/src/main/java/org/jivesoftware/openfire/update/UpdateManager.java