SPARK-1351,

Plugins cannot be removed anymore, they can only be deactivated!
on deactivation it will set a deactivated flag in your properties
also added a "Deactivatet Plugins" tab, so you can reactivate them


new locale:
tab.deactivated.plugins = Deactivated plugins

changed locale:
from:
message.prompt.plugin.uninstall = Are you sure you want to uninstall {0}?
to:
message.prompt.plugin.uninstall = Are you sure you want to deactivate {0}?



fixed bug, where timer wouldn't stop running

git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@12466 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Wolf Posdorfer
2011-06-09 08:51:25 +00:00
committed by wolf.posdorfer
parent 7ff34287ee
commit f39666dee9
6 changed files with 138 additions and 18 deletions

View File

@ -59,6 +59,7 @@ import org.jivesoftware.spark.util.StringUtils;
import org.jivesoftware.spark.util.URLFileSystem; import org.jivesoftware.spark.util.URLFileSystem;
import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.settings.JiveInfo; import org.jivesoftware.sparkimpl.settings.JiveInfo;
import org.jivesoftware.sparkimpl.settings.local.SettingsManager;
/** /**
* This manager is responsible for the loading of all Plugins and Workspaces within Spark environment. * This manager is responsible for the loading of all Plugins and Workspaces within Spark environment.
@ -289,11 +290,12 @@ public class PluginManager implements MainWindowListener {
name = plugin1.selectSingleNode("name").getText(); name = plugin1.selectSingleNode("name").getText();
clazz = plugin1.selectSingleNode("class").getText(); clazz = plugin1.selectSingleNode("class").getText();
try { try {
String lower = name.replace(" ","").toLowerCase(); String lower = name.replaceAll("[^0-9a-zA-Z]","").toLowerCase();
// Dont load the plugin if its on the Blacklist // Dont load the plugin if its on the Blacklist
if(_blacklistPlugins.contains(lower) || _blacklistPlugins.contains(clazz)) if(_blacklistPlugins.contains(lower) || _blacklistPlugins.contains(clazz)
|| SettingsManager.getLocalPreferences().getDeactivatedPlugins().contains(name))
{ {
return null; return null;
} }

View File

@ -250,7 +250,8 @@ public class ReceiveMessage extends JPanel {
if (transfer.getAmountWritten() >= request.getFileSize() if (transfer.getAmountWritten() >= request.getFileSize()
|| transfer.getStatus() == FileTransfer.Status.error || transfer.getStatus() == FileTransfer.Status.error
|| transfer.getStatus() == FileTransfer.Status.refused || transfer.getStatus() == FileTransfer.Status.refused
|| transfer.getStatus() == FileTransfer.Status.cancelled) || transfer.getStatus() == FileTransfer.Status.cancelled
|| transfer.getStatus() == FileTransfer.Status.complete)
{ {
this.cancel(); this.cancel();
_endtime = System.currentTimeMillis(); _endtime = System.currentTimeMillis();
@ -277,7 +278,8 @@ public class ReceiveMessage extends JPanel {
if (transfer.getAmountWritten() >= request.getFileSize() if (transfer.getAmountWritten() >= request.getFileSize()
|| transfer.getStatus() == FileTransfer.Status.error || transfer.getStatus() == FileTransfer.Status.error
|| transfer.getStatus() == FileTransfer.Status.refused || transfer.getStatus() == FileTransfer.Status.refused
|| transfer.getStatus() == FileTransfer.Status.cancelled) || transfer.getStatus() == FileTransfer.Status.cancelled
|| transfer.getStatus() == FileTransfer.Status.complete)
{ {
this.cancel(); this.cancel();
} }

View File

@ -26,6 +26,7 @@ import java.awt.GridBagConstraints;
import java.awt.GridBagLayout; import java.awt.GridBagLayout;
import java.awt.Insets; import java.awt.Insets;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.io.File; import java.io.File;
@ -62,7 +63,6 @@ import org.dom4j.DocumentException;
import org.dom4j.Element; import org.dom4j.Element;
import org.dom4j.Node; import org.dom4j.Node;
import org.dom4j.io.SAXReader; import org.dom4j.io.SAXReader;
import org.jivesoftware.Spark;
import org.jivesoftware.resource.Default; import org.jivesoftware.resource.Default;
import org.jivesoftware.resource.Res; import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes; import org.jivesoftware.resource.SparkRes;
@ -78,6 +78,8 @@ import org.jivesoftware.spark.util.SwingWorker;
import org.jivesoftware.spark.util.URLFileSystem; import org.jivesoftware.spark.util.URLFileSystem;
import org.jivesoftware.spark.util.log.Log; import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.settings.JiveInfo; import org.jivesoftware.sparkimpl.settings.JiveInfo;
import org.jivesoftware.sparkimpl.settings.local.LocalPreferences;
import org.jivesoftware.sparkimpl.settings.local.SettingsManager;
import org.jivesoftware.sparkimpl.updater.EasySSLProtocolSocketFactory; import org.jivesoftware.sparkimpl.updater.EasySSLProtocolSocketFactory;
/** /**
@ -96,16 +98,24 @@ public class PluginViewer extends JPanel implements Plugin {
private JProgressBar progressBar; private JProgressBar progressBar;
private JPanel installedPanel; private JPanel installedPanel;
private JPanel availablePanel; private JPanel availablePanel;
private JPanel deactivatedPanel;
private LocalPreferences _prefs;
private List<String> _deactivatedPlugins;
public PluginViewer() { public PluginViewer() {
_prefs = SettingsManager.getLocalPreferences();
_deactivatedPlugins = _prefs.getDeactivatedPlugins();
EventQueue.invokeLater(new Runnable() { EventQueue.invokeLater(new Runnable() {
public void run() { public void run() {
tabbedPane = new JTabbedPane(); tabbedPane = new JTabbedPane();
installedPanel = new JPanel(); installedPanel = new JPanel();
availablePanel = new JPanel(); availablePanel = new JPanel();
deactivatedPanel = new JPanel();
setLayout(new GridBagLayout()); setLayout(new GridBagLayout());
installedPanel.setLayout(new VerticalFlowLayout( installedPanel.setLayout(new VerticalFlowLayout(
@ -115,6 +125,7 @@ public class PluginViewer extends JPanel implements Plugin {
availablePanel.setLayout(new VerticalFlowLayout( availablePanel.setLayout(new VerticalFlowLayout(
VerticalFlowLayout.TOP, 0, 0, true, false)); VerticalFlowLayout.TOP, 0, 0, true, false));
availablePanel.setBackground(Color.white); availablePanel.setBackground(Color.white);
// Add TabbedPane // Add TabbedPane
add(tabbedPane, new GridBagConstraints(0, 1, 2, 1, 1.0, 1.0, add(tabbedPane, new GridBagConstraints(0, 1, 2, 1, 1.0, 1.0,
@ -128,8 +139,9 @@ public class PluginViewer extends JPanel implements Plugin {
tabbedPane.addTab(Res.getString("tab.available.plugins"), tabbedPane.addTab(Res.getString("tab.available.plugins"),
new JScrollPane(availablePanel)); new JScrollPane(availablePanel));
} }
loadInstalledPlugins(); loadInstalledPlugins();
loadDeactivatedPlugins();
tabbedPane.addChangeListener(new ChangeListener() { tabbedPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) { public void stateChanged(ChangeEvent changeEvent) {
@ -154,6 +166,27 @@ public class PluginViewer extends JPanel implements Plugin {
addSparkPlugUIListener(ui); addSparkPlugUIListener(ui);
} }
} }
/**
* Initializes the Deactivated Plugins Tab
*/
private void loadDeactivatedPlugins() {
deactivatedPanel.setLayout(new VerticalFlowLayout(
VerticalFlowLayout.TOP, 0, 0, true, false));
tabbedPane.addTab(Res.getString("tab.deactivated.plugins"), new JScrollPane(deactivatedPanel));
for (final String s : _deactivatedPlugins) {
PublicPlugin plg = new PublicPlugin();
plg.setName(s);
final SparkPlugUI ui = new SparkPlugUI(plg);
ui.useLocalIcon();
deactivatedPanel.add(ui);
addDeactivatedListener(ui);
}
}
public void initialize() { public void initialize() {
@ -180,17 +213,30 @@ public class PluginViewer extends JPanel implements Plugin {
sparkMenu.insert(viewPluginsMenu, 2); sparkMenu.insert(viewPluginsMenu, 2);
} }
private boolean uninstall(PublicPlugin plugin) { private boolean uninstall(final PublicPlugin plugin) {
int ok = JOptionPane.showConfirmDialog(installedPanel, Res.getString("message.prompt.plugin.uninstall", plugin.getName()), Res.getString("title.confirmation"), JOptionPane.YES_NO_OPTION); int ok = JOptionPane.showConfirmDialog(installedPanel, Res.getString("message.prompt.plugin.uninstall", plugin.getName()), Res.getString("title.confirmation"), JOptionPane.YES_NO_OPTION);
if (ok == JOptionPane.YES_OPTION) { if (ok == JOptionPane.YES_OPTION) {
// Delete main jar.
File pluginDir = plugin.getPluginDir();
File pluginJAR = new File(plugin.getPluginDir().getParentFile(), pluginDir.getName() + ".jar");
File mainpluginJar = new File(Spark.getBinDirectory().getParent()+"/plugins/"+pluginJAR.getName());
pluginJAR.delete(); // DOENST DELETE ANYMORE, Plugin will be added to a 'do-not-load-list'
mainpluginJar.delete(); // Delete main jar.
// File pluginDir = plugin.getPluginDir();
// File pluginJAR = new File(plugin.getPluginDir().getParentFile(),
// pluginDir.getName() + ".jar");
// File mainpluginJar = new
// File(Spark.getBinDirectory().getParent()+"/plugins/"+pluginJAR.getName());
// pluginJAR.delete();
// mainpluginJar.delete();
List<String> deact = _prefs.getDeactivatedPlugins();
deact.add(plugin.getName());
_prefs.setDeactivatedPlugins(deact);
_deactivatedPlugins = deact;
final SparkPlugUI ui = new SparkPlugUI(plugin);
deactivatedPanel.add(ui);
addDeactivatedListener(ui);
JOptionPane.showMessageDialog(this, Res.getString("message.restart.spark.changes"), Res.getString("title.reminder"), JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(this, Res.getString("message.restart.spark.changes"), Res.getString("title.reminder"), JOptionPane.INFORMATION_MESSAGE);
PluginManager.getInstance().removePublicPlugin(plugin); PluginManager.getInstance().removePublicPlugin(plugin);
return true; return true;
@ -590,6 +636,40 @@ public class PluginViewer extends JPanel implements Plugin {
} }
}); });
} }
/**
* Adds the MouseClick Listener to the PluginPreview <br>
* Adds the MouseClick Listener to the InstallButton
* @param ui
*/
private void addDeactivatedListener(final SparkPlugUI ui) {
ui.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
for(Component c : deactivatedPanel.getComponents())
{
if (c instanceof SparkPlugUI)
{
((SparkPlugUI)c).setSelected(false);
}
}
ui.setSelected(true);
}
});
ui.getInstallButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deactivatedPanel.remove(ui);
_deactivatedPlugins.remove(ui.getPlugin().getName());
_prefs.setDeactivatedPlugins(_deactivatedPlugins);
deactivatedPanel.repaint();
deactivatedPanel.revalidate();
}
});
}
public void uninstall() { public void uninstall() {
// Do nothing. // Do nothing.

View File

@ -25,8 +25,11 @@ import org.jivesoftware.resource.Default;
import org.jivesoftware.resource.Res; import org.jivesoftware.resource.Res;
import org.jivesoftware.spark.SparkManager; import org.jivesoftware.spark.SparkManager;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.StringTokenizer;
import javax.swing.UIManager; import javax.swing.UIManager;
@ -1071,6 +1074,37 @@ public class LocalPreferences {
} }
return x; return x;
} }
public List<String> getDeactivatedPlugins()
{
String plugs = getString("deactivatedPlugins", "");
ArrayList<String> liste = new ArrayList<String>();
StringTokenizer tokenz = new StringTokenizer(plugs, ",");
while(tokenz.hasMoreTokens())
{
String x = tokenz.nextToken();
liste.add(x);
}
return liste;
}
public void setDeactivatedPlugins(List<String> list) {
// [hallo, hallo, hallo, hallo, hallo]
// =
// hallo,hallo,hallo,hallo,hallo
if (list.size() > 0) {
String liste = list.toString().substring(1,
list.toString().length() - 1);
liste = liste.replace(", ", ",");
setString("deactivatedPlugins", liste);
} else {
setString("deactivatedPlugins", "");
}
}
} }

View File

@ -731,7 +731,7 @@ message.password.private.room.error = Specify password for the private room
message.passwords.no.match = Passwords do not match message.passwords.no.match = Passwords do not match
message.please.join.in.conference = Please join me in a conference message.please.join.in.conference = Please join me in a conference
message.plugins.not.available = Unable to contact the plugin repository message.plugins.not.available = Unable to contact the plugin repository
message.prompt.plugin.uninstall = Are you sure you want to uninstall {0}? message.prompt.plugin.uninstall = Are you sure you want to deactivate {0}?
message.received.file = You have received a file from {0} message.received.file = You have received a file from {0}
message.receiving.file = You are receiving a file from {0} message.receiving.file = You are receiving a file from {0}
message.reconnect.attempting = Attempting... message.reconnect.attempting = Attempting...
@ -855,6 +855,7 @@ tab.contacts = Contacts
tab.general = General tab.general = General
tab.home = Home tab.home = Home
tab.installed.plugins = Installed plugins tab.installed.plugins = Installed plugins
tab.deactivated.plugins = Deactivated plugins
tab.personal = Personal tab.personal = Personal
tab.proxy = Proxy tab.proxy = Proxy
tab.sso = SSO tab.sso = SSO

View File

@ -498,7 +498,7 @@ message.calling = Rufe {0}
message.number.to.call = Bitte eine Nummer eingeben message.number.to.call = Bitte eine Nummer eingeben
message.no.caller.id = Keine Ruf-ID verf<72>gbar. message.no.caller.id = Keine Ruf-ID verf<72>gbar.
message.no.history.found = Es sind keine weiteren Nachrichten verf<72>gbar. message.no.history.found = Es sind keine weiteren Nachrichten verf<72>gbar.
message.prompt.plugin.uninstall = Dieses Plugin {0} wirklich deinstallieren? message.prompt.plugin.uninstall = Dieses Plugin {0} wirklich deaktivieren?
message.restart.spark = Das Programm muss neugestartet werden damit die <20>nderungen aktiviert werden. message.restart.spark = Das Programm muss neugestartet werden damit die <20>nderungen aktiviert werden.
message.loading.please.wait = Lade. Bitte warten... message.loading.please.wait = Lade. Bitte warten...
message.plugins.not.available = Konnte keine Verbindung mit der Pluginliste herstellen. message.plugins.not.available = Konnte keine Verbindung mit der Pluginliste herstellen.
@ -779,6 +779,7 @@ tab.proxy = Proxy
tab.contacts = Kontakte tab.contacts = Kontakte
tab.installed.plugins = Installierte Plugins tab.installed.plugins = Installierte Plugins
tab.available.plugins = Verf<EFBFBD>gbare Plugins tab.available.plugins = Verf<EFBFBD>gbare Plugins
tab.deactivated.plugins = Deaktivierte Plugins
tab.personal = Pers<EFBFBD>nlich tab.personal = Pers<EFBFBD>nlich
tab.business = Gesch<EFBFBD>ftlich tab.business = Gesch<EFBFBD>ftlich
tab.home = Privat tab.home = Privat