Changeset 106 in josm for src


Ignore:
Timestamp:
2006-07-08T00:08:24+02:00 (18 years ago)
Author:
imi
Message:
  • fixed import from GPX (time not read somtimes)
  • fixed delete mode does not join line segments
  • fixed incomplete segments not occour in segment list (=does not get updated on merge)
  • added josm/ignore will ignore the object on uploads
Location:
src/org/openstreetmap/josm
Files:
8 edited

Legend:

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

    r104 r106  
    4444                        return;
    4545                }
    46                
     46
    4747                if (!Main.map.conflictDialog.conflicts.isEmpty()) {
    4848                        JOptionPane.showMessageDialog(Main.parent,tr("There are unresolved conflicts. You have to resolve these first."));
     
    5656                final Collection<OsmPrimitive> delete = new LinkedList<OsmPrimitive>();
    5757                for (OsmPrimitive osm : Main.ds.allPrimitives()) {
     58                        if (osm.get("josm/ignore") != null)
     59                                continue;
    5860                        if (osm.id == 0 && !osm.deleted)
    5961                                add.add(osm);
  • src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java

    r104 r106  
    7979                        deleteWithReferences(Main.ds.getSelected());
    8080                else
    81                         delete(Main.ds.getSelected(), false);
     81                        delete(Main.ds.getSelected(), false, false);
    8282                Main.map.repaint();
    8383        }
     
    9898                        deleteWithReferences(Collections.singleton(sel));
    9999                else
    100                         delete(Collections.singleton(sel), true);
     100                        delete(Collections.singleton(sel), true, true);
    101101
    102102                Main.map.mapView.repaint();
     
    139139         * @param msgBox Whether a message box for errors should be shown
    140140         */
    141         private void delete(Collection<OsmPrimitive> selection, boolean msgBox) {
     141        private void delete(Collection<OsmPrimitive> selection, boolean msgBox, boolean joinIfPossible) {
    142142                Collection<OsmPrimitive> del = new HashSet<OsmPrimitive>();
    143143                for (OsmPrimitive osm : selection) {
     
    145145                        osm.visit(v);
    146146                        if (!selection.containsAll(v.data)) {
    147                                 if (osm instanceof Node) {
     147                                if (osm instanceof Node && joinIfPossible) {
    148148                                        String reason = deleteNodeAndJoinSegment((Node)osm);
    149149                                        if (reason != null && msgBox) {
  • src/org/openstreetmap/josm/command/ChangePropertyCommand.java

    r104 r106  
    6464
    6565        @Override public MutableTreeNode description() {
    66                 String text = value == null ? tr( "Remove '{0}' for",key) : tr("Set {0}={1} for",key,value);
     66                String text = value == null ? tr( "Remove \"{0}\" for", key) : tr("Set {0}={1} for",key,value);
    6767                if (objects.size() == 1) {
    6868                        NameVisitor v = new NameVisitor();
    6969                        objects.iterator().next().visit(v);
    70                         text += v.className+" "+v.name;
     70                        text += " "+v.className+" "+v.name;
    7171                } else
    72                         text += trn("{0} object","{0} objects",objects.size(),objects.size());
     72                        text += objects.size()+trn("object","objects",objects.size());
    7373                DefaultMutableTreeNode root = new DefaultMutableTreeNode(new JLabel(text, ImageProvider.get("data", "key"), JLabel.HORIZONTAL));
    7474                if (objects.size() == 1)
  • src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java

    r104 r106  
    2626import java.util.Date;
    2727import java.util.LinkedList;
    28 import java.util.regex.Matcher;
    29 import java.util.regex.Pattern;
    3028
    3129import javax.swing.BorderFactory;
     
    9391                        // check the gps layer for time loops (and process it on the way)
    9492                        Date last = null;
    95                         Pattern reg = Pattern.compile("(\\d\\d/\\d\\d/\\d{4}).(\\d\\d:\\d\\d:\\d\\d)");
    96                         try {
    97                                 for (Collection<GpsPoint> c : gpsLayer.data) {
    98                                         for (GpsPoint p : c) {
    99                                                 if (p.time == null)
    100                                                         throw new IOException(tr("No time for point {0},{1}",p.latlon.lat(),p.latlon.lon()));
    101                                                 Matcher m = reg.matcher(p.time);
    102                                                 if (!m.matches())
    103                                                         throw new IOException(tr("Cannot read time from point {0},{1}",p.latlon.lat(),p.latlon.lon()));
    104                                                 Date d = DateParser.parse(m.group(1)+" "+m.group(2));
    105                                                 gps.add(new TimedPoint(d, p.eastNorth));
    106                                                 if (last != null && last.after(d))
    107                                                         throw new IOException(tr("Time loop in gps data."));
    108                                                 last = d;
    109                                         }
     93                        for (Collection<GpsPoint> c : gpsLayer.data) {
     94                                for (GpsPoint p : c) {
     95                                        if (p.time == null)
     96                                                throw new IOException(tr("No time for point {0},{1}",p.latlon.lat(),p.latlon.lon()));
     97                                        Date d = null;
     98                    try {
     99                        d = DateParser.parse(p.time);
     100                    } catch (ParseException e) {
     101                        throw new IOException(tr("Cannot read time \"{0}\" from point {1} x {2}",p.time,p.latlon.lat(),p.latlon.lon()));
     102                    }
     103                                        gps.add(new TimedPoint(d, p.eastNorth));
     104                                        if (last != null && last.after(d))
     105                                                throw new IOException(tr("Time loop in gps data."));
     106                                        last = d;
    110107                                }
    111                         } catch (ParseException e) {
    112                                 e.printStackTrace();
    113                                 throw new IOException(tr("Incorrect date information"));
    114108                        }
    115109
  • src/org/openstreetmap/josm/io/OsmReader.java

    r104 r106  
    186186                        for (long id : e.getValue()) {
    187187                                Segment s = segments.get(id);
    188                                 if (s == null)
     188                                if (s == null) {
    189189                                        s = new Segment(id); // incomplete line segment
     190                                        adder.visit(s);
     191                                }
    190192                                w.segments.add(s);
    191193                        }
  • src/org/openstreetmap/josm/io/RawGpsReader.java

    r104 r106  
    88import java.util.Collection;
    99import java.util.LinkedList;
     10import java.util.Stack;
    1011
    1112import org.openstreetmap.josm.data.coor.LatLon;
     
    3132                public Collection<Collection<GpsPoint>> data = new LinkedList<Collection<GpsPoint>>();
    3233                private LatLon currentLatLon;
    33                 private String currentTime;
     34                private String currentTime = null;
     35                private Stack<String> tags = new Stack<String>();
    3436
    3537                @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
     
    4749                        throw new SAXException(e);
    4850                }
    49                         } else if (qName.equals("time")) {
    50                                 currentTime = "";
    5151                        }
     52                        tags.push(qName);
    5253                }
    5354
    5455                @Override public void characters(char[] ch, int start, int length) {
    55                         if (currentTime != null && currentTime.equals(""))
    56                                 currentTime = new String(ch, start, length);
     56                        if (tags.peek().equals("time")) {
     57                                String time = tags.pop();
     58                                if (tags.empty() || (!tags.peek().equals("wpt") && !tags.peek().equals("trkpt"))) {
     59                                        tags.push(time);
     60                                        return;
     61                                }
     62                                String ct = new String(ch, start, length);
     63                                currentTime += ct;
     64                                tags.push(time);
     65                        }
    5766                }
    5867
     
    6271                        } else if (qName.equals("trkseg") || qName.equals("trk") || qName.equals("gpx"))
    6372                                newTrack();
     73                       
     74                        if (!qName.equals("time"))
     75                                currentTime = "";
     76                        tags.pop();
    6477        }
    6578
  • src/org/openstreetmap/josm/test/MergeVisitorTest.java

    r102 r106  
    170170                Segment s2 = new Segment(s1);
    171171                s1.incomplete = true;
     172                s2.timestamp = new Date();
    172173                v.visit(s2);
    173174                assertTrue(s1.realEqual(s2));
     175        }
     176        /**
     177         * Incomplete segments should extend existing ways.
     178         */
     179        public void testImportIncompleteExtendWays() throws Exception {
     180                Segment s1 = DataSetTestCaseHelper.createSegment(ds, dsNode, dsNode);
     181                Way w = DataSetTestCaseHelper.createWay(ds, new Segment[]{s1});
     182                s1.id = 1;
     183                Segment s2 = new Segment(s1);
     184                s1.incomplete = true;
     185                v.visit(s2);
     186                v.fixReferences();
     187                assertEquals(1, w.segments.size());
     188                assertEquals(s2, w.segments.get(0));
     189                assertFalse(s2.incomplete);
    174190        }
    175191
  • src/org/openstreetmap/josm/tools/DateParser.java

    r105 r106  
    1515
    1616        private static final String[] formats = {
     17                "yyyy-MM-dd'T'HH:mm:ss'Z'",
    1718                "yyyy-MM-dd'T'HH:mm:ssZ",
    1819                "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
     20                "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
    1921                "yyyy-MM-dd HH:mm:ss",
    2022                "MM/dd/yyyy HH:mm:ss",
    2123                "MM/dd/yyyy'T'HH:mm:ss.SSSZ",
     24                "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'",
    2225                "MM/dd/yyyy'T'HH:mm:ss.SSS",
    2326                "MM/dd/yyyy'T'HH:mm:ssZ",
Note: See TracChangeset for help on using the changeset viewer.