예제 #1
0
    /**
     * ct.
     *
     * @param pluginClass
     * @param backupVersion Version aus dem Backup
     */
    private Plugin(String pluginClass, Version backupVersion) {
      this.pluginClass = pluginClass;
      this.backupVersion = backupVersion;

      this.name = this.pluginClass;
      this.noBackup = this.backupVersion == null;

      // Checken, ob das Plugin installiert ist
      de.willuhn.jameica.plugin.Plugin plugin =
          Application.getPluginLoader().getPlugin(this.pluginClass);

      this.notInstalled = plugin == null;

      if (plugin != null) {
        // Plugin ist installiert. Versionsnummer checken
        Manifest mf = plugin.getManifest();
        this.name = mf.getName();
        this.currentVersion = mf.getVersion();

        // Wir maengeln einen Versionskonflikt nur an, wenn die Version aus dem Backup
        // aktueller als die installierte ist. Sollte das Backup aelter sein, findet
        // ja ein automatisches Upgrade statt
        this.versionMissmatch =
            this.backupVersion != null && (this.backupVersion.compareTo(this.currentVersion) > 0);
      }
    }
예제 #2
0
  /**
   * Erzeugt die Liste der Datensaetze.
   *
   * @param file
   * @return Liste der Backup-Files.
   */
  private List<Plugin> init(BackupFile file) {
    // Wir suchen auch noch den Plugins, die derzeit installiert
    // aber nicht im Backup enthalten sind. Deren Daten wuerden
    // nach dem Restore verloren gehen
    List<Manifest> l = Application.getPluginLoader().getInstalledManifests();
    Hashtable<String, Manifest> installed = new Hashtable<String, Manifest>();
    for (int i = 0; i < l.size(); ++i) {
      Manifest mf = l.get(i);
      installed.put(mf.getPluginClass(), mf);
    }

    Properties props = file.getProperties();
    Enumeration keys = props.keys();
    ArrayList<Plugin> list = new ArrayList<Plugin>();
    while (keys.hasMoreElements()) {
      String pc = (String) keys.nextElement();
      if (pc != null && pc.equals("jameica")) {
        // Das ist der Versionseintrag von Jameica selbst. Ignorieren wir.
        // Das "if" koennten wir uns rein vom Programmablauf zwar auch
        // sparen - es vermeidet aber die Warnmeldung im Log im folgenden "if"
        continue;
      }
      if (pc == null || !pc.endsWith(".version")) {
        Logger.warn(
            "invalid plugin " + pc + " defined. backup: " + file.getFile().getAbsolutePath());
        continue;
      }
      String version = props.getProperty(pc);
      if (version == null || version.length() == 0) {
        Logger.warn(
            "plugin "
                + pc
                + " defined, but no version number. backup: "
                + file.getFile().getAbsolutePath());
        continue;
      }
      pc = pc.substring(0, pc.lastIndexOf(".version"));

      // Ist im Backup enthalten. Aus der "installed"-Liste streichen
      installed.remove(pc);
      list.add(new Plugin(pc, new Version(version)));
    }

    // Jetzt checken wir, ob in der "installed"-Liste noch
    // was drin steht. Das sind die, zu denen kein Backup
    // vorliegt
    Enumeration<String> missing = installed.keys();
    while (missing.hasMoreElements()) {
      String pc = (String) missing.nextElement();
      list.add(new Plugin(pc, null));
    }
    return list;
  }