/** * 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); } }
/** * 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; }