Ignore:
Timestamp:
2010-09-14T11:26:51+02:00 (16 years ago)
Author:
stoecker
Message:

add Array storage to prefs, move bookmarks into preferences file

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
2 edited

Legend:

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

    r2626 r3527  
    66import java.awt.Component;
    77import java.io.IOException;
     8import java.io.BufferedReader;
     9import java.io.InputStreamReader;
     10import java.io.File;
     11import java.io.FileInputStream;
     12import java.io.FileOutputStream;
     13import java.io.OutputStreamWriter;
     14import java.io.PrintWriter;
     15import java.util.Arrays;
     16import java.util.ArrayList;
    817import java.util.Collection;
     18import java.util.Collections;
    919import java.util.LinkedList;
     20import java.util.regex.Matcher;
     21import java.util.regex.Pattern;
    1022
    1123import javax.swing.DefaultListModel;
     
    1931import org.openstreetmap.josm.Main;
    2032import org.openstreetmap.josm.data.Bounds;
    21 import org.openstreetmap.josm.data.Preferences;
    22 import org.openstreetmap.josm.data.Preferences.Bookmark;
    2333import org.openstreetmap.josm.tools.ImageProvider;
    2434
     
    3040
    3141    /**
     42     * Class holding one bookmarkentry.
     43     * @author imi
     44     */
     45    public static class Bookmark implements Comparable<Bookmark> {
     46        private String name;
     47        private Bounds area;
     48
     49        public Bookmark(Collection<String> list) throws NumberFormatException, IllegalArgumentException {
     50            ArrayList<String> array = new ArrayList<String>(list);
     51            if(array.size() < 5)
     52                throw new IllegalArgumentException(tr("Wrong number of arguments for bookmark"));
     53            name = array.get(0);
     54            area = new Bounds(Double.parseDouble(array.get(1)), Double.parseDouble(array.get(2)),
     55                              Double.parseDouble(array.get(3)), Double.parseDouble(array.get(4)));
     56        }
     57
     58        public Bookmark() {
     59            area = null;
     60            name = null;
     61        }
     62
     63        public Bookmark(Bounds area) {
     64            this.area = area;
     65        }
     66
     67        @Override public String toString() {
     68            return name;
     69        }
     70
     71        public int compareTo(Bookmark b) {
     72            return name.toLowerCase().compareTo(b.name.toLowerCase());
     73        }
     74
     75        public Bounds getArea() {
     76            return area;
     77        }
     78
     79        public String getName() {
     80            return name;
     81        }
     82
     83        public void setName(String name) {
     84            this.name = name;
     85        }
     86
     87        public void setArea(Bounds area) {
     88            this.area = area;
     89        }
     90    }
     91
     92    /**
    3293     * Create a bookmark list as well as the Buttons add and remove.
    3394     */
     
    45106        DefaultListModel model = (DefaultListModel)getModel();
    46107        model.removeAllElements();
    47         try {
    48             for (Preferences.Bookmark b : Main.pref.loadBookmarks()) {
     108        Collection<Collection<String>> args = Main.pref.getArray("bookmarks", null);
     109        if(args != null) {
     110            LinkedList<Bookmark> bookmarks = new LinkedList<Bookmark>();
     111            for(Collection<String> entry : args) {
     112                try {
     113                    bookmarks.add(new Bookmark(entry));
     114                }
     115                catch(Exception e) {
     116                    System.err.println(tr("Error reading bookmark entry: %s", e.getMessage()));
     117                }
     118            }
     119            Collections.sort(bookmarks);
     120            for (Bookmark b : bookmarks) {
    49121                model.addElement(b);
    50122            }
    51         } catch (IOException e) {
    52             e.printStackTrace();
    53             JOptionPane.showMessageDialog(
    54                     Main.parent,
    55                     tr("<html>Could not read bookmarks from<br>''{0}''<br>Error was: {1}</html>",
    56                             Main.pref.getBookmarksFile(),
    57                             e.getMessage()
    58                     ),
    59                     tr("Error"),
    60                     JOptionPane.ERROR_MESSAGE
    61             );
     123        }
     124        else if(!Main.applet) { /* FIXME: remove else clause after spring 2011 */
     125            File bookmarkFile = new File(Main.pref.getPreferencesDir(),"bookmarks");
     126            try {
     127                LinkedList<Bookmark> bookmarks = new LinkedList<Bookmark>();
     128                if (bookmarkFile.exists()) {
     129                    System.out.println("Try loading obsolete bookmarks file");
     130                    BufferedReader in = new BufferedReader(new InputStreamReader(
     131                            new FileInputStream(bookmarkFile), "utf-8"));
     132
     133                    for (String line = in.readLine(); line != null; line = in.readLine()) {
     134                        Matcher m = Pattern.compile("^(.+)[,\u001e](-?\\d+.\\d+)[,\u001e](-?\\d+.\\d+)[,\u001e](-?\\d+.\\d+)[,\u001e](-?\\d+.\\d+)$").matcher(line);
     135                        if (!m.matches() || m.groupCount() != 5) {
     136                            System.err.println(tr("Error: Unexpected line ''{0}'' in bookmark file ''{1}''",line, bookmarkFile.toString()));
     137                            continue;
     138                        }
     139                        Bookmark b = new Bookmark();
     140                        b.setName(m.group(1));
     141                        double[] values= new double[4];
     142                        for (int i = 0; i < 4; ++i) {
     143                            try {
     144                                values[i] = Double.parseDouble(m.group(i+2));
     145                            } catch(NumberFormatException e) {
     146                                System.err.println(tr("Error: Illegal double value ''{0}'' on line ''{1}'' in bookmark file ''{2}''",m.group(i+2),line, bookmarkFile.toString()));
     147                                continue;
     148                            }
     149                        }
     150                        b.setArea(new Bounds(values));
     151                        bookmarks.add(b);
     152                    }
     153                    in.close();
     154                    Collections.sort(bookmarks);
     155                    for (Bookmark b : bookmarks) {
     156                        model.addElement(b);
     157                    }
     158                    save();
     159                    System.out.println("Removing obsolete bookmarks file");
     160                    bookmarkFile.delete();
     161                }
     162            } catch (IOException e) {
     163                e.printStackTrace();
     164                JOptionPane.showMessageDialog(
     165                        Main.parent,
     166                        tr("<html>Could not read bookmarks from<br>''{0}''<br>Error was: {1}</html>",
     167                                bookmarkFile.toString(),
     168                                e.getMessage()
     169                        ),
     170                        tr("Error"),
     171                        JOptionPane.ERROR_MESSAGE
     172                );
     173            }
    62174        }
    63175    }
     
    67179     */
    68180    public void save() {
    69         try {
    70             Collection<Preferences.Bookmark> bookmarks = new LinkedList<Preferences.Bookmark>();
    71             for (Object o : ((DefaultListModel)getModel()).toArray()) {
    72                 bookmarks.add((Preferences.Bookmark)o);
    73             }
    74             Main.pref.saveBookmarks(bookmarks);
    75         } catch (IOException e) {
    76             JOptionPane.showMessageDialog(
    77                     Main.parent,
    78                     tr("<html>Could not write bookmark.<br>{0}</html>", e.getMessage()),
    79                     tr("Error"),
    80                     JOptionPane.ERROR_MESSAGE
    81             );
    82         }
     181        LinkedList<Collection<String>> coll = new LinkedList<Collection<String>>();
     182        for (Object o : ((DefaultListModel)getModel()).toArray()) {
     183            String[] array = new String[5];
     184            Bookmark b = (Bookmark)o;
     185            array[0] = b.getName();
     186            Bounds area = b.getArea();
     187            array[1] = String.valueOf(area.getMin().lat());
     188            array[2] = String.valueOf(area.getMin().lon());
     189            array[3] = String.valueOf(area.getMax().lat());
     190            array[4] = String.valueOf(area.getMax().lon());
     191            coll.add(Arrays.asList(array));
     192        }
     193        Main.pref.putArray("bookmarks", coll);
    83194    }
    84195
  • trunk/src/org/openstreetmap/josm/gui/download/BookmarkSelection.java

    r2904 r3527  
    2525import org.openstreetmap.josm.data.Bounds;
    2626import org.openstreetmap.josm.data.Preferences;
    27 import org.openstreetmap.josm.data.Preferences.Bookmark;
    2827import org.openstreetmap.josm.data.coor.CoordinateFormat;
    2928import org.openstreetmap.josm.gui.BookmarkList;
     29import org.openstreetmap.josm.gui.BookmarkList.Bookmark;
    3030import org.openstreetmap.josm.gui.JMultilineLabel;
    3131import org.openstreetmap.josm.tools.ImageProvider;
     
    114114        bookmarks.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    115115            public void valueChanged(ListSelectionEvent e) {
    116                 Preferences.Bookmark b = (Preferences.Bookmark)bookmarks.getSelectedValue();
     116                Bookmark b = (Bookmark)bookmarks.getSelectedValue();
    117117                if (b != null) {
    118118                    gui.boundingBoxChanged(b.getArea(),BookmarkSelection.this);
Note: See TracChangeset for help on using the changeset viewer.