kind-of update of taverna-plugins-gui but this should not be used, as taverna-plugin-manager is the replacement
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/commit/4c5c6a82 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/tree/4c5c6a82 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/diff/4c5c6a82 Branch: refs/heads/master Commit: 4c5c6a827bf5fbec6ee93e6f3b4fe2aae16c70ca Parents: 9a62222 Author: Stian Soiland-Reyes <[email protected]> Authored: Mon Oct 24 11:05:29 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Mon Oct 24 11:05:29 2016 +0100 ---------------------------------------------------------------------- pom.xml | 8 ++- .../raven/plugins/ui/CheckForUpdatesDialog.java | 34 +++++---- .../plugins/ui/CheckForUpdatesStartupHook.java | 76 ++++++++++++-------- .../plugins/ui/PluginListCellRenderer.java | 9 +-- .../raven/plugins/ui/PluginListModel.java | 5 +- .../raven/plugins/ui/PluginManagerFrame.java | 5 +- .../raven/plugins/ui/PluginSiteFrame.java | 8 +-- .../raven/plugins/ui/UpdatesAvailableIcon.java | 3 +- 8 files changed, 82 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4c5c6a82/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 68521f3..98e8e5b 100644 --- a/pom.xml +++ b/pom.xml @@ -75,7 +75,6 @@ <module>taverna-perspective-design</module> <module>taverna-perspective-myexperiment</module> <module>taverna-plugin-manager</module> - <module>taverna-plugins-gui</module> <module>taverna-reference-ui</module> <module>taverna-renderers-api</module> <module>taverna-renderers-exts</module> @@ -108,6 +107,13 @@ <module>taverna-report-impl</module> <module>taverna-report-view</module> --> +<!-- + The below contains outdated code which should be updated +to use Taverna OSGi - it is provided for reference as some +of the functionality (e.g. update on startup chec) should be moved to its +replacement, taverna-plugin-manager + <module>taverna-plugins-gui</module> +--> </modules> <scm> http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4c5c6a82/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesDialog.java ---------------------------------------------------------------------- diff --git a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesDialog.java b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesDialog.java index 36533a1..653436d 100644 --- a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesDialog.java +++ b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesDialog.java @@ -25,19 +25,20 @@ import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.FileTime; +import java.time.Instant; import javax.swing.JButton; -import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.border.EtchedBorder; -import org.apache.taverna.workbench.helper.HelpEnabledDialog; - -import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; +import org.apache.taverna.workbench.helper.HelpEnabledDialog; /** * Dialog that lets user know that there are updates available. @@ -47,15 +48,17 @@ import org.apache.log4j.Logger; public class CheckForUpdatesDialog extends HelpEnabledDialog { private Logger logger = Logger.getLogger(CheckForUpdatesDialog.class); + private Path lastUpdateCheckFile; - public CheckForUpdatesDialog(){ + public CheckForUpdatesDialog(Path lastUpdateCheckFile){ super((Frame)null, "Updates available", true); + this.lastUpdateCheckFile = lastUpdateCheckFile; initComponents(); } // For testing - public static void main (String[] args){ - CheckForUpdatesDialog dialog = new CheckForUpdatesDialog(); + public static void main (String[] args) throws IOException{ + CheckForUpdatesDialog dialog = new CheckForUpdatesDialog(Files.createTempFile("update", ".tmp")); dialog.setVisible(true); } @@ -98,16 +101,17 @@ public class CheckForUpdatesDialog extends HelpEnabledDialog { (dimension.height - abounds.height) / 2); setSize(getPreferredSize()); } - + protected void okPressed() { - try { - FileUtils.touch(CheckForUpdatesStartupHook.lastUpdateCheckFile); - } catch (IOException ioex) { - logger.error("Failed to touch the 'Last update check' file for Taverna updates.", ioex); - } - closeDialog(); + try { + FileTime time = FileTime.from(Instant.now()); + Files.setLastModifiedTime(lastUpdateCheckFile, time); + } catch (IOException ioex) { + logger.error("Failed to update file " + lastUpdateCheckFile, ioex); + } + closeDialog(); } - + private void closeDialog() { setVisible(false); dispose(); http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4c5c6a82/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesStartupHook.java ---------------------------------------------------------------------- diff --git a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesStartupHook.java b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesStartupHook.java index 2cf2289..df7c20e 100644 --- a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesStartupHook.java +++ b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/CheckForUpdatesStartupHook.java @@ -16,8 +16,14 @@ */ package org.apache.taverna.raven.plugins.ui; -import java.io.File; -import java.util.Date; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.FileTime; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.Arrays; import org.apache.log4j.Logger; import org.apache.taverna.configuration.app.ApplicationConfiguration; @@ -25,7 +31,6 @@ import org.apache.taverna.plugin.PluginException; import org.apache.taverna.plugin.PluginManager; import org.apache.taverna.workbench.StartupSPI; import org.osgi.service.event.Event; -import org.osgi.service.event.EventAdmin; import org.osgi.service.event.EventHandler; /** @@ -42,10 +47,9 @@ public class CheckForUpdatesStartupHook implements StartupSPI, EventHandler { this.applicationConfiguration = applicationConfiguration; } - public static final String CHECK_FOR_UPDATES_DIRECTORY_NAME = "updates"; - public static final String LAST_UPDATE_CHECK_FILE_NAME = "last_update_check"; + public static final String UPDATES = "updates"; + public static final String LAST_UPDATE_CHECK = "last_update_check"; - private EventAdmin eventAdmin; private PluginManager pluginManager; private ApplicationConfiguration applicationConfiguration; private Logger logger = Logger.getLogger(CheckForUpdatesStartupHook.class); @@ -55,48 +59,62 @@ public class CheckForUpdatesStartupHook implements StartupSPI, EventHandler { } public boolean startup() { - File lastUpdateCheckFile = new File(getCheckForUpdatesDirectory(), - LAST_UPDATE_CHECK_FILE_NAME); - // Check if more than 2 weeks passed since we checked for updates. - if (lastUpdateCheckFile.exists()) { - long lastModified = lastUpdateCheckFile.lastModified(); - long now = new Date().getTime(); - - if (now - lastModified < 14 * 24 * 3600 * 1000) { // 2 weeks have not passed since we - // last asked - // No need to check for updates yet + Path lastUpdateCheckFile = lastUpdateCheckFile(); + if (Files.exists(lastUpdateCheckFile)) { + FileTime lastChecked; + try { + lastChecked = Files.getLastModifiedTime(lastUpdateCheckFile); + } catch (IOException e) { + // Should be able to check time of an existing file, some kind + // of disk error? + logger.error("Can't check file " + lastUpdateCheckFile, e); + return false; + } + Instant twoWeeksAgo = Instant.now().minus(2, ChronoUnit.WEEKS); + if (lastChecked.toInstant().isAfter(twoWeeksAgo)) { + // No need to check yet return true; } } + + // last-check-file didn't exist, or it's more than two weeks ago + try { pluginManager.checkForUpdates(); + // Content of file doesn't matter.. but we'll write + // today's date even if we don't check the content of the + // file later + String message = Instant.now().toString(); + Files.write(lastUpdateCheckFile, Arrays.asList(message), StandardCharsets.UTF_8); } catch (PluginException e) { logger.error("Can't check for updates", e); return false; + } catch (IOException e) { + logger.error("Can't write to file " + lastUpdateCheckFile, e); + return false; } return true; } - - /** - * Gets the registration directory where info about registration will be saved to. - */ - public File getCheckForUpdatesDirectory() { - - File home = applicationConfiguration.getApplicationHomeDir().toFile(); - - File registrationDirectory = new File(home, CHECK_FOR_UPDATES_DIRECTORY_NAME); - if (!registrationDirectory.exists()) { - registrationDirectory.mkdir(); + private Path lastUpdateCheckFile() { + Path dir = applicationConfiguration.getApplicationHomeDir().resolve(UPDATES); + try { + Files.createDirectories(dir); + } catch (IOException e) { + logger.error("Can't create directories" + dir, e); + // We can't recover from this here, but this would cause another + // error in the calling methods. It's still OK to return + // the non-existing path below: } - return registrationDirectory; + return dir.resolve(LAST_UPDATE_CHECK); } + @Override public void handleEvent(Event event) { // TODO: Handle Plug if (event.getTopic().equals(PluginManager.UPDATES_AVAILABLE)) { - CheckForUpdatesDialog dialog = new CheckForUpdatesDialog(); + CheckForUpdatesDialog dialog = new CheckForUpdatesDialog(lastUpdateCheckFile()); dialog.setVisible(true); } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4c5c6a82/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListCellRenderer.java ---------------------------------------------------------------------- diff --git a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListCellRenderer.java b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListCellRenderer.java index efd13a5..3f7c7ba 100644 --- a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListCellRenderer.java +++ b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListCellRenderer.java @@ -30,12 +30,9 @@ import javax.swing.JPanel; import javax.swing.ListCellRenderer; import javax.swing.border.AbstractBorder; -import uk.org.taverna.commons.plugin.PluginManager; +import org.apache.taverna.plugin.Plugin; +import org.apache.taverna.plugin.PluginManager; -/** - * - * @author David Withers - */ public class PluginListCellRenderer extends JPanel implements ListCellRenderer { private static final long serialVersionUID = 1L; @@ -157,7 +154,7 @@ public class PluginListCellRenderer extends JPanel implements ListCellRenderer { if (value instanceof Plugin) { Plugin plugin = (Plugin) value; name.setText(plugin.getName()); - version.setText(plugin.getVersion()); + version.setText(plugin.getVersion().toString()); description.setText("<html>"+plugin.getDescription()); status2.setText(""); http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4c5c6a82/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListModel.java ---------------------------------------------------------------------- diff --git a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListModel.java b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListModel.java index 9d6c99d..725290e 100644 --- a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListModel.java +++ b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginListModel.java @@ -19,11 +19,8 @@ package org.apache.taverna.raven.plugins.ui; import javax.swing.AbstractListModel; import org.apache.log4j.Logger; +import org.apache.taverna.plugin.PluginManager; -/** - * - * @author David Withers - */ @SuppressWarnings("serial") public class PluginListModel extends AbstractListModel implements PluginManagerListener { private PluginManager pluginManager; http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4c5c6a82/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginManagerFrame.java ---------------------------------------------------------------------- diff --git a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginManagerFrame.java b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginManagerFrame.java index 55ca4a5..00261b8 100644 --- a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginManagerFrame.java +++ b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginManagerFrame.java @@ -37,8 +37,7 @@ import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import uk.org.taverna.commons.plugin.PluginManager; - +import org.apache.taverna.plugin.PluginManager; import org.apache.taverna.workbench.helper.HelpEnabledDialog; /** @@ -70,8 +69,6 @@ public class PluginManagerFrame extends HelpEnabledDialog { private JButton closeButton = null; - private PluginManagerListener managerListener; - /** * This is the default constructor */ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4c5c6a82/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginSiteFrame.java ---------------------------------------------------------------------- diff --git a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginSiteFrame.java b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginSiteFrame.java index 5c9aebf..c7a20cd 100644 --- a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginSiteFrame.java +++ b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/PluginSiteFrame.java @@ -46,15 +46,11 @@ import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.border.EtchedBorder; -import uk.org.taverna.commons.plugin.PluginManager; - +import org.apache.taverna.plugin.PluginManager; +import org.apache.taverna.plugin.PluginSite; import org.apache.taverna.workbench.helper.HelpEnabledDialog; -/** - * - * @author David Withers - */ public class PluginSiteFrame extends HelpEnabledDialog { private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/4c5c6a82/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/UpdatesAvailableIcon.java ---------------------------------------------------------------------- diff --git a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/UpdatesAvailableIcon.java b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/UpdatesAvailableIcon.java index f083d84..59289d2 100644 --- a/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/UpdatesAvailableIcon.java +++ b/taverna-plugins-gui/src/main/java/org/apache/taverna/raven/plugins/ui/UpdatesAvailableIcon.java @@ -29,6 +29,7 @@ import javax.swing.SwingUtilities; import org.apache.log4j.Logger; +import org.osgi.service.event.EventHandler; /** * A JLabel that periodically checks for updates, running on a daemon thread. If @@ -41,7 +42,7 @@ import org.apache.log4j.Logger; */ @SuppressWarnings("serial") -public class UpdatesAvailableIcon extends JLabel implements PluginManagerListener { +public class UpdatesAvailableIcon extends JLabel implements EventHandler { private UpdatePluginsMouseAdaptor updatePluginMouseAdaptor = new UpdatePluginsMouseAdaptor(); private static Logger logger = Logger.getLogger(UpdatesAvailableIcon.class);
