Changeset 3378 in josm


Ignore:
Timestamp:
Jul 20, 2010 8:54:22 AM (3 years ago)
Author:
jttt
Message:

Fix #2662 Auto-save

Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
6 edited

Legend:

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

    r3340 r3378  
    362362 
    363363        I18n.fixJFileChooser(); 
    364          
     364 
    365365        // init default coordinate format 
    366366        // 
     
    508508    } 
    509509 
     510    public static boolean exitJosm(boolean exit) { 
     511        if (Main.saveUnsavedModifications()) { 
     512            Main.saveGuiGeometry(); 
     513            // Remove all layers because somebody may rely on layerRemoved events (like AutosaveTask) 
     514            if (Main.isDisplayingMapView()) { 
     515                Collection<Layer> layers = new ArrayList<Layer>(Main.map.mapView.getAllLayers()); 
     516                for (Layer l: layers) { 
     517                    Main.map.mapView.removeLayer(l); 
     518                } 
     519            } 
     520            if (exit) { 
     521                System.exit(0); 
     522                return true; 
     523            } else 
     524                return true; 
     525        } else 
     526            return false; 
     527    } 
     528 
    510529    /** 
    511530     * The type of a command line parameter, to be used in switch statements. 
  • trunk/src/org/openstreetmap/josm/actions/ExitAction.java

    r2715 r3378  
    22package org.openstreetmap.josm.actions; 
    33 
     4import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 
    45import static org.openstreetmap.josm.tools.I18n.tr; 
    5 import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 
    66 
    77import java.awt.event.ActionEvent; 
     
    2727 
    2828    public void actionPerformed(ActionEvent e) { 
    29         if (Main.saveUnsavedModifications()) { 
    30             Main.saveGuiGeometry(); 
    31             System.exit(0); 
    32         } 
     29        Main.exitJosm(true); 
    3330    } 
    3431} 
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r3362 r3378  
    1515import java.util.List; 
    1616import java.util.Map; 
     17import java.util.concurrent.CopyOnWriteArrayList; 
    1718import java.util.concurrent.locks.Lock; 
    1819import java.util.concurrent.locks.ReadWriteLock; 
     
    6970    private Storage<OsmPrimitive> allPrimitives = new Storage<OsmPrimitive>(new IdHash(), 16, true); 
    7071    private Map<PrimitiveId, OsmPrimitive> primitivesMap = allPrimitives.foreignKey(new IdHash()); 
    71     private List<DataSetListener> listeners = new ArrayList<DataSetListener>(); 
     72    private CopyOnWriteArrayList<DataSetListener> listeners = new CopyOnWriteArrayList<DataSetListener>(); 
    7273 
    7374    // Number of open calls to beginUpdate 
     
    839840 
    840841    public void addDataSetListener(DataSetListener dsl) { 
    841         listeners.add(dsl); 
     842        listeners.addIfAbsent(dsl); 
    842843    } 
    843844 
     
    10011002     * Marks all "invisible" objects as deleted. These objects should be always marked as 
    10021003     * deleted when downloaded from the server. They can be undeleted later if necessary. 
    1003      *  
     1004     * 
    10041005     */ 
    10051006    public void deleteInvisible() { 
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r3287 r3378  
    2525 
    2626import org.openstreetmap.josm.Main; 
     27import org.openstreetmap.josm.data.AutosaveTask; 
     28import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
    2729import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder; 
    2830import org.openstreetmap.josm.gui.progress.ProgressMonitor; 
     
    5961        mainFrame.addWindowListener(new WindowAdapter(){ 
    6062            @Override public void windowClosing(final WindowEvent arg0) { 
    61                 if (!Main.saveUnsavedModifications()) 
    62                     return; 
    63                 Main.saveGuiGeometry(); 
    64                 System.exit(0); 
     63                Main.exitJosm(true); 
    6564            } 
    6665        }); 
     
    240239        } 
    241240 
     241        AutosaveTask autosaveTask = new AutosaveTask(); 
     242        List<OsmDataLayer> unsavedLayers = autosaveTask.getUnsavedLayers(); 
     243        if (!unsavedLayers.isEmpty()) { 
     244            ExtendedDialog dialog = new ExtendedDialog( 
     245                    Main.parent, 
     246                    tr("Unsaved osm data"), 
     247                    new String[] {tr("Restore"), tr("Cancel")} 
     248            ); 
     249            dialog.setContent(tr("JOSM found {0} unsaved osm data layers. It looks like JOSM crashed last time. Do you want to restore data?", 
     250                    unsavedLayers.size())); 
     251            dialog.setButtonIcons(new String[] {"ok.png", "cancel.png"}); 
     252            dialog.showDialog(); 
     253            if (dialog.getValue() == 1) { 
     254                for (OsmDataLayer layer: unsavedLayers) { 
     255                    Main.main.addLayer(layer); 
     256                } 
     257            } 
     258 
     259 
     260        } 
     261        autosaveTask.schedule(); 
     262 
     263 
    242264        EventQueue.invokeLater(new Runnable() { 
    243265            public void run() { 
  • trunk/src/org/openstreetmap/josm/io/OsmExporter.java

    r3083 r3378  
    6868 
    6969            OsmWriter w = new OsmWriter(new PrintWriter(writer), false, layer.data.getVersion()); 
    70             w.header(); 
    71             w.writeDataSources(layer.data); 
    72             w.writeContent(layer.data); 
    73             w.footer(); 
    74             w.close(); 
     70            layer.data.getReadLock().lock(); 
     71            try { 
     72                w.header(); 
     73                w.writeDataSources(layer.data); 
     74                w.writeContent(layer.data); 
     75                w.footer(); 
     76                w.close(); 
     77            } finally { 
     78                layer.data.getReadLock().unlock(); 
     79            } 
    7580            // FIXME - how to close? 
    7681            if (!Main.pref.getBoolean("save.keepbackup") && (tmpFile != null)) { 
  • trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java

    r3083 r3378  
    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.saveUnsavedModifications(); 
     50            handled = Main.exitJosm(false); 
    5151        } else if (method.getName().equals("handleAbout")) { 
    5252            Main.main.menu.about.actionPerformed(null); 
Note: See TracChangeset for help on using the changeset viewer.