Changeset 28010 in osm for applications/editors/josm


Ignore:
Timestamp:
2012-03-07T00:40:39+01:00 (13 years ago)
Author:
donvip
Message:

opendata: download automatically modules when clicking on OK

Location:
applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreference.java

    r28000 r28010  
    209209     * @return the list of modules waiting for update or download
    210210     */
    211     /*public List<ModuleInformation> getModulesScheduledForUpdateOrDownload() {
     211    public List<ModuleInformation> getModulesScheduledForUpdateOrDownload() {
    212212        return model != null ? model.getModulesScheduledForUpdateOrDownload() : null;
    213     }*/
     213    }
    214214
    215215    public boolean ok() {
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreferencesModel.java

    r28000 r28010  
    190190     * @return the list of modules waiting for update or download
    191191     */
    192     /*public List<ModuleInformation> getModulesScheduledForUpdateOrDownload() {
     192    public List<ModuleInformation> getModulesScheduledForUpdateOrDownload() {
    193193        List<ModuleInformation> ret = new ArrayList<ModuleInformation>();
    194194        for (String module: pendingDownloads) {
     
    200200        }
    201201        return ret;
    202     }*/
     202    }
    203203
    204204    /**
  • applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/OdPreferenceSetting.java

    r28000 r28010  
    2727import javax.swing.JCheckBox;
    2828import javax.swing.JLabel;
     29import javax.swing.JOptionPane;
    2930import javax.swing.JPanel;
    3031import javax.swing.JScrollPane;
     
    3334import javax.swing.JTextField;
    3435import javax.swing.SwingConstants;
     36import javax.swing.SwingUtilities;
    3537
    3638import org.openstreetmap.josm.Main;
     
    3840import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
    3941import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
     42import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleDownloadTask;
     43import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleInformation;
    4044import org.openstreetmap.josm.tools.GBC;
    4145
     
    142146    @Override
    143147    public boolean ok() {
    144         modulePref.ok();
     148        boolean result = modulePref.ok();
    145149                //Main.pref.put(PREF_COORDINATES, rbWGS84.isSelected() ? VALUE_WGS84 : VALUE_CC9ZONES);
    146150                Main.pref.put(PREF_OAPI, oapi.getText());
    147151                Main.pref.put(PREF_XAPI, xapi.getText());
    148152                Main.pref.put(PREF_RAWDATA, rawData.isSelected());
    149         return false;
     153       
     154        // create a task for downloading modules if the user has activated, yet not downloaded,
     155        // new modules
     156        //
     157        final List<ModuleInformation> toDownload = modulePref.getModulesScheduledForUpdateOrDownload();
     158        final ModuleDownloadTask task;
     159        if (toDownload != null && ! toDownload.isEmpty()) {
     160            task = new ModuleDownloadTask(masterPanel, toDownload, tr("Download modules"));
     161        } else {
     162                task = null;
     163        }
     164       
     165        // this is the task which will run *after* the modules are downloaded
     166        //
     167        final Runnable continuation = new Runnable() {
     168            public void run() {
     169                boolean requiresRestart = false;
     170                if (task != null && !task.isCanceled()) {
     171                    if (!task.getDownloadedModules().isEmpty()) {
     172                        requiresRestart = true;
     173                    }
     174                }
     175
     176                // build the messages. We only display one message, including the status
     177                // information from the module download task and - if necessary - a hint
     178                // to restart JOSM
     179                //
     180                StringBuilder sb = new StringBuilder();
     181                sb.append("<html>");
     182                if (task != null && !task.isCanceled()) {
     183                    sb.append(ModulePreference.buildDownloadSummary(task));
     184                }
     185                if (requiresRestart) {
     186                    sb.append(tr("You have to restart JOSM for some settings to take effect."));
     187                }
     188                sb.append("</html>");
     189
     190                // display the message, if necessary
     191                //
     192                if ((task != null && !task.isCanceled()) || requiresRestart) {
     193                    JOptionPane.showMessageDialog(
     194                            Main.parent,
     195                            sb.toString(),
     196                            tr("Warning"),
     197                            JOptionPane.WARNING_MESSAGE
     198                            );
     199                }
     200                Main.parent.repaint();
     201            }
     202        };
     203
     204        if (task != null) {
     205            // if we have to launch a module download task we do it asynchronously, followed
     206            // by the remaining "save preferences" activites run on the Swing EDT.
     207            //
     208            Main.worker.submit(task);
     209            Main.worker.submit(
     210                    new Runnable() {
     211                        public void run() {
     212                            SwingUtilities.invokeLater(continuation);
     213                        }
     214                    }
     215                    );
     216        } else {
     217            // no need for asynchronous activities. Simply run the remaining "save preference"
     218            // activities on this thread (we are already on the Swing EDT
     219            //
     220            continuation.run();
     221        }
     222
     223        return task == null ? result : false;
    150224    }
    151225}
Note: See TracChangeset for help on using the changeset viewer.