Changeset 2025 in josm


Ignore:
Timestamp:
2009-09-02T21:17:52+02:00 (10 years ago)
Author:
Gubaer
Message:

new: improved dialog for uploading/saving modified layers on exit
new: improved dialog for uploading/saving modified layers if layers are deleted
new: new progress monitor which can delegate rendering to any Swing component
more setters/getters for properties in OSM data classes (fields are @deprecated); started to update references in the code base

Location:
trunk/src/org/openstreetmap/josm
Files:
17 added
55 edited

Legend:

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

    r2017 r2025  
    22package org.openstreetmap.josm;
    33import static org.openstreetmap.josm.tools.I18n.tr;
     4import static org.openstreetmap.josm.tools.I18n.trn;
    45
    56import java.awt.BorderLayout;
     
    1213import java.net.URI;
    1314import java.net.URISyntaxException;
     15import java.util.ArrayList;
    1416import java.util.Collection;
     17import java.util.List;
    1518import java.util.Map;
    1619import java.util.StringTokenizer;
     
    2225import javax.swing.JComponent;
    2326import javax.swing.JFrame;
     27import javax.swing.JLabel;
    2428import javax.swing.JOptionPane;
    2529import javax.swing.JPanel;
     
    4549import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
    4650import org.openstreetmap.josm.gui.download.DownloadDialog.DownloadTask;
     51import org.openstreetmap.josm.gui.io.SaveLayersDialog;
    4752import org.openstreetmap.josm.gui.layer.Layer;
    4853import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     
    393398    }
    394399
    395     public static boolean breakBecauseUnsavedChanges() {
     400    public static boolean saveUnsavedModifications() {
     401        if (map == null) return true;
     402        SaveLayersDialog dialog = new SaveLayersDialog(Main.parent);
     403        List<OsmDataLayer> layersWithUnmodifiedChanges = new ArrayList<OsmDataLayer>();
     404        for (OsmDataLayer l: Main.map.mapView.getLayersOfType(OsmDataLayer.class)) {
     405            if (l.requiresSaveToFile() || l.requiresUploadToServer()) {
     406                layersWithUnmodifiedChanges.add(l);
     407            }
     408        }
     409        dialog.prepareForSavingAndUpdatingLayersBeforeExit();
     410        if (!layersWithUnmodifiedChanges.isEmpty()) {
     411            dialog.getModel().populate(layersWithUnmodifiedChanges);
     412            dialog.setVisible(true);
     413            switch(dialog.getUserAction()) {
     414                case CANCEL: return false;
     415                case PROCEED: return true;
     416                default: return false;
     417            }
     418        }
     419        return true;
     420    }
     421
     422    /**
     423     * Saves all {@see OsmDataLayer}s with an associated file and with unsaved
     424     * data modifications.
     425     *
     426     * @return true, if the save operation was successful; false, otherwise
     427     */
     428    public static boolean saveUnsavedModifications_old() {
    396429        Shortcut.savePrefs();
    397         if (map != null) {
    398             boolean modified = false;
    399             boolean uploadedModified = false;
    400             for (final Layer l : map.mapView.getAllLayers()) {
    401                 if (l instanceof OsmDataLayer && ((OsmDataLayer)l).isModified()) {
    402                     modified = true;
    403                     uploadedModified = ((OsmDataLayer)l).uploadedModified;
    404                     break;
    405                 }
    406             }
    407             if (modified) {
    408                 final String msg = uploadedModified ? "\n"
    409                         +tr("Hint: Some changes came from uploading new data to the server.") : "";
    410                         int result = new ExtendedDialog(parent, tr("Unsaved Changes"),
    411                                 new javax.swing.JLabel(tr("There are unsaved changes. Discard the changes and continue?")+msg),
    412                                 new String[] {tr("Save and Exit"), tr("Discard and Exit"), tr("Cancel")},
    413                                 new String[] {"save.png", "exit.png", "cancel.png"}).getValue();
    414 
    415                         // Save before exiting
    416                         if(result == 1) {
    417                             Boolean savefailed = false;
    418                             for (final Layer l : map.mapView.getAllLayers()) {
    419                                 if (l instanceof OsmDataLayer && ((OsmDataLayer)l).isModified()) {
    420                                     SaveAction save = new SaveAction();
    421                                     if(!save.doSave(l)) {
    422                                         savefailed = true;
    423                                     }
    424                                 }
    425                             }
    426                             return savefailed;
    427                         }
    428                         else if(result != 2) // Cancel exiting unless the 2nd button was clicked
    429                             return true;
    430             }
    431         }
    432         return false;
     430        if (map == null)
     431            return true; // nothing to save, return success
     432
     433        int numUnsavedLayers = 0;
     434        for (final OsmDataLayer l : map.mapView.getLayersOfType(OsmDataLayer.class)) {
     435            if (l.requiresSaveToFile()) {
     436                numUnsavedLayers++;
     437            }
     438        }
     439        if (numUnsavedLayers == 0)
     440            return true; // nothing to save, return success
     441
     442        String msg = trn(
     443                "There are unsaved changes in {0} layer. Discard the changes and continue?",
     444                "There are unsaved changes in {0} layers. Discard the changes and continue?",
     445                numUnsavedLayers,
     446                numUnsavedLayers
     447        );
     448        int result = new ExtendedDialog(parent, tr("Unsaved Changes"),
     449                new JLabel(msg),
     450                new String[] {tr("Save and Exit"), tr("Discard and Exit"), tr("Cancel")},
     451                new String[] {"save.png", "exit.png", "cancel.png"}).getValue();
     452
     453        switch(result) {
     454            case 2: /* discard and exit */ return true;
     455            case 3: /* cancel */ return false;
     456        }
     457        boolean savefailed = false;
     458        for (OsmDataLayer l : map.mapView.getLayersOfType(OsmDataLayer.class)) {
     459            if(!new SaveAction().doSave(l)) {
     460                savefailed = true;
     461            }
     462        }
     463        return !savefailed;
    433464    }
    434465
  • trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java

    r2017 r2025  
    5252        Iterator<OsmPrimitive> it = primitivesToShow.iterator();
    5353        while(it.hasNext()) {
    54             if (it.next().id == 0) {
     54            if (it.next().getId() == 0) {
    5555                it.remove();
    5656            }
  • trunk/src/org/openstreetmap/josm/actions/ApiPreconditionChecker.java

    r2017 r2025  
    1 // License: GPL. For details, see LICENSE file.
    21package org.openstreetmap.josm.actions;
    32
     
    7170            for (Entry<String,String> e : osmPrimitive.entrySet()) {
    7271                if(e.getValue().length() > 255) {
    73                     if (osmPrimitive.deleted) {
     72                    if (osmPrimitive.isDeleted()) {
    7473                        // if OsmPrimitive is going to be deleted we automatically shorten the
    7574                        // value
     
    7776                                tr("Warning: automatically truncating value of tag ''{0}'' on deleted primitive {1}",
    7877                                        e.getKey(),
    79                                         Long.toString(osmPrimitive.id)
     78                                        Long.toString(osmPrimitive.getId())
    8079                                )
    8180                        );
     
    8584                    JOptionPane.showMessageDialog(Main.parent,
    8685                            tr("Length of value for tag ''{0}'' on primitive {1} exceeds the max. allowed length {2}. Values length is {3}.",
    87                                     e.getKey(), Long.toString(osmPrimitive.id), 255, e.getValue().length()
     86                                    e.getKey(), Long.toString(osmPrimitive.getId()), 255, e.getValue().length()
    8887                            ),
    8988                            tr("Precondition Violation"),
     
    103102                        tr("{0} nodes in way {1} exceed the max. allowed number of nodes {2}",
    104103                                ((Way)osmPrimitive).getNodesCount(),
    105                                 Long.toString(osmPrimitive.id),
     104                                Long.toString(osmPrimitive.getId()),
    106105                                maxNodes
    107106                        ),
  • trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java

    r2017 r2025  
    9090        HashSet<Relation> relationsUsingWays = new HashSet<Relation>();
    9191        for (Relation r : getCurrentDataSet().relations) {
    92             if (r.deleted || r.incomplete) {
     92            if (r.isDeleted() || r.incomplete) {
    9393                continue;
    9494            }
     
    177177        for (Way w : selectedWays) {
    178178            modifyWay = w;
    179             if (w.id != 0) {
     179            if (w.getId() != 0) {
    180180                break;
    181181            }
  • trunk/src/org/openstreetmap/josm/actions/ExitAction.java

    r1677 r2025  
    2121    public ExitAction() {
    2222        super(tr("Exit"), "exit", tr("Exit the application."),
    23         Shortcut.registerShortcut("system:menuexit", tr("Exit"), KeyEvent.VK_Q, Shortcut.GROUP_MENU), true);
     23                Shortcut.registerShortcut("system:menuexit", tr("Exit"), KeyEvent.VK_Q, Shortcut.GROUP_MENU), true);
    2424    }
    2525
    2626    public void actionPerformed(ActionEvent e) {
    27         if (!Main.breakBecauseUnsavedChanges()) {
     27        if (Main.saveUnsavedModifications()) {
    2828            Main.saveGuiGeometry();
    2929            System.exit(0);
  • trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java

    r1697 r2025  
    2121    @Override
    2222    protected  String createInfoUrl(OsmPrimitive primitive) {
    23         return getBaseURL() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.id + "/history";
     23        return getBaseURL() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.getId() + "/history";
    2424    }
    2525}
  • trunk/src/org/openstreetmap/josm/actions/InfoAction.java

    r1697 r2025  
    2121    @Override
    2222    protected  String createInfoUrl(OsmPrimitive primitive) {
    23         return getBaseURL() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.id;
     23        return getBaseURL() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.getId();
    2424    }
    2525}
  • trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java

    r2017 r2025  
    9595        Node useNode = null;
    9696        for (Node n: selectedNodes) {
    97             if (n.id > 0) {
     97            if (n.getId() > 0) {
    9898                useNode = n;
    9999                break;
     
    127127        HashSet<Relation> relationsUsingNodes = new HashSet<Relation>();
    128128        for (Relation r : getCurrentDataSet().relations) {
    129             if (r.deleted || r.incomplete) {
     129            if (r.isDeleted() || r.incomplete) {
    130130                continue;
    131131            }
     
    217217
    218218        for (Way w : getCurrentDataSet().ways) {
    219             if (w.deleted || w.incomplete || w.getNodesCount() < 1) {
     219            if (w.isDeleted() || w.incomplete || w.getNodesCount() < 1) {
    220220                continue;
    221221            }
  • trunk/src/org/openstreetmap/josm/actions/PasteTagsAction.java

    r2008 r2025  
    126126    protected Map<OsmPrimitiveType, Integer> getSourceStatistics() {
    127127        HashMap<OsmPrimitiveType, Integer> ret = new HashMap<OsmPrimitiveType, Integer>();
    128         for (Class type: new Class[] {Node.class, Way.class, Relation.class}) {
     128        for (Class<? extends OsmPrimitive> type: new Class[] {Node.class, Way.class, Relation.class}) {
    129129            if (!getSourceTagsByType(type).isEmpty()) {
    130130                ret.put(OsmPrimitiveType.from(type), getSourcePrimitivesByType(type).size());
     
    136136    protected Map<OsmPrimitiveType, Integer> getTargetStatistics() {
    137137        HashMap<OsmPrimitiveType, Integer> ret = new HashMap<OsmPrimitiveType, Integer>();
    138         for (Class type: new Class[] {Node.class, Way.class, Relation.class}) {
     138        for (Class<? extends OsmPrimitive> type: new Class[] {Node.class, Way.class, Relation.class}) {
    139139            int count = getSubcollectionByType(getEditLayer().data.getSelected(), type).size();
    140140            if (count > 0) {
     
    156156    protected void pasteFromHomogeneousSource(Collection<? extends OsmPrimitive> targets) {
    157157        TagCollection tc = null;
    158         Class sourceType = null;
    159         for (Class type : new Class[] {Node.class, Way.class, Relation.class}) {
     158        for (Class<? extends OsmPrimitive> type : new Class[] {Node.class, Way.class, Relation.class}) {
    160159            TagCollection tc1 = getSourceTagsByType(type);
    161160            if (!tc1.isEmpty()) {
    162161                tc = tc1;
    163                 sourceType = type;
    164162            }
    165163        }
  • trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java

    r2017 r2025  
    7272            layer.setName(file.getName());
    7373            layer.setAssociatedFile(file);
     74            if (layer instanceof OsmDataLayer) {
     75                ((OsmDataLayer) layer).onPostSaveToFile();
     76            }
    7477            Main.parent.repaint();
    7578        } catch (IOException e) {
     
    8891     */
    8992    public boolean checkSaveConditions(Layer layer) {
    90         if (layer == null) {
    91             JOptionPane.showMessageDialog(
    92                     Main.parent,
    93                     tr("Internal Error: cannot check conditions for no layer. Please report this as a bug."),
    94                     tr("Error"),
    95                     JOptionPane.ERROR_MESSAGE
    96             );
    97             return false;
    98         }
    99         if (Main.map == null) {
    100             JOptionPane.showMessageDialog(
    101                     Main.parent,
    102                     tr("No document open so nothing to save."),
    103                     tr("Warning"),
    104                     JOptionPane.WARNING_MESSAGE
    105             );
    106             return false;
    107         }
    108 
    10993        if (layer instanceof OsmDataLayer && isDataSetEmpty((OsmDataLayer)layer) && 1 != new ExtendedDialog(Main.parent, tr("Empty document"), tr("The document contains no data."), new String[] {tr("Save anyway"), tr("Cancel")}, new String[] {"save.png", "cancel.png"}).getValue())
    11094            return false;
     
    144128    private boolean isDataSetEmpty(OsmDataLayer layer) {
    145129        for (OsmPrimitive osm : layer.data.allNonDeletedPrimitives())
    146             if (!osm.deleted || osm.id > 0)
     130            if (!osm.isDeleted() || osm.getId() > 0)
    147131                return false;
    148132        return true;
  • trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java

    r2017 r2025  
    102102            for (Node n : selectedNodes) {
    103103                for (Way w : getCurrentDataSet().ways) {
    104                     if (w.deleted || w.incomplete) {
     104                    if (w.isDeleted() || w.incomplete) {
    105105                        continue;
    106106                    }
     
    293293
    294294        for (Relation r : getCurrentDataSet().relations) {
    295             if (r.deleted || r.incomplete) {
     295            if (r.isDeleted() || r.incomplete) {
    296296                continue;
    297297            }
  • trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java

    r2017 r2025  
    6666            int count = 0;
    6767            for (Way w : getCurrentDataSet().ways) {
    68                 if (w.deleted || w.incomplete || w.getNodesCount() < 1) {
     68                if (w.isDeleted() || w.incomplete || w.getNodesCount() < 1) {
    6969                    continue;
    7070                }
     
    9191                int count = 0;
    9292                for (Way w : getCurrentDataSet().ways) {
    93                     if (w.deleted || w.incomplete || w.getNodesCount() < 1) {
     93                    if (w.isDeleted() || w.incomplete || w.getNodesCount() < 1) {
    9494                        continue;
    9595                    }
     
    321321        HashSet<String> rolesToReAdd = null;
    322322        for (Relation r : getCurrentDataSet().relations) {
    323             if (r.deleted || r.incomplete) {
     323            if (r.isDeleted() || r.incomplete) {
    324324                continue;
    325325            }
     
    368368            // modify all ways containing the nodes
    369369            for (Way w : getCurrentDataSet().ways) {
    370                 if (w.deleted || w.incomplete || w.getNodesCount() < 1) {
     370                if (w.isDeleted() || w.incomplete || w.getNodesCount() < 1) {
    371371                    continue;
    372372                }
  • trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java

    r1881 r2025  
    7979            // bounds defined? => use the bbox downloader
    8080            //
    81             new DownloadOsmTaskList().download(false, areas, new PleaseWaitProgressMonitor());
     81            new DownloadOsmTaskList().download(false, areas, new PleaseWaitProgressMonitor(tr("Updating data")));
    8282        }
    8383    }
  • trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java

    r2017 r2025  
    166166        protected void initMultiFetchReaderWithNodes(MultiFetchServerObjectReader reader) {
    167167            for (OsmPrimitive primitive : toUpdate) {
    168                 if (primitive instanceof Node && primitive.id > 0) {
     168                if (primitive instanceof Node && primitive.getId() > 0) {
    169169                    reader.append((Node)primitive);
    170170                } else if (primitive instanceof Way) {
    171171                    Way way = (Way)primitive;
    172172                    for (Node node: way.getNodes()) {
    173                         if (node.id > 0) {
     173                        if (node.getId() > 0) {
    174174                            reader.append(node);
    175175                        }
     
    181181        protected void initMultiFetchReaderWithWays(MultiFetchServerObjectReader reader) {
    182182            for (OsmPrimitive primitive : toUpdate) {
    183                 if (primitive instanceof Way && primitive.id > 0) {
     183                if (primitive instanceof Way && primitive.getId() > 0) {
    184184                    reader.append((Way)primitive);
    185185                }
     
    189189        protected void initMultiFetchReaderWithRelations(MultiFetchServerObjectReader reader) {
    190190            for (OsmPrimitive primitive : toUpdate) {
    191                 if (primitive instanceof Relation && primitive.id > 0) {
     191                if (primitive instanceof Relation && primitive.getId() > 0) {
    192192                    reader.append((Relation)primitive);
    193193                }
  • trunk/src/org/openstreetmap/josm/actions/UploadAction.java

    r2005 r2025  
    2626
    2727import org.openstreetmap.josm.Main;
     28import org.openstreetmap.josm.data.APIDataSet;
    2829import org.openstreetmap.josm.data.conflict.ConflictCollection;
    2930import org.openstreetmap.josm.data.osm.DataSet;
     
    3435import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    3536import org.openstreetmap.josm.gui.historycombobox.SuggestingJHistoryComboBox;
     37import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    3638import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    3739import org.openstreetmap.josm.io.OsmApi;
     
    108110    }
    109111
     112    public boolean checkPreUploadConditions(OsmDataLayer layer) {
     113        return checkPreUploadConditions(layer, new APIDataSet(layer.data));
     114    }
     115
     116    public boolean checkPreUploadConditions(OsmDataLayer layer, APIDataSet apiData) {
     117        ConflictCollection conflicts = layer.getConflicts();
     118        if (conflicts !=null && !conflicts.isEmpty()) {
     119            JOptionPane.showMessageDialog(
     120                    Main.parent,
     121                    tr("<html>There are unresolved conflicts in layer ''{0}''.<br>"
     122                            + "You have to resolve them first.<html>", layer.getName()),
     123                            tr("Warning"),
     124                            JOptionPane.WARNING_MESSAGE
     125            );
     126            return false;
     127        }
     128        // Call all upload hooks in sequence. The upload confirmation dialog
     129        // is one of these.
     130        for(UploadHook hook : uploadHooks)
     131            if(!hook.checkUpload(apiData.getPrimitivesToAdd(), apiData.getPrimitivesToUpdate(), apiData.getPrimitivesToDelete()))
     132                return false;
     133
     134        return true;
     135    }
     136
    110137    public void actionPerformed(ActionEvent e) {
    111138        if (!isEnabled())
     
    121148        }
    122149
    123         ConflictCollection conflicts = Main.map.mapView.getEditLayer().getConflicts();
    124         if (conflicts !=null && !conflicts.isEmpty()) {
    125             JOptionPane.showMessageDialog(
    126                     Main.parent,
    127                     tr("There are unresolved conflicts. You have to resolve these first."),
    128                     tr("Warning"),
    129                     JOptionPane.WARNING_MESSAGE
    130             );
    131             Main.map.conflictDialog.showDialog();
    132             return;
    133         }
    134 
    135         final LinkedList<OsmPrimitive> add = new LinkedList<OsmPrimitive>();
    136         final LinkedList<OsmPrimitive> update = new LinkedList<OsmPrimitive>();
    137         final LinkedList<OsmPrimitive> delete = new LinkedList<OsmPrimitive>();
    138         for (OsmPrimitive osm : getCurrentDataSet().allPrimitives()) {
    139             if (osm.get("josm/ignore") != null) {
    140                 continue;
    141             }
    142             if (osm.id == 0 && !osm.deleted) {
    143                 add.addLast(osm);
    144             } else if (osm.modified && !osm.deleted) {
    145                 update.addLast(osm);
    146             } else if (osm.deleted && osm.id != 0) {
    147                 delete.addFirst(osm);
    148             }
    149         }
    150 
    151         if (add.isEmpty() && update.isEmpty() && delete.isEmpty()) {
     150        APIDataSet apiData = new APIDataSet(Main.main.getCurrentDataSet());
     151        if (apiData.isEmpty()) {
    152152            JOptionPane.showMessageDialog(
    153153                    Main.parent,
    154154                    tr("No changes to upload."),
    155155                    tr("Warning"),
    156                     JOptionPane.WARNING_MESSAGE
     156                    JOptionPane.INFORMATION_MESSAGE
    157157            );
    158158            return;
    159159        }
    160 
    161         // Call all upload hooks in sequence. The upload confirmation dialog
    162         // is one of these.
    163         for(UploadHook hook : uploadHooks)
    164             if(!hook.checkUpload(add, update, delete))
    165                 return;
    166 
    167         final Collection<OsmPrimitive> all = new LinkedList<OsmPrimitive>();
    168         all.addAll(add);
    169         all.addAll(update);
    170         all.addAll(delete);
    171 
    172         Main.worker.execute(new UploadDiffTask(all));
     160        if (!checkPreUploadConditions(Main.map.mapView.getEditLayer(), apiData))
     161            return;
     162        Main.worker.execute(createUploadTask(Main.map.mapView.getEditLayer(), apiData.getPrimitives()));
    173163    }
    174164
     
    235225        );
    236226        switch(ret) {
    237         case JOptionPane.CLOSED_OPTION: return;
    238         case JOptionPane.CANCEL_OPTION: return;
    239         case 0: synchronizePrimitive(id); break;
    240         case 1: synchronizeDataSet(); break;
    241         default:
    242             // should not happen
    243             throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
     227            case JOptionPane.CLOSED_OPTION: return;
     228            case JOptionPane.CANCEL_OPTION: return;
     229            case 0: synchronizePrimitive(id); break;
     230            case 1: synchronizeDataSet(); break;
     231            default:
     232                // should not happen
     233                throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
    244234        }
    245235    }
     
    275265        );
    276266        switch(ret) {
    277         case JOptionPane.CLOSED_OPTION: return;
    278         case 1: return;
    279         case 0: synchronizeDataSet(); break;
    280         default:
    281             // should not happen
    282             throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
     267            case JOptionPane.CLOSED_OPTION: return;
     268            case 1: return;
     269            case 0: synchronizeDataSet(); break;
     270            default:
     271                // should not happen
     272                throw new IllegalStateException(tr("unexpected return value. Got {0}", ret));
    283273        }
    284274    }
     
    522512    }
    523513
    524 
    525     class UploadDiffTask extends  PleaseWaitRunnable {
     514    public UploadDiffTask createUploadTask(OsmDataLayer layer, Collection<OsmPrimitive> toUpload) {
     515        return new UploadDiffTask(layer, toUpload);
     516    }
     517
     518    public class UploadDiffTask extends  PleaseWaitRunnable {
    526519        private boolean uploadCancelled = false;
    527520        private Exception lastException = null;
    528521        private Collection <OsmPrimitive> toUpload;
    529522        private OsmServerWriter writer;
    530 
    531         public UploadDiffTask(Collection <OsmPrimitive> toUpload) {
    532             super(tr("Uploading"),false /* don't ignore exceptions */);
     523        private OsmDataLayer layer;
     524
     525        private UploadDiffTask(OsmDataLayer layer, Collection <OsmPrimitive> toUpload) {
     526            super(tr("Uploading data for layer ''{0}''", layer.getName()),false /* don't ignore exceptions */);
    533527            this.toUpload = toUpload;
     528            this.layer = layer;
    534529        }
    535530
     
    537532            writer = new OsmServerWriter();
    538533            try {
    539                 writer.uploadOsm(getCurrentDataSet().version, toUpload, progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
     534                ProgressMonitor monitor = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
     535                writer.uploadOsm(layer.data.version, toUpload, monitor);
    540536            } catch (Exception sxe) {
    541537                if (uploadCancelled) {
     
    554550            // partially uploaded
    555551            //
    556             getEditLayer().cleanupAfterUpload(writer.getProcessedPrimitives());
    557             DataSet.fireSelectionChanged(getEditLayer().data.getSelected());
    558             getEditLayer().fireDataChange();
     552            layer.cleanupAfterUpload(writer.getProcessedPrimitives());
     553            DataSet.fireSelectionChanged(layer.data.getSelected());
     554            layer.fireDataChange();
    559555            if (lastException != null) {
    560556                handleFailedUpload(lastException);
     557            } else {
     558                layer.onPostUploadToServer();
    561559            }
    562560        }
     
    568566            }
    569567        }
     568
     569        public boolean isSuccessful() {
     570            return !isCancelled() && !isFailed();
     571        }
     572
     573        public boolean isCancelled() {
     574            return uploadCancelled;
     575        }
     576
     577        public boolean isFailed() {
     578            return lastException != null;
     579        }
    570580    }
    571581}
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

    r2009 r2025  
    765765        Way way = null;
    766766        for (Way w : getCurrentDataSet().ways) {
    767             if (w.deleted || w.incomplete || w.getNodesCount() < 1) {
     767            if (w.isDeleted() || w.incomplete || w.getNodesCount() < 1) {
    768768                continue;
    769769            }
  • trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java

    r1938 r2025  
    227227
    228228            switch (mode) {
    229             case NONE:
    230                 return false;
    231             case MISSING_KEY:
    232                 return osm.get(key) == null;
    233             case ANY:
    234                 return true;
    235             case ANY_VALUE:
    236                 return osm.get(key) != null;
    237             case ANY_KEY:
    238                 for (String v:osm.getKeys().values()) {
    239                     if (v.equals(value))
    240                         return true;
    241                 }
    242                 return false;
    243             case EXACT:
    244                 return value.equals(osm.get(key));
    245             case ANY_KEY_REGEXP:
    246                 for (String v:osm.getKeys().values()) {
    247                     if (valuePattern.matcher(v).matches())
    248                         return true;
    249                 }
    250                 return false;
    251             case ANY_VALUE_REGEXP:
    252             case EXACT_REGEXP:
    253                 for (Entry<String, String> entry:osm.entrySet()) {
    254                     if (keyPattern.matcher(entry.getKey()).matches()) {
    255                         if (mode == Mode.ANY_VALUE_REGEXP
    256                                 || valuePattern.matcher(entry.getValue()).matches())
     229                case NONE:
     230                    return false;
     231                case MISSING_KEY:
     232                    return osm.get(key) == null;
     233                case ANY:
     234                    return true;
     235                case ANY_VALUE:
     236                    return osm.get(key) != null;
     237                case ANY_KEY:
     238                    for (String v:osm.getKeys().values()) {
     239                        if (v.equals(value))
    257240                            return true;
    258241                    }
    259                 }
    260                 return false;
    261             case MISSING_KEY_REGEXP:
    262                 for (String k:osm.keySet()) {
    263                     if (keyPattern.matcher(k).matches())
    264                         return false;
    265                 }
    266                 return true;
     242                    return false;
     243                case EXACT:
     244                    return value.equals(osm.get(key));
     245                case ANY_KEY_REGEXP:
     246                    for (String v:osm.getKeys().values()) {
     247                        if (valuePattern.matcher(v).matches())
     248                            return true;
     249                    }
     250                    return false;
     251                case ANY_VALUE_REGEXP:
     252                case EXACT_REGEXP:
     253                    for (Entry<String, String> entry:osm.entrySet()) {
     254                        if (keyPattern.matcher(entry.getKey()).matches()) {
     255                            if (mode == Mode.ANY_VALUE_REGEXP
     256                                    || valuePattern.matcher(entry.getValue()).matches())
     257                                return true;
     258                        }
     259                    }
     260                    return false;
     261                case MISSING_KEY_REGEXP:
     262                    for (String k:osm.keySet()) {
     263                        if (keyPattern.matcher(k).matches())
     264                            return false;
     265                    }
     266                    return true;
    267267            }
    268268            throw new AssertionError("Missed state");
     
    402402    private static class Modified extends Match {
    403403        @Override public boolean match(OsmPrimitive osm) {
    404             return osm.modified || osm.id == 0;
     404            return osm.isModified() || osm.getId() == 0;
    405405        }
    406406        @Override public String toString() {return "modified";}
  • trunk/src/org/openstreetmap/josm/actions/search/SelectionWebsiteLoader.java

    r2017 r2025  
    4848            Map<Long, String> ids = idReader.parseIds(in);
    4949            for (OsmPrimitive osm : Main.main.getCurrentDataSet().allNonDeletedPrimitives()) {
    50                 if (ids.containsKey(osm.id) && osm.getClass().getName().toLowerCase().endsWith(ids.get(osm.id))) {
     50                if (ids.containsKey(osm.getId()) && osm.getClass().getName().toLowerCase().endsWith(ids.get(osm.getId()))) {
    5151                    if (mode == SearchAction.SearchMode.remove) {
    5252                        sel.remove(osm);
  • trunk/src/org/openstreetmap/josm/command/ChangeCommand.java

    r1990 r2025  
    3636        super.executeCommand();
    3737        osm.cloneFrom(newOsm);
    38         osm.modified = true;
     38        osm.setModified(true);
    3939        return true;
    4040    }
     
    4747        String msg = "";
    4848        switch(OsmPrimitiveType.from(osm)) {
    49         case NODE: msg = marktr("Change node {0}"); break;
    50         case WAY: msg = marktr("Change way {0}"); break;
    51         case RELATION: msg = marktr("Change relation {0}"); break;
     49            case NODE: msg = marktr("Change node {0}"); break;
     50            case WAY: msg = marktr("Change way {0}"); break;
     51            case RELATION: msg = marktr("Change relation {0}"); break;
    5252        }
    5353        return new DefaultMutableTreeNode(
  • trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java

    r2008 r2025  
    7777        if (value == null) {
    7878            for (OsmPrimitive osm : objects) {
    79                 osm.modified = true;
     79                osm.setModified(true);
    8080                osm.remove(key);
    8181            }
    8282        } else {
    8383            for (OsmPrimitive osm : objects) {
    84                 osm.modified = true;
     84                osm.setModified(true);
    8585                osm.put(key, value);
    8686            }
  • trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java

    r1990 r2025  
    5151        relation.getMember(position).role = newRole;
    5252
    53         oldModified = relation.modified;
    54         relation.modified = true;
     53        oldModified = relation.isModified();
     54        relation.setModified(true);
    5555        return true;
    5656    }
     
    5858    @Override public void undoCommand() {
    5959        relation.getMember(position).role = oldRole;
    60         relation.modified = oldModified;
     60        relation.setModified(oldModified);
    6161    }
    6262
  • trunk/src/org/openstreetmap/josm/command/Command.java

    r1894 r2025  
    8989            e.getKey().cloneFrom(e.getValue());
    9090        }
    91         getLayer().setModified(true);
    9291    }
    9392
     
    114113        if (o != null)
    115114            return o;
    116         Main.debug("unable to find osm with id: " + osm.id + " hashCode: " + osm.hashCode());
     115        Main.debug("unable to find osm with id: " + osm.getId() + " hashCode: " + osm.hashCode());
    117116        for (OsmPrimitive t : cloneMap.keySet()) {
    118117            OsmPrimitive to = cloneMap.get(t);
    119             Main.debug("now: " + t.id + " hashCode: " + t.hashCode());
    120             Main.debug("orig: " + to.id + " hashCode: " + to.hashCode());
     118            Main.debug("now: " + t.getId() + " hashCode: " + t.hashCode());
     119            Main.debug("orig: " + to.getId() + " hashCode: " + to.hashCode());
    121120        }
    122121        return o;
  • trunk/src/org/openstreetmap/josm/command/CoordinateConflictResolveCommand.java

    r1954 r2025  
    4545        return new DefaultMutableTreeNode(
    4646                new JLabel(
    47                         tr("Resolve conflicts in coordinates in {0}",conflict.getMy().id),
     47                        tr("Resolve conflicts in coordinates in {0}",conflict.getMy().getId()),
    4848                        ImageProvider.get("data", "object"),
    4949                        JLabel.HORIZONTAL
  • trunk/src/org/openstreetmap/josm/command/DeleteCommand.java

    r1990 r2025  
    110110            String msg = "";
    111111            switch(OsmPrimitiveType.from(primitive)) {
    112             case NODE: msg = "Delete node {0}"; break;
    113             case WAY: msg = "Delete way {0}"; break;
    114             case RELATION:msg = "Delete relation {0}"; break;
     112                case NODE: msg = "Delete node {0}"; break;
     113                case WAY: msg = "Delete way {0}"; break;
     114                case RELATION:msg = "Delete relation {0}"; break;
    115115            }
    116116
     
    131131            apiname = t.getAPIName();
    132132            switch(t) {
    133             case NODE: msg = trn("Delete {0} node", "Delete {0} nodes", toDelete.size(), toDelete.size()); break;
    134             case WAY: msg = trn("Delete {0} way", "Delete {0} ways", toDelete.size(), toDelete.size()); break;
    135             case RELATION: msg = trn("Delete {0} relation", "Delete {0} relations", toDelete.size(), toDelete.size()); break;
     133                case NODE: msg = trn("Delete {0} node", "Delete {0} nodes", toDelete.size(), toDelete.size()); break;
     134                case WAY: msg = trn("Delete {0} way", "Delete {0} ways", toDelete.size(), toDelete.size()); break;
     135                case RELATION: msg = trn("Delete {0} relation", "Delete {0} relations", toDelete.size(), toDelete.size()); break;
    136136            }
    137137        }
     
    355355            }
    356356            Way w = (Way) primitive;
    357             if (w.id == 0) { // new ways with id == 0 are fine,
     357            if (w.getId() == 0) { // new ways with id == 0 are fine,
    358358                continue; // process existing ways only
    359359            }
     
    363363            // nodes ...
    364364            for (Node n : wnew.getNodes()) {
    365                 if (n.id != 0 || !primitivesToDelete.contains(n)) {
     365                if (n.getId() != 0 || !primitivesToDelete.contains(n)) {
    366366                    nodesToKeep.add(n);
    367367                }
     
    426426        if (a != null) {
    427427            for (OsmPrimitive osm : primitivesToDelete) {
    428                 if (osm instanceof Node && osm.id != 0) {
     428                if (osm instanceof Node && osm.getId() != 0) {
    429429                    Node n = (Node) osm;
    430430                    if (!a.contains(n.getCoor())) {
  • trunk/src/org/openstreetmap/josm/command/DeletedStateConflictResolveCommand.java

    r1954 r2025  
    4545        return new DefaultMutableTreeNode(
    4646                new JLabel(
    47                         tr("Resolve conflicts in deleted state in {0}",conflict.getMy().id),
     47                        tr("Resolve conflicts in deleted state in {0}",conflict.getMy().getId()),
    4848                        ImageProvider.get("data", "object"),
    4949                        JLabel.HORIZONTAL
     
    6262
    6363        if (decision.equals(MergeDecisionType.KEEP_MINE)) {
    64             if (conflict.getMy().deleted) {
     64            if (conflict.getMy().isDeleted()) {
    6565                // because my was involved in a conflict it my still be referred
    6666                // to from a way or a relation. Fix this now.
  • trunk/src/org/openstreetmap/josm/command/MoveCommand.java

    r2017 r2025  
    6969            OldState os = new OldState();
    7070            os.latlon = new LatLon(n.getCoor());
    71             os.modified = n.modified;
     71            os.modified = n.isModified();
    7272            oldState.add(os);
    7373        }
     
    9393        for (Node n : nodes) {
    9494            n.setEastNorth(n.getEastNorth().add(x, y));
    95             n.modified = true;
     95            n.setModified(true);
    9696        }
    9797        return true;
     
    103103            OldState os = it.next();
    104104            n.setCoor(os.latlon);
    105             n.modified = os.modified;
     105            n.setModified(os.modified);
    106106        }
    107107    }
  • trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java

    r1894 r2025  
    4242        if (Main.map != null && Main.map.mapView.getActiveLayer() instanceof OsmDataLayer) {
    4343            OsmDataLayer data = (OsmDataLayer)Main.map.mapView.getActiveLayer();
    44             data.setModified(true);
    4544            data.fireDataChange();
    4645        }
     
    6261        if (Main.map != null && Main.map.mapView.getActiveLayer() instanceof OsmDataLayer) {
    6362            OsmDataLayer data = (OsmDataLayer)Main.map.mapView.getActiveLayer();
    64             data.setModified(data.uploadedModified || !commands.isEmpty());
    6563            data.fireDataChange();
    6664        }
     
    8179        if (Main.map != null && Main.map.mapView.getActiveLayer() instanceof OsmDataLayer) {
    8280            OsmDataLayer data = (OsmDataLayer)Main.map.mapView.getActiveLayer();
    83             data.setModified(true);
    8481            data.fireDataChange();
    8582        }
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r1997 r2025  
    8383        Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
    8484        for (OsmPrimitive osm : allPrimitives())
    85             if (osm.visible && !osm.deleted) {
     85            if (osm.isVisible() && !osm.isDeleted()) {
    8686                o.add(osm);
    8787            }
     
    9292        Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
    9393        for (OsmPrimitive osm : allPrimitives())
    94             if (osm.visible && !osm.deleted && !osm.incomplete) {
     94            if (osm.isVisible() && !osm.isDeleted() && !osm.incomplete) {
    9595                o.add(osm);
    9696            }
     
    101101        Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
    102102        for (OsmPrimitive osm : allPrimitives())
    103             if (osm.visible && !osm.deleted && !osm.incomplete && !(osm instanceof Relation)) {
     103            if (osm.isVisible() && !osm.isDeleted() && !osm.incomplete && !(osm instanceof Relation)) {
    104104                o.add(osm);
    105105            }
     
    230230            return sel;
    231231        for (OsmPrimitive osm : list)
    232             if (osm.isSelected() && !osm.deleted) {
     232            if (osm.isSelected() && !osm.isDeleted()) {
    233233                sel.add(osm);
    234234            }
     
    290290                    String as = h.get(a);
    291291                    if (as == null) {
    292                         as = a.getName() != null ? a.getName() : Long.toString(a.id);
     292                        as = a.getName() != null ? a.getName() : Long.toString(a.getId());
    293293                        h.put(a, as);
    294294                    }
    295295                    String bs = h.get(b);
    296296                    if (bs == null) {
    297                         bs = b.getName() != null ? b.getName() : Long.toString(b.id);
     297                        bs = b.getName() != null ? b.getName() : Long.toString(b.getId());
    298298                        h.put(b, bs);
    299299                    }
     
    320320            throw new IllegalArgumentException(tr("parameter {0} > 0 required. Got {1}.", "id", id));
    321321        for (OsmPrimitive primitive : nodes) {
    322             if (primitive.id == id) return primitive;
     322            if (primitive.getId() == id) return primitive;
    323323        }
    324324        for (OsmPrimitive primitive : ways) {
    325             if (primitive.id == id) return primitive;
     325            if (primitive.getId() == id) return primitive;
    326326        }
    327327        for (OsmPrimitive primitive : relations) {
    328             if (primitive.id == id) return primitive;
     328            if (primitive.getId() == id) return primitive;
    329329        }
    330330        return null;
     
    334334        HashSet<Long> ret = new HashSet<Long>();
    335335        for (OsmPrimitive primitive : nodes) {
    336             ret.add(primitive.id);
     336            ret.add(primitive.getId());
    337337        }
    338338        for (OsmPrimitive primitive : ways) {
    339             ret.add(primitive.id);
     339            ret.add(primitive.getId());
    340340        }
    341341        for (OsmPrimitive primitive : relations) {
    342             ret.add(primitive.id);
     342            ret.add(primitive.getId());
    343343        }
    344344        return ret;
     
    346346
    347347    /**
    348      * Replies the set of ids of all complete primitivies (i.e. those with
     348     * Replies the set of ids of all complete primitives (i.e. those with
    349349     * ! primitive.incomplete)
    350350     *
    351      * @return the set of ids of all complete primitivies
     351     * @return the set of ids of all complete primitives
    352352     */
    353353    public Set<Long> getCompletePrimitiveIds() {
     
    355355        for (OsmPrimitive primitive : nodes) {
    356356            if (!primitive.incomplete) {
    357                 ret.add(primitive.id);
     357                ret.add(primitive.getId());
    358358            }
    359359        }
    360360        for (OsmPrimitive primitive : ways) {
    361361            if (! primitive.incomplete) {
    362                 ret.add(primitive.id);
     362                ret.add(primitive.getId());
    363363            }
    364364        }
    365365        for (OsmPrimitive primitive : relations) {
    366366            if (! primitive.incomplete) {
    367                 ret.add(primitive.id);
     367                ret.add(primitive.getId());
    368368            }
    369369        }
     
    451451        return parents;
    452452    }
     453
     454    /**
     455     * Replies true if there is at least one primitive in this dataset with
     456     * {@see OsmPrimitive#isModified()} == <code>true</code>.
     457     *
     458     * @return true if there is at least one primitive in this dataset with
     459     * {@see OsmPrimitive#isModified()} == <code>true</code>.
     460     */
     461    public boolean isModified() {
     462        for (Node n: nodes) {
     463            if (n.isModified()) return true;
     464        }
     465        for (Way w: ways) {
     466            if (w.isModified()) return true;
     467        }
     468        for (Relation r: relations) {
     469            if (r.isModified()) return true;
     470        }
     471        return false;
     472    }
    453473}
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r2017 r2025  
    6969     * new to the server! To create a new object, call the default constructor of
    7070     * the respective class.
    71      */
     71     *
     72     * @deprecated use {@see #getId()}. Don't assign an id, create a primitive with
     73     * the respective constructors.
     74     */
     75    @Deprecated
    7276    public long id = 0;
    7377
     
    7781     * Deleted objects are deleted from the server. If the objects are added (id=0),
    7882     * the modified is ignored and the object is added to the server.
    79      */
     83     *
     84     * @deprecated Please use {@see #setModified()} and {@see #getModified()}
     85     */
     86    @Deprecated
    8087    public boolean modified = false;
    8188
    8289    /**
    8390     * <code>true</code>, if the object has been deleted.
    84      */
     91     *
     92     * @deprecated use {@see #delete()} and {@see #isDeleted()}
     93     */
     94    @Deprecated
    8595    public boolean deleted = false;
    8696
     
    8999     * introduced with the 0.4 API to be able to communicate deleted objects
    90100     * (they will have visible=false).
    91      */
     101     *
     102     * @deprecated use {@see #isVisible()} and {@see #setVisible(boolean)}
     103     */
     104    @Deprecated
    92105    public boolean visible = true;
    93106
     
    100113    /**
    101114     * If set to true, this object is currently selected.
     115     *
     116     * @deprecated use {@see #isSelected()} and {@see #setSelected(boolean)}
    102117     */
    103118    @Deprecated
     
    121136    public boolean isSelected() {
    122137        return selected;
     138    }
     139
     140    /**
     141     * Marks this primitive as being modified.
     142     *
     143     * @param modified true, if this primitive is to be modified
     144     */
     145    public void setModified(boolean modified) {
     146        this.modified = modified;
     147    }
     148
     149    /**
     150     * Replies <code>true</code> if the object has been modified since it was loaded from
     151     * the server. In this case, on next upload, this object will be updated.
     152     *
     153     * @return <code>true</code> if the object has been modified since it was loaded from
     154     * the server
     155     */
     156    public boolean isModified() {
     157        return modified;
     158    }
     159
     160    /**
     161     * Replies <code>true</code>, if the object has been deleted.
     162     *
     163     * @return <code>true</code>, if the object has been deleted.
     164     * @see #delete(boolean)
     165     */
     166    public boolean isDeleted() {
     167        return deleted;
     168    }
     169
     170    /**
     171     * Replies true if this primitive is either unknown to the server (i.e. its id
     172     * is 0) or it is known to the server and it hasn't be deleted on the server.
     173     * Replies false, if this primitive is known on the server and has been deleted
     174     * on the server.
     175     *
     176     * @see #setVisible(boolean)
     177     */
     178    public boolean isVisible() {
     179        return visible;
     180    }
     181
     182    /**
     183     * Sets whether this primitive is visible, i.e. whether it is known on the server
     184     * and not deleted on the server.
     185     *
     186     * @see #isVisible()
     187     * @throws IllegalStateException thrown if visible is set to false on an primitive with
     188     * id==0
     189     */
     190    public void setVisible(boolean visible) throws IllegalStateException{
     191        if (id == 0 && visible == false)
     192            throw new IllegalStateException(tr("a primitive with id=0 can't be invisible"));
     193        this.visible = visible;
     194    }
     195
     196    /**
     197     * Replies the id of this primitive.
     198     *
     199     * @return the id of this primitive.
     200     */
     201    public long getId() {
     202        return id;
    123203    }
    124204
     
    502582     */
    503583    public abstract String getDisplayName(NameFormatter formatter);
     584
    504585}
     586
     587
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/CreateOsmChangeVisitor.java

    r1677 r2025  
    4747
    4848    public void visit(Node n) {
    49         if (n.deleted) {
     49        if (n.isDeleted()) {
    5050            switchMode("delete");
    5151            osmwriter.setWithBody(false);
    5252            osmwriter.visit(n);
    5353        } else {
    54             switchMode((n.id == 0) ? "create" : "modify");
     54            switchMode((n.getId() == 0) ? "create" : "modify");
    5555            osmwriter.setWithBody(true);
    5656            osmwriter.visit(n);
     
    5858    }
    5959    public void visit(Way w) {
    60         if (w.deleted) {
     60        if (w.isDeleted()) {
    6161            switchMode("delete");
    6262            osmwriter.setWithBody(false);
    6363            osmwriter.visit(w);
    6464        } else {
    65             switchMode((w.id == 0) ? "create" : "modify");
     65            switchMode((w.getId() == 0) ? "create" : "modify");
    6666            osmwriter.setWithBody(true);
    6767            osmwriter.visit(w);
     
    6969    }
    7070    public void visit(Relation r) {
    71         if (r.deleted) {
     71        if (r.isDeleted()) {
    7272            switchMode("delete");
    7373            osmwriter.setWithBody(false);
    7474            osmwriter.visit(r);
    7575        } else {
    76             switchMode((r.id == 0) ? "create" : "modify");
     76            switchMode((r.getId() == 0) ? "create" : "modify");
    7777            osmwriter.setWithBody(true);
    7878            osmwriter.visit(r);
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java

    r1990 r2025  
    529529            for (RelationMember m : r.getMembers())
    530530            {
    531                 if (m.isNode() && !m.getMember().incomplete && !m.getMember().deleted)
     531                if (m.isNode() && !m.getMember().incomplete && !m.getMember().isDeleted())
    532532                {
    533533                    drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember()) : null, true, true);
     
    550550            for (RelationMember m : r.getMembers())
    551551            {
    552                 if (m.isWay() && !m.getMember().incomplete && !m.getMember().deleted) /* nodes drawn on second call */
     552                if (m.isWay() && !m.getMember().incomplete && !m.getMember().isDeleted()) /* nodes drawn on second call */
    553553                {
    554554                    drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember())
     
    580580                // TODO Nullable member will not be allowed after RelationMember.member is encalupsed
    581581                r.putError(tr("Empty member in relation."), true);
    582             } else if(m.getMember().deleted) {
     582            } else if(m.getMember().isDeleted()) {
    583583                r.putError(tr("Deleted member ''{0}'' in relation.",
    584584                        m.getMember().getDisplayName(DefaultNameFormatter.getInstance())), true);
     
    834834                //TODO Remove useless nullcheck when RelationMember.member is encalupsed
    835835                r.putError(tr("Empty member in relation."), true);
    836             } else if(m.getMember().deleted) {
     836            } else if(m.getMember().isDeleted()) {
    837837                r.putError(tr("Deleted member ''{0}'' in relation.",
    838838                        m.getMember().getDisplayName(DefaultNameFormatter.getInstance())), true);
     
    13791379            for (final Relation osm : data.relations)
    13801380            {
    1381                 if(!osm.deleted && !osm.incomplete && osm.mappaintVisibleCode != viewid)
     1381                if(!osm.isDeleted() && !osm.incomplete && osm.mappaintVisibleCode != viewid)
    13821382                {
    13831383                    osm.visit(this);
     
    13961396            for (final Way osm : data.ways)
    13971397            {
    1398                 if (!osm.incomplete && !osm.deleted
     1398                if (!osm.incomplete && !osm.isDeleted()
    13991399                        && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid)
    14001400                {
     
    14371437            //    profilerN = 0;
    14381438            for (final OsmPrimitive osm : data.ways)
    1439                 if (!osm.incomplete && !osm.deleted && !osm.isSelected()
     1439                if (!osm.incomplete && !osm.isDeleted() && !osm.isSelected()
    14401440                        && osm.mappaintVisibleCode != viewid )
    14411441                {
     
    14561456        //profilerN = 0;
    14571457        for (final OsmPrimitive osm : data.getSelected()) {
    1458             if (!osm.incomplete && !osm.deleted && !(osm instanceof Node)
     1458            if (!osm.incomplete && !osm.isDeleted() && !(osm instanceof Node)
    14591459                    && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid)
    14601460            {
     
    14761476        //profilerN = 0;
    14771477        for (final OsmPrimitive osm : data.nodes)
    1478             if (!osm.incomplete && !osm.deleted
     1478            if (!osm.incomplete && !osm.isDeleted()
    14791479                    && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid)
    14801480            {
     
    14961496            currentColor = nodeColor;
    14971497            for (final OsmPrimitive osm : data.ways)
    1498                 if (!osm.incomplete && !osm.deleted
     1498                if (!osm.incomplete && !osm.isDeleted()
    14991499                        && osm.mappaintVisibleCode != viewid )
    15001500                {
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java

    r1951 r2025  
    9494        for (RelationMember member: r.getMembers()) {
    9595            newMembers.add(
    96                 new RelationMember(member.getRole(), mappedPrimitives.get(member.getMember())));
     96                    new RelationMember(member.getRole(), mappedPrimitives.get(member.getMember())));
    9797
    9898        }
     
    117117        OsmPrimitive clone = null;
    118118        if (primitive instanceof Node) {
    119             clone = new Node(primitive.id);
     119            clone = new Node(primitive.getId());
    120120        } else if (primitive instanceof Way) {
    121             clone = new Way(primitive.id);
     121            clone = new Way(primitive.getId());
    122122        } else if (primitive instanceof Relation) {
    123             clone = new Relation(primitive.id);
     123            clone = new Relation(primitive.getId());
    124124        }
    125125        clone.incomplete = true;
     
    176176
    177177    protected boolean isNew(OsmPrimitive primitive) {
    178         return primitive.id == 0;
     178        return primitive.getId() == 0;
    179179    }
    180180
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java

    r1948 r2025  
    6262        this.theirDataSet = theirDataSet;
    6363
    64         for (Node n : myDataSet.nodes) if (n.id != 0) {
    65             nodeshash.put(n.id, n);
    66         }
    67         for (Way w : myDataSet.ways) if (w.id != 0) {
    68             wayshash.put(w.id, w);
    69         }
    70         for (Relation r : myDataSet.relations) if (r.id != 0) {
    71             relshash.put(r.id, r);
     64        for (Node n : myDataSet.nodes) if (n.getId() != 0) {
     65            nodeshash.put(n.getId(), n);
     66        }
     67        for (Way w : myDataSet.ways) if (w.getId() != 0) {
     68            wayshash.put(w.getId(), w);
     69        }
     70        for (Relation r : myDataSet.relations) if (r.getId() != 0) {
     71            relshash.put(r.getId(), r);
    7272        }
    7373        conflicts = new ConflictCollection();
     
    9898            HashMap<Long, P> primitivesWithDefinedIds) {
    9999
    100         if (other.id > 0 ) {
     100        if (other.getId() > 0 ) {
    101101            // try to merge onto a matching primitive with the same
    102102            // defined id
     
    109109            //
    110110            for (P my : myPrimitives) {
    111                 if (my.id >0 ) {
     111                if (my.getId() >0 ) {
    112112                    continue;
    113113                }
    114114                if (my.hasEqualSemanticAttributes(other)) {
    115                     if (my.deleted != other.deleted) {
     115                    if (my.isDeleted() != other.isDeleted()) {
    116116                        // differences in deleted state have to be merged manually
    117117                        //
     
    120120                        // copy the technical attributes from other
    121121                        // version
    122                         my.visible = other.visible;
     122                        my.setVisible(other.isVisible());
    123123                        my.user = other.user;
    124124                        my.setTimestamp(other.getTimestamp());
    125                         my.modified = other.modified;
     125                        my.setModified(other.isModified());
    126126                        merged.put(other, my);
    127127                    }
     
    186186            Node mergedNode = (Node) merged.get(myNode);
    187187            if (mergedNode != null) {
    188                 if (!mergedNode.deleted) {
     188                if (!mergedNode.isDeleted()) {
    189189                    newNodes.add(mergedNode);
    190190                }
     
    207207                newMembers.add(myMember);
    208208            } else {
    209                 if (! mergedMember.deleted) {
     209                if (! mergedMember.isDeleted()) {
    210210                    RelationMember newMember = new RelationMember(myMember.getRole(), mergedMember);
    211211                    newMembers.add(newMember);
     
    234234        // merge other into an existing primitive with the same id, if possible
    235235        //
    236         if (myPrimitivesWithDefinedIds.containsKey(other.id)) {
    237             P my = myPrimitivesWithDefinedIds.get(other.id);
     236        if (myPrimitivesWithDefinedIds.containsKey(other.getId())) {
     237            P my = myPrimitivesWithDefinedIds.get(other.getId());
    238238            if (my.version <= other.version) {
    239                 if (! my.visible && other.visible) {
     239                if (! my.isVisible() && other.isVisible()) {
    240240                    // should not happen
    241241                    //
     
    243243                            + "their primitive with lower version {2} is not visible. "
    244244                            + "Can't deal with this inconsistency. Keeping my primitive. ",
    245                             Long.toString(my.id),Long.toString(my.version), Long.toString(other.version)
     245                            Long.toString(my.getId()),Long.toString(my.version), Long.toString(other.version)
    246246                    ));
    247247                    merged.put(other, my);
    248                 } else if (my.visible && ! other.visible) {
     248                } else if (my.isVisible() && ! other.isVisible()) {
    249249                    // this is always a conflict because the user has to decide whether
    250250                    // he wants to create a clone of its local primitive or whether he
     
    270270                    //
    271271                    merged.put(other, my);
    272                 } else if (my.deleted && ! other.deleted && my.version == other.version) {
     272                } else if (my.isDeleted() && ! other.isDeleted() && my.version == other.version) {
    273273                    // same version, but my is deleted. Assume mine takes precedence
    274274                    // otherwise too many conflicts when refreshing from the server
    275275                    merged.put(other, my);
    276                 } else if (my.deleted != other.deleted) {
     276                } else if (my.isDeleted() != other.isDeleted()) {
    277277                    // differences in deleted state have to be resolved manually
    278278                    //
    279279                    conflicts.add(my,other);
    280                 } else if (! my.modified && other.modified) {
     280                } else if (! my.isModified() && other.isModified()) {
    281281                    // my not modified. We can assume that other is the most recent version.
    282282                    // clone it onto my. But check first, whether other is deleted. if so,
    283283                    // make sure that my is not references anymore in myDataSet.
    284284                    //
    285                     if (other.deleted) {
     285                    if (other.isDeleted()) {
    286286                        myDataSet.unlinkReferencesToPrimitive(my);
    287287                    }
    288288                    my.cloneFrom(other);
    289289                    merged.put(other, my);
    290                 } else if (! my.modified && !other.modified && my.version == other.version) {
     290                } else if (! my.isModified() && !other.isModified() && my.version == other.version) {
    291291                    // both not modified. Keep mine
    292292                    //
    293293                    merged.put(other,my);
    294                 } else if (! my.modified && !other.modified && my.version < other.version) {
     294                } else if (! my.isModified() && !other.isModified() && my.version < other.version) {
    295295                    // my not modified but other is newer. clone other onto mine.
    296296                    //
    297297                    my.cloneFrom(other);
    298298                    merged.put(other,my);
    299                 } else if (my.modified && ! other.modified && my.version == other.version) {
     299                } else if (my.isModified() && ! other.isModified() && my.version == other.version) {
    300300                    // my is same as other but mine is modified
    301301                    // => keep mine
     
    312312                    //
    313313                    my.cloneFrom(other);
    314                     my.modified = true;
     314                    my.setModified(true);
    315315                    merged.put(other, my);
    316316                }
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java

    r1938 r2025  
    5656    /**
    5757     * Preferences
    58     */
     58     */
    5959    protected Color inactiveColor;
    6060    protected Color selectedColor;
     
    124124
    125125        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
    126             Main.pref.getBoolean("mappaint.use-antialiasing", false) ?
    127             RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
     126                Main.pref.getBoolean("mappaint.use-antialiasing", false) ?
     127                        RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF);
    128128    }
    129129
     
    149149        //profilerN = 0;
    150150        for (final OsmPrimitive osm : data.relations)
    151             if (!osm.deleted && !osm.isSelected())
     151            if (!osm.isDeleted() && !osm.isSelected())
    152152            {
    153153                osm.visit(this);
    154         //        profilerN++;
     154                //        profilerN++;
    155155            }
    156156
     
    163163        //profilerN = 0;
    164164        for (final OsmPrimitive osm : data.ways)
    165             if (!osm.deleted && !osm.isSelected() && osm.isTagged())
     165            if (!osm.isDeleted() && !osm.isSelected() && osm.isTagged())
    166166            {
    167167                osm.visit(this);
    168         //        profilerN++;
     168                //        profilerN++;
    169169            }
    170170        displaySegments();
    171171
    172172        for (final OsmPrimitive osm : data.ways)
    173             if (!osm.deleted && !osm.isSelected() && !osm.isTagged())
     173            if (!osm.isDeleted() && !osm.isSelected() && !osm.isTagged())
    174174            {
    175175                osm.visit(this);
    176         //        profilerN++;
     176                //        profilerN++;
    177177            }
    178178        displaySegments();
     
    187187        //profilerN = 0;
    188188        for (final OsmPrimitive osm : data.getSelected())
    189             if (!osm.deleted)
     189            if (!osm.isDeleted())
    190190            {
    191191                osm.visit(this);
    192         //        profilerN++;
     192                //        profilerN++;
    193193            }
    194194        displaySegments();
     
    202202        //profilerN = 0;
    203203        for (final OsmPrimitive osm : data.nodes)
    204             if (!osm.deleted && !osm.isSelected())
     204            if (!osm.isDeleted() && !osm.isSelected())
    205205            {
    206206                osm.visit(this);
    207         //        profilerN++;
     207                //        profilerN++;
    208208            }
    209209
     
    217217        if(virtualNodeSize != 0)
    218218        {
    219         //    profilerN = 0;
     219            //    profilerN = 0;
    220220            currentColor = nodeColor;
    221221            for (final OsmPrimitive osm : data.ways)
    222                 if (!osm.deleted)
    223                     {
    224                         visitVirtual((Way)osm);
    225         //                profilerN++;
    226                     }
     222                if (!osm.isDeleted())
     223                {
     224                    visitVirtual((Way)osm);
     225                    //                profilerN++;
     226                }
    227227            displaySegments();
    228228
    229         //    if(profiler)
    230         //    {
    231         //        System.out.format("Virtual  : %4dms, n=%5d\n", (java.lang.System.currentTimeMillis()-profilerLast), profilerN);
    232         //        profilerLast = java.lang.System.currentTimeMillis();
    233         //    }
     229            //    if(profiler)
     230            //    {
     231            //        System.out.format("Virtual  : %4dms, n=%5d\n", (java.lang.System.currentTimeMillis()-profilerLast), profilerN);
     232            //        profilerLast = java.lang.System.currentTimeMillis();
     233            //    }
    234234        }
    235235
     
    249249        if (n.incomplete) return;
    250250
    251         if (inactive)
     251        if (inactive) {
    252252            drawNode(n, inactiveColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
    253         else if (n.highlighted)
     253        } else if (n.highlighted) {
    254254            drawNode(n, highlightColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
    255         else if (n.isSelected())
     255        } else if (n.isSelected()) {
    256256            drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
    257         else if(n.isTagged())
     257        } else if(n.isTagged()) {
    258258            drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
    259         else
     259        } else {
    260260            drawNode(n, nodeColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
     261        }
    261262    }
    262263
    263264    public static Boolean isLargeSegment(Point p1, Point p2, int space)
    264265    {
    265         int xd = p1.x-p2.x; if(xd < 0) xd = -xd;
    266         int yd = p1.y-p2.y; if(yd < 0) yd = -yd;
     266        int xd = p1.x-p2.x; if(xd < 0) {
     267            xd = -xd;
     268        }
     269        int yd = p1.y-p2.y; if(yd < 0) {
     270            yd = -yd;
     271        }
    267272        return (xd+yd > space);
    268273    }
     
    325330                Point p = nc.getPoint(it.next());
    326331                drawSegment(lastP, p, wayColor,
    327                     showOnlyHeadArrowOnly ? !it.hasNext() : showThisDirectionArrow);
    328                 if (showOrderNumber)
     332                        showOnlyHeadArrowOnly ? !it.hasNext() : showThisDirectionArrow);
     333                if (showOrderNumber) {
    329334                    drawOrderNumber(lastP, p, orderNumber);
     335                }
    330336                lastP = p;
    331337            }
     
    334340
    335341    private Stroke relatedWayStroke = new BasicStroke(
    336         4, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);
     342            4, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);
    337343    public void visit(Relation r) {
    338344        if (r.incomplete) return;
     
    349355
    350356        for (RelationMember m : r.getMembers()) {
    351             if (m.getMember().incomplete || m.getMember().deleted) continue;
     357            if (m.getMember().incomplete || m.getMember().isDeleted()) {
     358                continue;
     359            }
    352360
    353361            if (m.isNode()) {
    354362                Point p = nc.getPoint(m.getNode());
    355363                if (p.x < 0 || p.y < 0
    356                     || p.x > nc.getWidth() || p.y > nc.getHeight()) continue;
     364                        || p.x > nc.getWidth() || p.y > nc.getHeight()) {
     365                    continue;
     366                }
    357367
    358368                g.drawOval(p.x-3, p.y-3, 6, 6);
     
    362372                boolean first = true;
    363373                for (Node n : m.getWay().getNodes()) {
    364                     if (n.incomplete || n.deleted) continue;
     374                    if (n.incomplete || n.isDeleted()) {
     375                        continue;
     376                    }
    365377                    Point p = nc.getPoint(n);
    366378                    if (first) {
     
    418430                g.fillRect(p.x - radius, p.y - radius, size, size);
    419431                g.drawRect(p.x - radius, p.y - radius, size, size);
    420             } else
     432            } else {
    421433                g.drawRect(p.x - radius, p.y - radius, size, size);
     434            }
    422435        }
    423436    }
     
    427440     */
    428441    protected void drawSegment(Point p1, Point p2, Color col, boolean showDirection) {
    429         if (col != currentColor) displaySegments(col);
     442        if (col != currentColor) {
     443            displaySegments(col);
     444        }
    430445
    431446        if (isSegmentVisible(p1, p2)) {
  • trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java

    r2003 r2025  
    33import java.awt.Component;
    44import java.awt.Dimension;
     5import java.awt.Frame;
    56import java.awt.GridBagLayout;
    67import java.awt.Toolkit;
     
    202203        super.setVisible(visible);
    203204        if (visible) {
    204             toFront();
     205            repaint();
    205206        }
    206207    }
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r2017 r2025  
    4747        mainFrame.addWindowListener(new WindowAdapter(){
    4848            @Override public void windowClosing(final WindowEvent arg0) {
    49                 if (Main.breakBecauseUnsavedChanges())
     49                if (!Main.saveUnsavedModifications())
    5050                    return;
    5151                Main.saveGuiGeometry();
     
    7373        final Map<String, Collection<String>> args = new HashMap<String, Collection<String>>();
    7474        for (String arg : argArray) {
    75             if (!arg.startsWith("--"))
     75            if (!arg.startsWith("--")) {
    7676                arg = "--download="+arg;
     77            }
    7778            int i = arg.indexOf('=');
    7879            String key = i == -1 ? arg.substring(2) : arg.substring(2,i);
    7980            String value = i == -1 ? "" : arg.substring(i+1);
    8081            Collection<String> v = args.get(key);
    81             if (v == null)
     82            if (v == null) {
    8283                v = new LinkedList<String>();
     84            }
    8385            v.add(value);
    8486            args.put(key, v);
     
    8890
    8991        // Check if passed as parameter
    90         if (args.containsKey("language"))
     92        if (args.containsKey("language")) {
    9193            I18n.set((String)(args.get("language").toArray()[0]));
    92         else
     94        } else {
    9395            I18n.set(Main.pref.get("language", null));
     96        }
    9497
    9598        if (argList.contains("--help") || argList.contains("-?") || argList.contains("-h")) {
     
    143146
    144147        if (((!args.containsKey("no-maximize") && !args.containsKey("geometry")
    145         && Main.pref.get("gui.geometry").length() == 0) || args.containsKey("maximize"))
    146         && Toolkit.getDefaultToolkit().isFrameStateSupported(JFrame.MAXIMIZED_BOTH))
     148                && Main.pref.get("gui.geometry").length() == 0) || args.containsKey("maximize"))
     149                && Toolkit.getDefaultToolkit().isFrameStateSupported(JFrame.MAXIMIZED_BOTH)) {
    147150            mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
     151        }
    148152
    149153        EventQueue.invokeLater(new Runnable() {
     
    161165    public static void removeObsoletePreferences() {
    162166        String[] obsolete = {
    163            "sample.preference.that.does.not.exist", // sample comment, expiry date should go here
    164            "osm-server.version", // remove this around 10/2009
    165            "osm-server.additional-versions", // remove this around 10/2009
    166            null
     167                "sample.preference.that.does.not.exist", // sample comment, expiry date should go here
     168                "osm-server.version", // remove this around 10/2009
     169                "osm-server.additional-versions", // remove this around 10/2009
     170                null
    167171        };
    168172        for (String i : obsolete) {
    169             if (i == null) continue;
     173            if (i == null) {
     174                continue;
     175            }
    170176            if (Main.pref.hasKey(i)) {
    171177                Main.pref.removeFromCollection(i, Main.pref.get(i));
  • trunk/src/org/openstreetmap/josm/gui/MapStatus.java

    r1990 r2025  
    194194                            final StringBuilder text = new StringBuilder();
    195195                            String name = osm.getDisplayName(DefaultNameFormatter.getInstance());
    196                             if (osm.id == 0 || osm.modified) {
     196                            if (osm.getId() == 0 || osm.isModified()) {
    197197                                name = "<i><b>"+ osm.getDisplayName(DefaultNameFormatter.getInstance())+"*</b></i>";
    198198                            }
    199199                            text.append(name);
    200                             if (osm.id != 0) {
    201                                 text.append("<br>id="+osm.id);
     200                            if (osm.getId() != 0) {
     201                                text.append("<br>id="+osm.getId());
    202202                            }
    203203                            for (Entry<String, String> e : osm.entrySet()) {
  • trunk/src/org/openstreetmap/josm/gui/MapView.java

    r1952 r2025  
    4444import org.openstreetmap.josm.gui.layer.MapViewPaintable;
    4545import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    46 import org.openstreetmap.josm.gui.layer.OsmDataLayer.ModifiedChangedListener;
    4746import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
    4847import org.openstreetmap.josm.gui.layer.markerlayer.PlayHeadMarker;
     
    152151     */
    153152    public void addLayer(Layer layer) {
    154         if (layer instanceof OsmDataLayer) {
    155             OsmDataLayer editLayer = (OsmDataLayer)layer;
    156             editLayer.listenerModified.add(new ModifiedChangedListener(){
    157                 public void modifiedChanged(boolean value, OsmDataLayer source) {
    158                     JOptionPane.getFrameForComponent(Main.parent).setTitle((value?"*":"")
    159                             +tr("Java OpenStreetMap Editor"));
    160                 }
    161             });
    162         }
    163153        if (layer instanceof MarkerLayer && playHeadMarker == null) {
    164154            playHeadMarker = PlayHeadMarker.create();
     
    510500            }
    511501        }
     502        if (layer instanceof OsmDataLayer) {
     503            refreshTitle((OsmDataLayer)layer);
     504        }
    512505
    513506        /* This only makes the buttons look disabled. Disabling the actions as well requires
     
    600593        if (evt.getPropertyName().equals(Layer.VISIBLE_PROP)) {
    601594            repaint();
     595        } else if (evt.getPropertyName().equals(OsmDataLayer.REQUIRES_SAVE_TO_DISK_PROP)
     596                || evt.getPropertyName().equals(OsmDataLayer.REQUIRES_UPLOAD_TO_SERVER_PROP)) {
     597            OsmDataLayer layer = (OsmDataLayer)evt.getSource();
     598            if (layer == getEditLayer()) {
     599                refreshTitle(layer);
     600            }
     601        }
     602    }
     603
     604    protected void refreshTitle(OsmDataLayer layer) {
     605        boolean dirty = layer.requiresSaveToFile() || layer.requiresUploadToServer();
     606        if (dirty) {
     607            JOptionPane.getFrameForComponent(Main.parent).setTitle("* " + tr("Java OpenStreetMap Editor"));
     608        } else {
     609            JOptionPane.getFrameForComponent(Main.parent).setTitle(tr("Java OpenStreetMap Editor"));
    602610        }
    603611    }
  • trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java

    r1941 r2025  
    7474        double dist = getDist100Pixel();
    7575        return dist >= 2000 ? Math.round(dist/100)/10 +" km" : (dist >= 1
    76         ? Math.round(dist*10)/10 +" m" : "< 1 m");
     76                ? Math.round(dist*10)/10 +" m" : "< 1 m");
    7777    }
    7878
     
    112112                        center.east() - getWidth()/2.0*scale,
    113113                        center.north() - getHeight()/2.0*scale),
    114                 new EastNorth(
    115                         center.east() + getWidth()/2.0*scale,
    116                         center.north() + getHeight()/2.0*scale));
     114                        new EastNorth(
     115                                center.east() + getWidth()/2.0*scale,
     116                                center.north() + getHeight()/2.0*scale));
    117117    };
    118118
     
    121121        Bounds b = getProjection().getWorldBoundsLatLon();
    122122        return new ProjectionBounds(getProjection().latlon2eastNorth(b.min),
    123             getProjection().latlon2eastNorth(b.max));
     123                getProjection().latlon2eastNorth(b.max));
    124124    };
    125125
     
    130130                        center.east() - getWidth()/2.0*scale,
    131131                        center.north() - getHeight()/2.0*scale)),
    132                 getProjection().eastNorth2latlon(new EastNorth(
    133                         center.east() + getWidth()/2.0*scale,
    134                         center.north() + getHeight()/2.0*scale)));
     132                        getProjection().eastNorth2latlon(new EastNorth(
     133                                center.east() + getWidth()/2.0*scale,
     134                                center.north() + getHeight()/2.0*scale)));
    135135    };
    136136
     
    189189        if(lon < b.min.lon()) {changed = true; lon = b.min.lon(); }
    190190        else if(lon > b.max.lon()) {changed = true; lon = b.max.lon(); }
    191         if(changed)
    192           newCenter = new CachedLatLon(lat, lon).getEastNorth();
     191        if(changed) {
     192            newCenter = new CachedLatLon(lat, lon).getEastNorth();
     193        }
    193194        if (!newCenter.equals(center)) {
    194195            EastNorth oldCenter = center;
     
    211212            e2 = getProjection().latlon2eastNorth(new LatLon(lat, b.max.lon()));
    212213            d = e2.east() - e1.east();
    213             if(d < width*newScale)
     214            if(d < width*newScale) {
    214215                newScale = Math.max(newScaleH, d/width);
     216            }
    215217        }
    216218        else
    217219        {
    218220            d = d/(l1.greatCircleDistance(l2)*height*10);
    219             if(newScale < d)
     221            if(newScale < d) {
    220222                newScale = d;
     223            }
    221224        }
    222225        if (scale != newScale) {
     
    296299            return null;
    297300        for (Node n : ds.nodes) {
    298             if (n.deleted || n.incomplete) {
     301            if (n.isDeleted() || n.incomplete) {
    299302                continue;
    300303            }
     
    307310            // when multiple nodes on one point, prefer new or selected nodes
    308311            else if(dist == minDistanceSq && minPrimitive != null
    309                     && ((n.id == 0 && n.isSelected())
    310                             || (!minPrimitive.isSelected() && (n.isSelected() || n.id == 0)))) {
     312                    && ((n.getId() == 0 && n.isSelected())
     313                            || (!minPrimitive.isSelected() && (n.isSelected() || n.getId() == 0)))) {
    311314                minPrimitive = n;
    312315            }
     
    327330            return null;
    328331        for (Way w : ds.ways) {
    329             if (w.deleted || w.incomplete) {
     332            if (w.isDeleted() || w.incomplete) {
    330333                continue;
    331334            }
     
    334337            for (Node n : w.getNodes()) {
    335338                i++;
    336                 if (n.deleted || n.incomplete) {
     339                if (n.isDeleted() || n.incomplete) {
    337340                    continue;
    338341                }
     
    451454            return null;
    452455        for (Way w : ds.ways) {
    453             if (w.deleted || w.incomplete) {
     456            if (w.isDeleted() || w.incomplete) {
    454457                continue;
    455458            }
    456459            Node lastN = null;
    457460            for (Node n : w.getNodes()) {
    458                 if (n.deleted || n.incomplete) {
     461                if (n.isDeleted() || n.incomplete) {
    459462                    continue;
    460463                }
     
    477480        }
    478481        for (Node n : ds.nodes) {
    479             if (!n.deleted && !n.incomplete
     482            if (!n.isDeleted() && !n.incomplete
    480483                    && getPoint(n).distanceSq(p) < snapDistance) {
    481484                nearest.add(n);
     
    499502            return null;
    500503        for (Node n : ds.nodes) {
    501             if (!n.deleted && !n.incomplete
     504            if (!n.isDeleted() && !n.incomplete
    502505                    && getPoint(n).distanceSq(p) < snapDistance) {
    503506                nearest.add(n);
  • trunk/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java

    r1811 r2025  
    4545     */
    4646    public PleaseWaitRunnable(String title, boolean ignoreException) {
    47         this(title, new PleaseWaitProgressMonitor(), ignoreException);
     47        this(title, new PleaseWaitProgressMonitor(title), ignoreException);
    4848    }
    4949
    5050    public PleaseWaitRunnable(String title, ProgressMonitor progressMonitor, boolean ignoreException) {
    5151        this.title = title;
    52         this.progressMonitor = progressMonitor == null?new PleaseWaitProgressMonitor():progressMonitor;
     52        this.progressMonitor = progressMonitor == null?new PleaseWaitProgressMonitor(title):progressMonitor;
    5353        this.ignoreException = ignoreException;
    5454        this.progressMonitor.addCancelListener(this);
  • trunk/src/org/openstreetmap/josm/gui/SelectionManager.java

    r1911 r2025  
    286286            // nodes
    287287            for (Node n : nc.getCurrentDataSet().nodes) {
    288                 if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n))) {
     288                if (!n.isDeleted() && !n.incomplete && r.contains(nc.getPoint(n))) {
    289289                    selection.add(n);
    290290                }
     
    293293            // ways
    294294            for (Way w : nc.getCurrentDataSet().ways) {
    295                 if (w.deleted || w.getNodesCount() == 0 || w.incomplete) {
     295                if (w.isDeleted() || w.getNodesCount() == 0 || w.incomplete) {
    296296                    continue;
    297297                }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java

    r1954 r2025  
    4747import org.openstreetmap.josm.gui.MapView;
    4848import org.openstreetmap.josm.gui.SideButton;
     49import org.openstreetmap.josm.gui.io.SaveLayersDialog;
    4950import org.openstreetmap.josm.gui.layer.Layer;
    5051import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     
    299300        }
    300301
    301         protected boolean confirmSkipSaving(OsmDataLayer layer) {
    302             int result = new ExtendedDialog(Main.parent,
    303                     tr("Unsaved Changes"),
    304                     tr("There are unsaved changes in the layer''{0}''. Delete the layer anwyay?",layer.getName()),
    305                     new String[] {tr("Delete Layer"), tr("Cancel")},
    306                     new String[] {"dialogs/delete.png", "cancel.png"}).getValue();
    307 
    308             return result == 1;
    309         }
    310 
    311         protected boolean confirmDeleteLayer(Layer layer) {
    312             return ConditionalOptionPaneUtil.showConfirmationDialog(
    313                     "delete_layer",
    314                     Main.parent,
    315                     tr("Do you really want to delete layer ''{0}''?", layer.getName()),
    316                     tr("Confirmation"),
    317                     JOptionPane.YES_NO_OPTION,
    318                     JOptionPane.QUESTION_MESSAGE,
    319                     JOptionPane.YES_OPTION);
    320         }
    321 
    322         protected DeleteDecision confirmDeleteMultipleLayer(Layer layer, int idx, int numLayers) {
    323             String options[] = new String[] {
    324                     tr("Yes"),
    325                     tr("No"),
    326                     tr("Delete all"),
    327                     tr("Cancel")
    328             };
    329             int ret = ConditionalOptionPaneUtil.showOptionDialog(
    330                     "delete_layer",
    331                     Main.parent,
    332                     tr("Do you really want to delete layer ''{0}''?", layer.getName()),
    333                     tr("Deleting layer {0} of {1}", idx+1, numLayers),
    334                     JOptionPane.DEFAULT_OPTION,
    335                     JOptionPane.QUESTION_MESSAGE,
    336                     options,
    337                     options[0]
    338             );
    339             switch(ret) {
    340                 case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return DeleteDecision.deleteAll;
    341                 case JOptionPane.CLOSED_OPTION: return DeleteDecision.cancel;
    342                 case 0: return DeleteDecision.deleteCurrent;
    343                 case 1: return DeleteDecision.dontDeleteCurrent;
    344                 case 2: return DeleteDecision.deleteAll;
    345                 case 3: return DeleteDecision.cancel;
    346                 default:
    347                     // shouldn't happen. This is the safest option.
    348                     return DeleteDecision.cancel;
    349             }
    350         }
    351 
    352 
    353         public void deleteSingleLayer(Layer layer) {
    354             if (layer == null)
     302        protected boolean enforceUploadOrSaveModifiedData(List<Layer> selectedLayers) {
     303            SaveLayersDialog dialog = new SaveLayersDialog(Main.parent);
     304            List<OsmDataLayer> layersWithUnmodifiedChanges = new ArrayList<OsmDataLayer>();
     305            for (Layer l: selectedLayers) {
     306                if (! (l instanceof OsmDataLayer)) {
     307                    continue;
     308                }
     309                OsmDataLayer odl = (OsmDataLayer)l;
     310                if (odl.requiresSaveToFile() || odl.requiresUploadToServer()) {
     311                    layersWithUnmodifiedChanges.add(odl);
     312                }
     313            }
     314            dialog.prepareForSavingAndUpdatingLayersBeforeDelete();
     315            if (!layersWithUnmodifiedChanges.isEmpty()) {
     316                dialog.getModel().populate(layersWithUnmodifiedChanges);
     317                dialog.setVisible(true);
     318                switch(dialog.getUserAction()) {
     319                    case CANCEL: return false;
     320                    case PROCEED: return true;
     321                    default: return false;
     322                }
     323            }
     324            return true;
     325        }
     326
     327        public void actionPerformed(ActionEvent e) {
     328            List<Layer> selectedLayers;
     329            if (this.layer == null) {
     330                selectedLayers = getModel().getSelectedLayers();
     331            } else {
     332                selectedLayers = Collections.singletonList(this.layer);
     333            }
     334            if (selectedLayers.isEmpty())
    355335                return;
    356             if (layer instanceof OsmDataLayer) {
    357                 OsmDataLayer dataLayer = (OsmDataLayer)layer;
    358                 if (dataLayer.isModified()) {
    359                     if (! confirmSkipSaving(dataLayer))
    360                         return;
    361                 }
    362                 else if (!confirmDeleteLayer(dataLayer))
    363                     return;
    364             } else {
    365                 if (!confirmDeleteLayer(layer))
    366                     return;
    367             }
    368             // model and view are going to be updated via LayerChangeListener
    369             //
    370             Main.main.removeLayer(layer);
    371         }
    372 
    373         public void deleteMultipleLayers(List<Layer> layers) {
    374             boolean doAskConfirmation = true;
    375             for (int i=0; i < layers.size(); i++) {
    376                 Layer layer = layers.get(i);
    377                 if (layer instanceof OsmDataLayer) {
    378                     OsmDataLayer dataLayer = (OsmDataLayer)layer;
    379                     if (dataLayer.isModified() && ! confirmSkipSaving(dataLayer)) {
    380                         continue;
    381                     }
    382                 }
    383                 if (doAskConfirmation) {
    384                     DeleteDecision decision = confirmDeleteMultipleLayer(layer, i, layers.size());
    385                     switch(decision) {
    386                         case deleteCurrent: /* do nothing */ break;
    387                         case deleteAll: doAskConfirmation = false; break;
    388                         case dontDeleteCurrent: continue;
    389                         case cancel: return;
    390                     }
    391                 }
    392                 // model and view are going to be updated via LayerChangeListener
    393                 //
    394                 Main.main.removeLayer(layer);
    395             }
    396         }
    397 
    398         public void actionPerformed(ActionEvent e) {
    399             if (this.layer == null) {
    400                 List<Layer> selectedLayers = getModel().getSelectedLayers();
    401                 if (selectedLayers.isEmpty())
    402                     return;
    403                 if (selectedLayers.size() == 1) {
    404                     deleteSingleLayer(selectedLayers.get(0));
    405                 } else {
    406                     deleteMultipleLayers(selectedLayers);
    407                 }
    408             } else {
    409                 deleteSingleLayer(this.layer);
     336            if (! enforceUploadOrSaveModifiedData(selectedLayers))
     337                return;
     338            for(Layer l: selectedLayers) {
     339                Main.main.removeLayer(l);
    410340            }
    411341        }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r2005 r2025  
    135135            int i = 0;
    136136            for (OsmPrimitive e : DataSet.sort(Main.main.getCurrentDataSet().relations)) {
    137                 if (!e.deleted && !e.incomplete) {
     137                if (!e.isDeleted() && !e.incomplete) {
    138138                    list.setElementAt(e, i++);
    139139                }
     
    381381            Relation copy = new Relation();
    382382            copy.cloneFrom(original);
     383            // FIXME: id is going to be hidden. How to reset a primitive?
     384            //
    383385            copy.id = 0;
    384             copy.modified = true;
     386            copy.setModified(true);
    385387            RelationEditor editor = RelationEditor.getEditor(
    386388                    Main.main.getEditLayer(),
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowser.java

    r2017 r2025  
    107107                    getLayer(),
    108108                    full,
    109                     new PleaseWaitProgressMonitor()
     109                    new PleaseWaitProgressMonitor(tr("Loading parent relations"))
    110110            );
    111111            task.setContinuation(
  • trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java

    r2017 r2025  
    895895                }
    896896            }
    897             new DownloadOsmTaskList().download(false, toDownload, new PleaseWaitProgressMonitor());
     897            new DownloadOsmTaskList().download(false, toDownload, new PleaseWaitProgressMonitor(tr("Download data")));
    898898        }
    899899    }
  • trunk/src/org/openstreetmap/josm/gui/layer/Layer.java

    r2017 r2025  
    4545
    4646    /** keeps track of property change listeners */
    47     private PropertyChangeSupport propertyChangeSupport;
     47    protected PropertyChangeSupport propertyChangeSupport;
    4848
    4949    /**
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r2017 r2025  
    7171 */
    7272public class OsmDataLayer extends Layer {
     73    static public final String REQUIRES_SAVE_TO_DISK_PROP = OsmDataLayer.class.getName() + ".requiresSaveToDisk";
     74    static public final String REQUIRES_UPLOAD_TO_SERVER_PROP = OsmDataLayer.class.getName() + ".requiresUploadToServer";
     75
     76    private boolean requiresSaveToFile = false;
     77    private boolean requiresUploadToServer = false;
     78
     79    protected void setRequiresSaveToFile(boolean newValue) {
     80        boolean oldValue = requiresSaveToFile;
     81        requiresSaveToFile = newValue;
     82        if (oldValue != newValue) {
     83            propertyChangeSupport.firePropertyChange(REQUIRES_SAVE_TO_DISK_PROP, oldValue, newValue);
     84        }
     85    }
     86
     87    protected void setRequiresUploadToServer(boolean newValue) {
     88        boolean oldValue = requiresUploadToServer;
     89        requiresUploadToServer = newValue;
     90        if (oldValue != newValue) {
     91            propertyChangeSupport.firePropertyChange(REQUIRES_UPLOAD_TO_SERVER_PROP, oldValue, newValue);
     92        }
     93    }
    7394
    7495    /** the global counter for created data layers */
     
    96117        private void inc(final OsmPrimitive osm, final int i) {
    97118            normal[i]++;
    98             if (osm.deleted) {
     119            if (osm.isDeleted()) {
    99120                deleted[i]++;
    100121            }
     
    113134    }
    114135
    115     public interface ModifiedChangedListener {
    116         void modifiedChanged(boolean value, OsmDataLayer source);
    117     }
    118136    public interface CommandQueueListener {
    119137        void commandChanged(int queueSize, int redoSize);
     
    130148    private ConflictCollection conflicts;
    131149
    132     /**
    133      * Whether the data of this layer was modified during the session.
    134      */
    135     private boolean modified = false;
    136     /**
    137      * Whether the data was modified due an upload of the data to the server.
    138      */
    139     public boolean uploadedModified = false;
    140 
    141     public final LinkedList<ModifiedChangedListener> listenerModified = new LinkedList<ModifiedChangedListener>();
    142150    public final LinkedList<DataChangeListener> listenerDataChanged = new LinkedList<DataChangeListener>();
    143151
     
    310318    @Override public void visitBoundingBox(final BoundingXYVisitor v) {
    311319        for (final Node n : data.nodes)
    312             if (!n.deleted && !n.incomplete) {
     320            if (!n.isDeleted() && !n.incomplete) {
    313321                v.visit(n);
    314322            }
    315     }
    316 
    317     /**
    318      * Cleanup the layer after save to disk. Just marks the layer as unmodified.
    319      * Leaves the undo/redo stack unchanged.
    320      *
    321      */
    322     public void cleanupAfterSaveToDisk() {
    323         setModified(false);
    324323    }
    325324
     
    333332     */
    334333    public void cleanupAfterUpload(final Collection<OsmPrimitive> processed) {
    335 
    336334        // return immediately if an upload attempt failed
    337335        if (processed == null || processed.isEmpty())
     
    351349            cleanIterator(it, processedSet);
    352350        }
    353 
    354         setModified(true);
    355351    }
    356352
     
    367363        if (!processed.remove(osm))
    368364            return;
    369         osm.modified = false;
    370         if (osm.deleted) {
     365        osm.setModified(false);
     366        if (osm.isDeleted()) {
    371367            it.remove();
    372         }
    373     }
    374 
    375     public boolean isModified() {
    376         return modified;
    377     }
    378 
    379     public void setModified(final boolean modified) {
    380         if (modified == this.modified)
    381             return;
    382         this.modified = modified;
    383         for (final ModifiedChangedListener l : listenerModified) {
    384             l.modifiedChanged(modified, this);
    385368        }
    386369    }
     
    392375        int size = 0;
    393376        for (final OsmPrimitive osm : list)
    394             if (!osm.deleted) {
     377            if (!osm.isDeleted()) {
    395378                size++;
    396379            }
     
    446429
    447430    public void fireDataChange() {
     431        setRequiresSaveToFile(true);
     432        setRequiresUploadToServer(true);
    448433        for (DataChangeListener dcl : listenerDataChanged) {
    449434            dcl.dataChanged(this);
     
    456441        HashSet<Node> doneNodes = new HashSet<Node>();
    457442        for (Way w : data.ways) {
    458             if (w.incomplete || w.deleted) {
     443            if (w.incomplete || w.isDeleted()) {
    459444                continue;
    460445            }
     
    468453            ArrayList<WayPoint> trkseg = null;
    469454            for (Node n : w.getNodes()) {
    470                 if (n.incomplete || n.deleted) {
     455                if (n.incomplete || n.isDeleted()) {
    471456                    trkseg = null;
    472457                    continue;
     
    492477        // records them?
    493478        for (Node n : data.nodes) {
    494             if (n.incomplete || n.deleted || doneNodes.contains(n)) {
     479            if (n.incomplete || n.isDeleted() || doneNodes.contains(n)) {
    495480                continue;
    496481            }
     
    546531        return conflicts;
    547532    }
     533
     534    /**
     535     * Replies true if the data managed by this layer needs to be uploaded to
     536     * the server because it contains at least one modified primitive.
     537     *
     538     * @return true if the data managed by this layer needs to be uploaded to
     539     * the server because it contains at least one modified primitive; false,
     540     * otherwise
     541     */
     542    public boolean requiresUploadToServer() {
     543        return requiresUploadToServer;
     544    }
     545
     546    /**
     547     * Replies true if the data managed by this layer needs to be saved to
     548     * a file. Only replies true if a file is assigned to this layer and
     549     * if the data managed by this layer has been modified since the last
     550     * save operation to the file.
     551     *
     552     * @return true if the data managed by this layer needs to be saved to
     553     * a file
     554     */
     555    public boolean requiresSaveToFile() {
     556        return getAssociatedFile() != null && requiresSaveToFile;
     557    }
     558
     559    /**
     560     * Initializes the layer after a successful load of OSM data from a file
     561     *
     562     */
     563    public void onPostLoadFromFile() {
     564        setRequiresSaveToFile(false);
     565        setRequiresUploadToServer(data.isModified());
     566    }
     567
     568    /**
     569     * Initializes the layer after a successful save of OSM data to a file
     570     *
     571     */
     572    public void onPostSaveToFile() {
     573        setRequiresSaveToFile(false);
     574        setRequiresUploadToServer(data.isModified());
     575    }
     576
     577    /**
     578     * Initializes the layer after a successful upload to the server
     579     *
     580     */
     581    public void onPostUploadToServer() {
     582        setRequiresUploadToServer(false);
     583        // keep requiresSaveToDisk unchanged
     584    }
    548585}
  • trunk/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java

    r2017 r2025  
    2828
    2929    private PleaseWaitDialog dialog;
     30    private String windowTitle;
    3031
    31     public PleaseWaitProgressMonitor() {
     32    public PleaseWaitProgressMonitor(String windowTitle) {
    3233        this(JOptionPane.getFrameForComponent(Main.map));
     34        this.windowTitle = windowTitle;
    3335    }
    3436
     
    8688                    throw new ProgressException("PleaseWaitDialog parent must be either Frame or Dialog");
    8789
     90                if (windowTitle != null) {
     91                    dialog.setTitle(windowTitle);
     92                }
    8893                dialog.cancel.setEnabled(true);
    8994                dialog.setCustomText("");
  • trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java

    r2000 r2025  
    168168    public MultiFetchServerObjectReader append(Node node) {
    169169        if (node == null) return this;
    170         if (node.id == 0) return this;
    171         remember(node.id, OsmPrimitiveType.NODE);
     170        if (node.getId() == 0) return this;
     171        remember(node.getId(), OsmPrimitiveType.NODE);
    172172        return this;
    173173    }
     
    182182    public MultiFetchServerObjectReader append(Way way) {
    183183        if (way == null) return this;
    184         if (way.id == 0) return this;
     184        if (way.getId() == 0) return this;
    185185        for (Node node: way.getNodes()) {
    186             if (node.id > 0) {
    187                 remember(node.id, OsmPrimitiveType.NODE);
    188             }
    189         }
    190         remember(way.id, OsmPrimitiveType.WAY);
     186            if (node.getId() > 0) {
     187                remember(node.getId(), OsmPrimitiveType.NODE);
     188            }
     189        }
     190        remember(way.getId(), OsmPrimitiveType.WAY);
    191191        return this;
    192192    }
     
    201201    public MultiFetchServerObjectReader append(Relation relation) {
    202202        if (relation == null) return this;
    203         if (relation.id == 0) return this;
    204         remember(relation.id, OsmPrimitiveType.RELATION);
     203        if (relation.getId() == 0) return this;
     204        remember(relation.getId(), OsmPrimitiveType.RELATION);
    205205        for (RelationMember member : relation.getMembers()) {
    206206            if (OsmPrimitiveType.from(member.member).equals(OsmPrimitiveType.RELATION)) {
    207207                // avoid infinite recursion in case of cyclic dependencies in relations
    208208                //
    209                 if (relations.contains(member.member.id)) {
     209                if (relations.contains(member.member.getId())) {
    210210                    continue;
    211211                }
     
    373373                String msg = "";
    374374                switch(type) {
    375                 case NODE: msg = tr("Fetching node with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
    376                 case WAY: msg = tr("Fetching way with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
    377                 case RELATION: msg = tr("Fetching relation with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
     375                    case NODE: msg = tr("Fetching node with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
     376                    case WAY: msg = tr("Fetching way with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
     377                    case RELATION: msg = tr("Fetching relation with id {0} from ''{1}''", id, OsmApi.getOsmApi().getBaseUrl()); break;
    378378                }
    379379                progressMonitor.setCustomText(msg);
     
    411411        String msg = "";
    412412        switch(type) {
    413         case NODE: msg = tr("Fetching a package of nodes from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
    414         case WAY:  msg = tr("Fetching a package of ways from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
    415         case RELATION:  msg = tr("Fetching a package of relations from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
     413            case NODE: msg = tr("Fetching a package of nodes from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
     414            case WAY:  msg = tr("Fetching a package of ways from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
     415            case RELATION:  msg = tr("Fetching a package of relations from ''{0}''", OsmApi.getOsmApi().getBaseUrl()); break;
    416416        }
    417417        progressMonitor.setCustomText(msg);
  • trunk/src/org/openstreetmap/josm/io/OsmApi.java

    r1894 r2025  
    251251        if (version.equals("0.5")) {
    252252            // legacy mode does not return the new object version.
    253             sendRequest("PUT", OsmPrimitiveType.from(osm).getAPIName()+"/" + osm.id, toXml(osm, true));
     253            sendRequest("PUT", OsmPrimitiveType.from(osm).getAPIName()+"/" + osm.getId(), toXml(osm, true));
    254254        } else {
    255255            String ret = null;
    256256            // normal mode (0.6 and up) returns new object version.
    257257            try {
    258                 ret = sendRequest("PUT", OsmPrimitiveType.from(osm).getAPIName()+"/" + osm.id, toXml(osm, true));
     258                ret = sendRequest("PUT", OsmPrimitiveType.from(osm).getAPIName()+"/" + osm.getId(), toXml(osm, true));
    259259                osm.version = Integer.parseInt(ret.trim());
    260260            } catch(NumberFormatException e) {
    261                 throw new OsmTransferException(tr("unexpected format of new version of modified primitive ''{0}'', got ''{1}''", osm.id, ret));
     261                throw new OsmTransferException(tr("unexpected format of new version of modified primitive ''{0}'', got ''{1}''", osm.getId(), ret));
    262262            }
    263263        }
     
    303303     */
    304304    public void stopChangeset(ProgressMonitor progressMonitor) throws OsmTransferException {
    305         progressMonitor.beginTask(tr("Closing changeset..."));
     305        progressMonitor.beginTask(tr("Closing changeset {0}...", changeset.getId()));
    306306        try {
    307307            initialize();
    308             sendRequest("PUT", "changeset" + "/" + changeset.id + "/close", null);
     308            sendRequest("PUT", "changeset" + "/" + changeset.getId() + "/close", null);
    309309            changeset = null;
    310310        } finally {
     
    341341            String diff = duv.getDocument();
    342342            try {
    343                 String diffresult = sendRequest("POST", "changeset/" + changeset.id + "/upload", diff);
     343                String diffresult = sendRequest("POST", "changeset/" + changeset.getId() + "/upload", diff);
    344344                DiffResultReader.parseDiffResult(diffresult, list, processed, duv.getNewIdMap(),
    345345                        progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
  • trunk/src/org/openstreetmap/josm/io/OsmExporter.java

    r2017 r2025  
    7676                tmpFile.delete();
    7777            }
    78             layer.cleanupAfterSaveToDisk();
     78            layer.onPostSaveToFile();
    7979        } catch (IOException e) {
    8080            e.printStackTrace();
  • trunk/src/org/openstreetmap/josm/io/OsmImporter.java

    r1811 r2025  
    5050        Main.main.addLayer(layer);
    5151        layer.fireDataChange();
     52        layer.onPostLoadFromFile();
    5253    }
    5354}
  • trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java

    r2004 r2025  
    9595                String msg = "";
    9696                switch(OsmPrimitiveType.from(osm)) {
    97                 case NODE: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"); break;
    98                 case WAY: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"); break;
    99                 case RELATION: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"); break;
     97                    case NODE: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading node ''{4}'' (id: {5})"); break;
     98                    case WAY: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading way ''{4}'' (id: {5})"); break;
     99                    case RELATION: msg = marktr("{0}% ({1}/{2}), {3} left. Uploading relation ''{4}'' (id: {5})"); break;
    100100                }
    101101                progressMonitor.subTask(
     
    105105                                primitives.size(),
    106106                                time_left_str,
    107                                 osm.getName() == null ? osm.id : osm.getName(),
    108                                         osm.id));
     107                                osm.getName() == null ? osm.getId() : osm.getName(),
     108                                        osm.getId()));
    109109                makeApiRequest(osm,progressMonitor);
    110110                processed.add(osm);
     
    117117        } finally {
    118118            try {
    119                 api.stopChangeset(progressMonitor.createSubTaskMonitor(0, false));
     119                // starting the changeset may have failed, for instance because the user
     120                // cancelled the upload task. Only close the changeset if we currently have
     121                // an open changeset
     122
     123                if (api.getCurrentChangeset() != null && api.getCurrentChangeset().getId() > 0) {
     124                    api.stopChangeset(progressMonitor.createSubTaskMonitor(0, false));
     125                }
    120126            } catch(Exception e) {
    121127                Changeset changeset = api.getCurrentChangeset();
    122                 String changesetId = (changeset == null ? tr("unknown") : Long.toString(changeset.id));
     128                String changesetId = (changeset == null ? tr("unknown") : Long.toString(changeset.getId()));
    123129                logger.warning(tr("Failed to close changeset {0}, will be closed by server after timeout. Exception was: {1}",
    124130                        changesetId, e.toString()));
     
    149155            } catch (Exception ee) {
    150156                Changeset changeset = api.getCurrentChangeset();
    151                 String changesetId = (changeset == null ? tr("unknown") : Long.toString(changeset.id));
     157                String changesetId = (changeset == null ? tr("unknown") : Long.toString(changeset.getId()));
    152158                logger.warning(tr("Failed to close changeset {0}, will be closed by server after timeout. Exception was: {1}",
    153159                        changesetId, ee.toString()));
     
    166172
    167173        api.initialize();
    168 
    169         progressMonitor.beginTask("");
    170174
    171175        try {
     
    180184
    181185            if (useChangeset) {
     186                progressMonitor.beginTask(tr("Starting to upload in one request ..."));
    182187                uploadChangesAsDiffUpload(primitives, progressMonitor);
    183188            } else {
     189                progressMonitor.beginTask(tr("Starting to upload with one request per primitive ..."));
    184190                uploadChangesIndividually(primitives, progressMonitor);
    185191            }
     
    190196
    191197    void makeApiRequest(OsmPrimitive osm, ProgressMonitor progressMonitor) throws OsmTransferException {
    192         if (osm.deleted) {
     198        if (osm.isDeleted()) {
    193199            api.deletePrimitive(osm, progressMonitor);
    194         } else if (osm.id == 0) {
     200        } else if (osm.getId() == 0) {
    195201            api.createPrimitive(osm);
    196202        } else {
  • trunk/src/org/openstreetmap/josm/io/OsmWriter.java

    r1938 r2025  
    8585
    8686    private boolean shouldWrite(OsmPrimitive osm) {
    87         return osm.id != 0 || !osm.deleted;
     87        return osm.getId() != 0 || !osm.isDeleted();
    8888    }
    8989
     
    155155     */
    156156    private long getUsedId(OsmPrimitive osm) {
    157         if (osm.id != 0)
    158             return osm.id;
     157        if (osm.getId() != 0)
     158            return osm.getId();
    159159        if (usedNewIds.containsKey(osm))
    160160            return usedNewIds.get(osm);
     
    169169            }
    170170            for (Entry<String, String> e : osm.entrySet()) {
    171                 if ((osm instanceof Changeset) || !("created_by".equals(e.getKey())))
     171                if ((osm instanceof Changeset) || !("created_by".equals(e.getKey()))) {
    172172                    out.println("    <tag k='"+ XmlWriter.encode(e.getKey()) +
    173173                            "' v='"+XmlWriter.encode(e.getValue())+ "' />");
     174                }
    174175            }
    175176            out.println("  </" + tagname + ">");
     
    193194        if (!osmConform) {
    194195            String action = null;
    195             if (osm.deleted) {
     196            if (osm.isDeleted()) {
    196197                action = "delete";
    197             } else if (osm.modified) {
     198            } else if (osm.isModified()) {
    198199                action = "modify";
    199200            }
     
    209210            out.print(" user='"+XmlWriter.encode(osm.user.name)+"'");
    210211        }
    211         out.print(" visible='"+osm.visible+"'");
     212        out.print(" visible='"+osm.isVisible()+"'");
    212213        if (osm.version != -1) {
    213214            out.print(" version='"+osm.version+"'");
    214215        }
    215         if (this.changeset != null && this.changeset.id != 0) {
    216             out.print(" changeset='"+this.changeset.id+"'" );
     216        if (this.changeset != null && this.changeset.getId() != 0) {
     217            out.print(" changeset='"+this.changeset.getId()+"'" );
    217218        }
    218219    }
  • trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java

    r2017 r2025  
    4848        //System.out.println("Going to handle method "+method+" (short: "+method.getName()+") with event "+args[0]);
    4949        if (method.getName().equals("handleQuit")) {
    50             handled = !Main.breakBecauseUnsavedChanges();
     50            handled = Main.saveUnsavedModifications();
    5151        } else if (method.getName().equals("handleAbout")) {
    5252            Main.main.menu.about.actionPerformed(null);
Note: See TracChangeset for help on using the changeset viewer.