Ignore:
Timestamp:
2009-07-29T18:04:24+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed #2766: Provide configuration checkbox in upload dialog for enabling/disabling changesets

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/UploadAction.java

    r1865 r1870  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.FlowLayout;
     7import java.awt.GridBagConstraints;
    68import java.awt.GridBagLayout;
    79import java.awt.event.ActionEvent;
     
    1618import java.util.regex.Pattern;
    1719
     20import javax.swing.JCheckBox;
    1821import javax.swing.JLabel;
    1922import javax.swing.JList;
    2023import javax.swing.JOptionPane;
    2124import javax.swing.JPanel;
     25import javax.swing.JRadioButton;
    2226import javax.swing.JScrollPane;
    2327
     
    9296         * give the user the possibility to cancel the upload.
    9397         */
    94         uploadHooks.add(new UploadHook() {
    95             public boolean checkUpload(Collection<OsmPrimitive> add, Collection<OsmPrimitive> update, Collection<OsmPrimitive> delete) {
    96 
    97                 JPanel p = new JPanel(new GridBagLayout());
    98 
    99                 OsmPrimitivRenderer renderer = new OsmPrimitivRenderer();
    100 
    101                 if (!add.isEmpty()) {
    102                     p.add(new JLabel(tr("Objects to add:")), GBC.eol());
    103                     JList l = new JList(add.toArray());
    104                     l.setCellRenderer(renderer);
    105                     l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
    106                     p.add(new JScrollPane(l), GBC.eol().fill());
    107                 }
    108 
    109                 if (!update.isEmpty()) {
    110                     p.add(new JLabel(tr("Objects to modify:")), GBC.eol());
    111                     JList l = new JList(update.toArray());
    112                     l.setCellRenderer(renderer);
    113                     l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
    114                     p.add(new JScrollPane(l), GBC.eol().fill());
    115                 }
    116 
    117                 if (!delete.isEmpty()) {
    118                     p.add(new JLabel(tr("Objects to delete:")), GBC.eol());
    119                     JList l = new JList(delete.toArray());
    120                     l.setCellRenderer(renderer);
    121                     l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
    122                     p.add(new JScrollPane(l), GBC.eol().fill());
    123                 }
    124 
    125                 p.add(new JLabel(tr("Provide a brief comment for the changes you are uploading:")), GBC.eol().insets(0, 5, 10, 3));
    126                 SuggestingJHistoryComboBox cmt = new SuggestingJHistoryComboBox();
    127                 List<String> cmtHistory = new LinkedList<String>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
    128                 cmt.setHistory(cmtHistory);
    129                 //final JTextField cmt = new JTextField(lastCommitComment);
    130                 p.add(cmt, GBC.eol().fill(GBC.HORIZONTAL));
    131 
    132                 while(true) {
    133                     int result = new ExtendedDialog(Main.parent,
    134                             tr("Upload these changes?"),
    135                             p,
    136                             new String[] {tr("Upload Changes"), tr("Cancel")},
    137                             new String[] {"upload.png", "cancel.png"}).getValue();
    138 
    139                     // cancel pressed
    140                     if (result != 1) return false;
    141 
    142                     // don't allow empty commit message
    143                     if (cmt.getText().trim().length() < 3) {
    144                         continue;
    145                     }
    146 
    147                     // store the history of comments
    148                     cmt.addCurrentItemToHistory();
    149                     Main.pref.putCollection(HISTORY_KEY, cmt.getHistory());
    150 
    151                     break;
    152                 }
    153                 return true;
    154             }
    155         });
     98        uploadHooks.add(new UploadConfirmationHook());
    15699    }
    157100
     
    275218     */
    276219    protected void synchronizePrimitive(final String id) {
    277 
    278         /**
    279          * The asynchronous task to update a a specific id
    280          *
    281          */
    282         class UpdatePrimitiveTask extends  PleaseWaitRunnable {
    283 
    284             private boolean uploadCancelled = false;
    285             private boolean uploadFailed = false;
    286             private Exception lastException = null;
    287 
    288             public UpdatePrimitiveTask() {
    289                 super(tr("Updating primitive"),false /* don't ignore exceptions */);
    290             }
    291 
    292             @Override protected void realRun() throws SAXException, IOException {
    293                 try {
    294                     UpdateSelectionAction act = new UpdateSelectionAction();
    295                     act.updatePrimitive(Long.parseLong(id));
    296                 } catch (Exception sxe) {
    297                     if (uploadCancelled) {
    298                         System.out.println("Ignoring exception caught because upload is cancelled. Exception is: " + sxe.toString());
    299                         return;
    300                     }
    301                     uploadFailed = true;
    302                     lastException = sxe;
    303                 }
    304             }
    305 
    306             @Override protected void finish() {
    307                 if (uploadFailed) {
    308                     handleFailedUpload(lastException);
    309                 }
    310             }
    311 
    312             @Override protected void cancel() {
    313                 OsmApi.getOsmApi().cancel();
    314                 uploadCancelled = true;
    315             }
    316         }
    317 
    318         Main.worker.execute(new UpdatePrimitiveTask());
     220        Main.worker.execute(new UpdatePrimitiveTask(Long.parseLong(id)));
    319221    }
    320222
     
    370272        );
    371273        switch(ret) {
    372         case JOptionPane.CLOSED_OPTION: return;
    373         case JOptionPane.CANCEL_OPTION: return;
    374         case 0: synchronizePrimitive(id); break;
    375         case 1: synchronizeDataSet(); break;
    376         default:
    377             // should not happen
    378             throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
     274            case JOptionPane.CLOSED_OPTION: return;
     275            case JOptionPane.CANCEL_OPTION: return;
     276            case 0: synchronizePrimitive(id); break;
     277            case 1: synchronizeDataSet(); break;
     278            default:
     279                // should not happen
     280                throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
    379281        }
    380282    }
     
    409311        );
    410312        switch(ret) {
    411         case JOptionPane.CLOSED_OPTION: return;
    412         case 1: return;
    413         case 0: synchronizeDataSet(); break;
    414         default:
    415             // should not happen
    416             throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
     313            case JOptionPane.CLOSED_OPTION: return;
     314            case 1: return;
     315            case 0: synchronizeDataSet(); break;
     316            default:
     317                // should not happen
     318                throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
    417319        }
    418320    }
     
    608510        e.printStackTrace();
    609511    }
     512
     513    /**
     514     * The asynchronous task to update a specific id
     515     *
     516     */
     517    class UpdatePrimitiveTask extends  PleaseWaitRunnable {
     518
     519        private boolean uploadCancelled = false;
     520        private boolean uploadFailed = false;
     521        private Exception lastException = null;
     522        private long id;
     523
     524        public UpdatePrimitiveTask(long id) {
     525            super(tr("Updating primitive"),false /* don't ignore exceptions */);
     526        }
     527
     528        @Override protected void realRun() throws SAXException, IOException {
     529            try {
     530                UpdateSelectionAction act = new UpdateSelectionAction();
     531                act.updatePrimitive(id);
     532            } catch (Exception sxe) {
     533                if (uploadCancelled) {
     534                    System.out.println("Ignoring exception caught because upload is cancelled. Exception is: " + sxe.toString());
     535                    return;
     536                }
     537                uploadFailed = true;
     538                lastException = sxe;
     539            }
     540        }
     541
     542        @Override protected void finish() {
     543            if (uploadFailed) {
     544                handleFailedUpload(lastException);
     545            }
     546        }
     547
     548        @Override protected void cancel() {
     549            OsmApi.getOsmApi().cancel();
     550            uploadCancelled = true;
     551        }
     552    }
     553
     554
     555    class UploadConfirmationHook implements UploadHook {
     556
     557        private JCheckBox cbUseAtomicUpload;
     558
     559        protected JPanel buildChangesetControlPanel() {
     560            JPanel pnl = new JPanel();
     561            pnl.setLayout(new FlowLayout(FlowLayout.LEFT));
     562            pnl.add(cbUseAtomicUpload = new JCheckBox(tr("upload all changes in one request")));
     563            cbUseAtomicUpload.setToolTipText(tr("Enable to upload all changes in one request, disable to use one request per changed primitive"));
     564            boolean useAtomicUpload = Main.pref.getBoolean("osm-server.atomic-upload", true);
     565            cbUseAtomicUpload.setSelected(useAtomicUpload);
     566            cbUseAtomicUpload.setEnabled(OsmApi.getOsmApi().hasChangesetSupport());
     567            return pnl;
     568        }
     569
     570        public boolean checkUpload(Collection<OsmPrimitive> add, Collection<OsmPrimitive> update, Collection<OsmPrimitive> delete) {
     571
     572            JPanel p = new JPanel(new GridBagLayout());
     573
     574            OsmPrimitivRenderer renderer = new OsmPrimitivRenderer();
     575
     576            if (!add.isEmpty()) {
     577                p.add(new JLabel(tr("Objects to add:")), GBC.eol());
     578                JList l = new JList(add.toArray());
     579                l.setCellRenderer(renderer);
     580                l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
     581                p.add(new JScrollPane(l), GBC.eol().fill());
     582            }
     583
     584            if (!update.isEmpty()) {
     585                p.add(new JLabel(tr("Objects to modify:")), GBC.eol());
     586                JList l = new JList(update.toArray());
     587                l.setCellRenderer(renderer);
     588                l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
     589                p.add(new JScrollPane(l), GBC.eol().fill());
     590            }
     591
     592            if (!delete.isEmpty()) {
     593                p.add(new JLabel(tr("Objects to delete:")), GBC.eol());
     594                JList l = new JList(delete.toArray());
     595                l.setCellRenderer(renderer);
     596                l.setVisibleRowCount(l.getModel().getSize() < 6 ? l.getModel().getSize() : 10);
     597                p.add(new JScrollPane(l), GBC.eol().fill());
     598            }
     599
     600            p.add(new JLabel(tr("Provide a brief comment for the changes you are uploading:")), GBC.eol().insets(0, 5, 10, 3));
     601            SuggestingJHistoryComboBox cmt = new SuggestingJHistoryComboBox();
     602            List<String> cmtHistory = new LinkedList<String>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
     603            cmt.setHistory(cmtHistory);
     604            p.add(cmt, GBC.eol().fill(GBC.HORIZONTAL));
     605            //final JTextField cmt = new JTextField(lastCommitComment);
     606
     607            // configuration options for atomic upload
     608            p.add(buildChangesetControlPanel(), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
     609
     610            while(true) {
     611                int result = new ExtendedDialog(Main.parent,
     612                        tr("Upload these changes?"),
     613                        p,
     614                        new String[] {tr("Upload Changes"), tr("Cancel")},
     615                        new String[] {"upload.png", "cancel.png"}).getValue();
     616
     617                // cancel pressed
     618                if (result != 1) return false;
     619
     620                // don't allow empty commit message
     621                if (cmt.getText().trim().length() < 3) {
     622                    continue;
     623                }
     624
     625                // store the history of comments
     626                cmt.addCurrentItemToHistory();
     627                Main.pref.putCollection(HISTORY_KEY, cmt.getHistory());
     628                Main.pref.put("osm-server.atomic-upload", cbUseAtomicUpload.isSelected());
     629
     630                break;
     631            }
     632            return true;
     633        }
     634    }
    610635}
Note: See TracChangeset for help on using the changeset viewer.