Ignore:
Timestamp:
2007-08-08T02:59:36+02:00 (17 years ago)
Author:
imi
Message:
  • added update of plugins
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/gui/preferences/PluginPreference.java

    r298 r299  
    1 // License: GPL. Copyright 2007 by Immanuel Scholz and others
     1//License: GPL. Copyright 2007 by Immanuel Scholz and others
    22package org.openstreetmap.josm.gui.preferences;
    33
     
    1414import java.util.Comparator;
    1515import java.util.HashMap;
     16import java.util.HashSet;
    1617import java.util.LinkedList;
    1718import java.util.Map;
     19import java.util.Set;
    1820import java.util.SortedMap;
    1921import java.util.TreeMap;
     
    5052                public String description;
    5153                public String resource;
    52                 public PluginDescription(String name, String description, String resource) {
     54                public String version;
     55                public PluginDescription(String name, String description, String resource, String version) {
    5356                        this.name = name;
    5457                        this.description = description;
    5558                        this.resource = resource;
    56         }
     59                        this.version = version;
     60                }
    5761                public PluginDescription() {
    58         }
    59         }
    60        
     62                }
     63        }
     64
    6165        private Map<PluginDescription, Boolean> pluginMap;
    6266        private Box pluginPanel = Box.createVerticalBox();
     
    7579                        public void actionPerformed(ActionEvent e) {
    7680                                int count = PluginDownloader.downloadDescription();
    77                         if (count > 0)
    78                                 JOptionPane.showMessageDialog(Main.parent,
    79                                                 trn("Downloaded plugin information from {0} site",
    80                                                                 "Downloaded plugin information from {0} sites", count, count));
    81                         else
    82                                 JOptionPane.showMessageDialog(Main.parent, tr("No plugin information found."));
    83                         refreshPluginPanel(gui);
    84             }
     81                                if (count > 0)
     82                                        JOptionPane.showMessageDialog(Main.parent,
     83                                                        trn("Downloaded plugin information from {0} site",
     84                                                                        "Downloaded plugin information from {0} sites", count, count));
     85                                else
     86                                        JOptionPane.showMessageDialog(Main.parent, tr("No plugin information found."));
     87                                refreshPluginPanel(gui);
     88                        }
    8589                });
    8690                plugin.add(morePlugins, GBC.std().insets(0,0,10,0));
    87                
     91
    8892                JButton update = new JButton(tr("Update current"));
    8993                update.addActionListener(new ActionListener(){
    9094                        public void actionPerformed(ActionEvent e) {
    91                                 JOptionPane.showMessageDialog(Main.parent, tr("Not implemented yet."));
    92             }
    93                 });
    94                 //TODO: plugin.add(update, GBC.std().insets(0,0,10,0));
     95                                update();
     96                        }
     97
     98                });
     99                plugin.add(update, GBC.std().insets(0,0,10,0));
    95100
    96101                JButton configureSites = new JButton(tr("Configure Plugin Sites"));
     
    98103                        public void actionPerformed(ActionEvent e) {
    99104                                JOptionPane.showMessageDialog(Main.parent, tr("Not implemented yet."));
    100             }
     105                        }
    101106                });
    102107                //TODO: plugin.add(configureSites, GBC.std());
     
    105110        }
    106111
     112        private void update() {
     113                Set<PluginDescription> toUpdate = new HashSet<PluginDescription>();
     114                StringBuilder toUpdateStr = new StringBuilder();
     115                for (PluginProxy proxy : Main.plugins) {
     116                        PluginDescription description = findDescription(proxy.info.name);
     117                        if (description != null && (description.version == null || description.version.equals("")) ? (proxy.info.version != null && proxy.info.version.equals("")) : !description.version.equals(proxy.info.version)) {
     118                                toUpdate.add(description);
     119                                toUpdateStr.append(description.name+"\n");
     120                        }
     121                }
     122                if (toUpdate.isEmpty()) {
     123                        JOptionPane.showMessageDialog(Main.parent, tr("All installed plugins are up to date."));
     124                        return;
     125                }
     126                int answer = JOptionPane.showConfirmDialog(Main.parent, tr("Update the following plugins:\n\n{0}", toUpdateStr.toString()), tr("Update"), JOptionPane.OK_CANCEL_OPTION);
     127                if (answer != JOptionPane.OK_OPTION)
     128                        return;
     129                PluginDownloader.update(toUpdate);
     130        }
     131
     132        private PluginDescription findDescription(String name) {
     133                for (PluginDescription d : pluginMap.keySet())
     134                        if (d.name.equals(name))
     135                                return d;
     136                return null;
     137        }
     138
    107139        private void refreshPluginPanel(final PreferenceDialog gui) {
    108             Collection<PluginDescription> availablePlugins = getAvailablePlugins();
    109             pluginMap = new HashMap<PluginDescription, Boolean>();
    110             pluginPanel.removeAll();
     140                Collection<PluginDescription> availablePlugins = getAvailablePlugins();
     141                pluginMap = new HashMap<PluginDescription, Boolean>();
     142                pluginPanel.removeAll();
    111143                Collection<String> enabledPlugins = Arrays.asList(Main.pref.get("plugins").split(","));
    112144                for (final PluginDescription plugin : availablePlugins) {
    113145                        boolean enabled = enabledPlugins.contains(plugin.name);
    114                         final JCheckBox pluginCheck = new JCheckBox(plugin.name, enabled);
     146                        final JCheckBox pluginCheck = new JCheckBox(plugin.name+(plugin.version != null && !plugin.version.equals("") ? " Version: "+plugin.version : ""), enabled);
    115147                        pluginPanel.add(pluginCheck);
    116148
     
    130162                }
    131163                plugin.updateUI();
    132     }
     164        }
    133165
    134166        private Collection<PluginDescription> getAvailablePlugins() {
    135167                SortedMap<String, PluginDescription> availablePlugins = new TreeMap<String, PluginDescription>(new Comparator<String>(){
    136168                        public int compare(String o1, String o2) {
    137                     return o1.compareToIgnoreCase(o2);
    138             }
     169                                return o1.compareToIgnoreCase(o2);
     170                        }
    139171                });
    140172                for (String location : PluginInformation.getPluginLocations()) {
     
    148180                                                try {
    149181                                                        PluginInformation info = new PluginInformation(f);
    150                                     availablePlugins.put(info.name, new PluginDescription(info.name, info.description, PluginInformation.getURLString(f.getPath())));
    151                             } catch (PluginException x) {
    152                             }
     182                                                        if (!availablePlugins.containsKey(info.name))
     183                                                                availablePlugins.put(info.name, new PluginDescription(info.name, info.description, PluginInformation.getURLString(f.getPath()), info.version));
     184                                                } catch (PluginException x) {
     185                                                }
    153186                                        } else if (f.getName().matches("^[0-9]+-site.*\\.xml$")) {
    154187                                                try {
    155                                 Uniform<PluginDescription> parser = new Uniform<PluginDescription>(new FileReader(f), "plugin", PluginDescription.class);
    156                                 for (PluginDescription pd : parser)
    157                                         if (!availablePlugins.containsKey(pd.name))
    158                                                 availablePlugins.put(pd.name, pd);
    159                         } catch (Exception e) {
    160                                 e.printStackTrace();
    161                                 JOptionPane.showMessageDialog(Main.parent, tr("Error reading plugin information file: {0}", f.getName()));
    162                         }
     188                                                        Uniform<PluginDescription> parser = new Uniform<PluginDescription>(new FileReader(f), "plugin", PluginDescription.class);
     189                                                        for (PluginDescription pd : parser)
     190                                                                if (!availablePlugins.containsKey(pd.name))
     191                                                                        availablePlugins.put(pd.name, pd);
     192                                                } catch (Exception e) {
     193                                                        e.printStackTrace();
     194                                                        JOptionPane.showMessageDialog(Main.parent, tr("Error reading plugin information file: {0}", f.getName()));
     195                                                }
    163196                                        }
    164197                                }
     
    170203                                                proxy.info.name,
    171204                                                proxy.info.description,
    172                                                 proxy.info.file == null ? null : PluginInformation.getURLString(proxy.info.file.getPath())));
    173             return availablePlugins.values();
    174     }
     205                                                proxy.info.file == null ? null : PluginInformation.getURLString(proxy.info.file.getPath()),
     206                                                                proxy.info.version));
     207                return availablePlugins.values();
     208        }
    175209
    176210        public void ok() {
     
    195229                                        if (!PluginDownloader.downloadPlugin(pd))
    196230                                                pluginMap.put(pd, false);
    197                                                
     231
    198232                }
    199233
     
    204238                if (plugins.endsWith(","))
    205239                        plugins = plugins.substring(0, plugins.length()-1);
    206                
     240
    207241                String oldPlugins = Main.pref.get("plugins");
    208242                if (!plugins.equals(oldPlugins)) {
Note: See TracChangeset for help on using the changeset viewer.