blob: 94e73e9352109daf8d553985a89a2629382d228a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.update.internal.core;
import java.io.*;
import java.util.HashMap;
import java.util.Properties;
import org.eclipse.update.configurator.*;
import org.eclipse.update.core.*;
/**
* Keeps track of all the features and plugins installed by Update mgr
* so they can be uninstalled later.
* The info is persisted in the .config/registry file and each entry has a key=key where
* for feature this key is feature_<id>_<version> and for plugins
* key is plugin_<id>_<version>. Normally, getVersionedIdentifier() will
* return <id>_<version>. Eg: feature_org.eclipse.platform_3.0.0
*
*/
public class InstallRegistry extends Properties {
private static final long serialVersionUID = 1L;
private File file = null;
private final static String REGISTRY = "registry"; //$NON-NLS-1$
private static InstallRegistry instance;
// plugins installed in this eclipse session
private HashMap justInstalledPlugins = new HashMap();
/**
* Creates empty Properties.
*/
private InstallRegistry() {
super();
String configFile =
ConfiguratorUtils
.getCurrentPlatformConfiguration()
.getConfigurationLocation()
.getFile();
file = new File(configFile);
file = file.getParentFile();
file = new File(file, REGISTRY);
restore();
}
/**
* Singleton
*/
public static InstallRegistry getInstance() {
if (instance == null)
instance = new InstallRegistry();
return instance;
}
/**
* Restores contents of the Properties from a file.
* @return true if persistant data was read in
*/
public boolean restore() {
InputStream in = null;
boolean loaded = false;
clear();
// Test if we have a contribution file to start with
// If this is a clean start, then we will not have a
// contribution file. return false.
if (!file.exists())
return loaded;
try {
in = new FileInputStream(file);
super.load(in);
loaded = true;
} catch (IOException e) {
UpdateCore.log(e);
} finally {
if (in != null)
try {
in.close();
} catch (IOException e) {
}
}
return loaded;
}
/**
* Saves contents of the table to a file.
* @return true if operation was successful
*/
public synchronized boolean save() {
OutputStream out = null;
boolean ret = false;
try {
out = new FileOutputStream(file);
super.store(out, "This is a generated file; do not edit."); //$NON-NLS-1$
ret = true;
} catch (IOException e) {
UpdateCore.log(e);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
}
}
return ret;
}
/**
* Registers an installed feature so it can be uninstalled later.
* @param feature feature to register.
*/
public static synchronized void registerFeature(IFeature feature) {
String name = "feature_"+feature.getVersionedIdentifier(); //$NON-NLS-1$
if (InstallRegistry.getInstance().get(name) == null) {
InstallRegistry.getInstance().put(name, name);
// we save after each registration
InstallRegistry.getInstance().save();
}
}
/**
* Registers an installed feature so it can be uninstalled later.
* @param pluginEntry plugin to register.
*/
public static synchronized void registerPlugin(IPluginEntry pluginEntry) {
String name = "plugin_"+pluginEntry.getVersionedIdentifier(); //$NON-NLS-1$
if (InstallRegistry.getInstance().get(name) == null) {
InstallRegistry.getInstance().put(name, name);
// we save after each registration
InstallRegistry.getInstance().save();
}
// add plugin to the list of just installed plugins .
InstallRegistry.getInstance().justInstalledPlugins.put(name,name);
}
/**
* Removes specified feature from registry
*
*/
public static synchronized void unregisterFeature(IFeature feature) {
String name = "feature_"+feature.getVersionedIdentifier(); //$NON-NLS-1$
InstallRegistry.getInstance().remove(name);
}
/**
* Removes specified plugin from registry
*
*/
public static synchronized void unregisterPlugin(IPluginEntry pluginEntry) {
String name = "plugin_"+pluginEntry.getVersionedIdentifier(); //$NON-NLS-1$
InstallRegistry.getInstance().remove(name);
// remove the plugin from the list of just installed plugins (if needed).
InstallRegistry.getInstance().justInstalledPlugins.remove(name);
}
/**
* Returns true if the plugin was installed during this eclipse session
* @param pluginEntry
* @return
*/
public boolean isPluginJustInstalled(IPluginEntry pluginEntry) {
String name = "plugin_"+pluginEntry.getVersionedIdentifier(); //$NON-NLS-1$
return InstallRegistry.getInstance().justInstalledPlugins.get(name) != null;
}
/**
* This method is only needed for the update JUnit tests.
*
*/
public static void cleanup() {
InstallRegistry.getInstance().justInstalledPlugins.clear();
}
}