/**
   * Forces the action set to be loaded. Plugins and macros should not call this method.
   *
   * @since jEdit 4.2pre1
   */
  public void load() {
    if (loaded) return;

    loaded = true;
    // actions.clear();

    if (uri == null) return;
    try {
      Log.log(Log.DEBUG, this, "Loading actions from " + uri);
      ActionListHandler ah = new ActionListHandler(uri.toString(), this);
      InputStream in = uri.openStream();
      if (in == null) {
        // this happened when calling generateCache() in the context of 'find orphan jars'
        // in org.gjt.sp.jedit.pluginmgr.ManagePanel.FindOrphan.actionPerformed(ActionEvent)
        // because for not loaded plugins, the plugin will not be added to the list of pluginJars
        // so the org.gjt.sp.jedit.proto.jeditresource.PluginResURLConnection will not find the
        // plugin
        // to read the resource from.
        // Better log a small error message than a big stack trace
        Log.log(Log.WARNING, this, "Unable to open: " + uri);
      } else if (XMLUtilities.parseXML(in, ah)) {
        Log.log(Log.ERROR, this, "Unable to parse: " + uri);
      }
    } catch (IOException e) {
      Log.log(Log.ERROR, this, uri, e);
    }
  } // }}}
  /**
   * loads a pluginSet xml file and updates the model to reflect certain checked selections
   *
   * @since jEdit 4.3pre10
   * @author Alan Ezust
   */
  boolean loadPluginSet(String path) {
    pluginSet.clear();
    pluginModel.restoreSelection(new HashSet<String>(), new HashSet<String>());

    VFS vfs = VFSManager.getVFSForPath(path);
    Object session = vfs.createVFSSession(path, InstallPanel.this);
    try {
      InputStream is = vfs._createInputStream(session, path, false, InstallPanel.this);
      XMLUtilities.parseXML(is, new StringMapHandler());
    } catch (Exception e) {
      Log.log(Log.WARNING, this, "Loading Pluginset failed:" + e.getMessage());
      return false;
    }
    pluginModel.update();
    return true;
  } // }}}
 @Override
 public InputSource resolveEntity(String publicId, String systemId) {
   return XMLUtilities.findEntity(systemId, "recent.dtd", getClass());
 }
  // {{{ save() method
  public static void save() {
    if (recentXML == null) return;

    if (recentXML.hasChangedOnDisk()) {
      Log.log(
          Log.WARNING,
          BufferHistory.class,
          recentXML + " changed on disk; will not save recent" + " files");
      return;
    }

    Log.log(Log.MESSAGE, BufferHistory.class, "Saving " + recentXML);

    String lineSep = System.getProperty("line.separator");

    SettingsXML.Saver out = null;

    try {
      out = recentXML.openSaver();
      out.writeXMLDeclaration();

      out.write("<!DOCTYPE RECENT SYSTEM \"recent.dtd\">");
      out.write(lineSep);
      out.write("<RECENT>");
      out.write(lineSep);

      // Make a snapshot to avoid long locking period
      // which may be required by file I/O.
      List<Entry> snapshot = getHistory();

      for (Entry entry : snapshot) {
        out.write("<ENTRY>");
        out.write(lineSep);

        out.write("<PATH>");
        out.write(XMLUtilities.charsToEntities(entry.path, false));
        out.write("</PATH>");
        out.write(lineSep);

        out.write("<CARET>");
        out.write(String.valueOf(entry.caret));
        out.write("</CARET>");
        out.write(lineSep);

        if (entry.selection != null && entry.selection.length() > 0) {
          out.write("<SELECTION>");
          out.write(entry.selection);
          out.write("</SELECTION>");
          out.write(lineSep);
        }

        if (entry.encoding != null) {
          out.write("<ENCODING>");
          out.write(entry.encoding);
          out.write("</ENCODING>");
          out.write(lineSep);
        }

        if (entry.mode != null) {
          out.write("<MODE>");
          out.write(entry.mode);
          out.write("</MODE>");
          out.write(lineSep);
        }

        out.write("</ENTRY>");
        out.write(lineSep);
      }

      out.write("</RECENT>");
      out.write(lineSep);

      out.finish();
    } catch (Exception e) {
      Log.log(Log.ERROR, BufferHistory.class, e);
    } finally {
      IOUtilities.closeQuietly(out);
    }
  } // }}}
 // {{{ resolveEntity() method
 public InputSource resolveEntity(String publicId, String systemId) {
   return XMLUtilities.findEntity(systemId, "mirrors.dtd", PluginOptions.class);
 } // }}}