private void loadAvailablePluginsInfo() {
        Document xmlResponse;
        File file = new File(JiveGlobals.getHomePath() + File.separator + "conf",
                "available-plugins.xml");
        if (!file.exists()) {
            return;
        }
        // Check read privs.
        if (!file.canRead()) {
            Log.warn("Cannot retrieve available plugins. File must be readable: " + file.getName());
            return;
        }
        try {
            xmlResponse = SAXReaderUtil.readDocument(file);
        } catch (Exception e) {
            Log.error("Error reading available-plugins.xml", e);
            if (e instanceof InterruptedException) {
                Thread.currentThread().interrupt();
            }
            return;
        }

        // Parse info and recreate available plugins
        Iterator<Element> it = xmlResponse.getRootElement().elementIterator("plugin");
        while (it.hasNext()) {
            Element plugin = it.next();
            final AvailablePlugin instance = AvailablePlugin.getInstance( plugin );
            // Add plugin to the list of available plugins at js.org
            availablePlugins.put(instance.getName(), instance);
        }
    }
Loads list of available plugins and latest available server version from
conf/available-plugins.xml and conf/server-update.xml respectively.
xmppserver/src/main/java/org/jivesoftware/openfire/update/UpdateManager.java