Ignore:
Timestamp:
2009-06-15T20:22:46+02:00 (17 years ago)
Author:
Gubaer
Message:

fixed: bug in OsmApi.getOsmApi()
cleanup: exception handling in interfacing with OSM API
new: new action for updating individual elements with the their current state on the server (including new menu item in the file menu)
new: improved user feedback in case of conflicts
new: handles 410 Gone conflicts when uploading a changeset
new: undoable command for "purging" a primitive from the current dataset (necessary if the primitive is already deleted on the server and the user wants to remove it from its local dataset)
new: undoable command for "undeleting" an already deleted primitive on the server (kind of "cloning")
new: after a full upload, checks whether there are primitives in the local dataset which might be deleted on the server.
new: data structures for history data
new: history download support in io package

Location:
trunk/src/org/openstreetmap/josm/data/osm
Files:
9 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r1647 r1670  
    1010import java.util.LinkedList;
    1111import java.util.List;
     12import java.util.Set;
    1213
    1314import org.openstreetmap.josm.data.SelectionChangedListener;
     15import static org.openstreetmap.josm.tools.I18n.tr;
    1416
    1517/**
    … …  
    7880        Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
    7981        for (OsmPrimitive osm : allPrimitives())
    80             if (!osm.deleted)
     82            if (!osm.deleted) {
    8183                o.add(osm);
     84            }
    8285        return o;
    8386    }
    … …  
    8689        Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
    8790        for (OsmPrimitive osm : allPrimitives())
    88             if (!osm.deleted && !osm.incomplete)
     91            if (!osm.deleted && !osm.incomplete) {
    8992                o.add(osm);
     93            }
    9094        return o;
    9195    }
    … …  
    9498        Collection<OsmPrimitive> o = new LinkedList<OsmPrimitive>();
    9599        for (OsmPrimitive osm : allPrimitives())
    96             if (!osm.deleted && !osm.incomplete && !(osm instanceof Relation))
     100            if (!osm.deleted && !osm.incomplete && !(osm instanceof Relation)) {
    97101                o.add(osm);
     102            }
    98103        return o;
    99104    }
    … …  
    150155        clearSelection(ways);
    151156        clearSelection(relations);
    152         for (OsmPrimitive osm : selection)
     157        for (OsmPrimitive osm : selection) {
    153158            osm.selected = true;
     159        }
    154160        fireSelectionChanged(selection);
    155161    }
    … …  
    164170        clearSelection(relations);
    165171        for (OsmPrimitive o : osm)
    166             if (o != null)
     172            if (o != null) {
    167173                o.selected = true;
     174            }
    168175        fireSelectionChanged(Arrays.asList(osm));
    169176    }
    … …  
    176183        if (list == null)
    177184            return;
    178         for (OsmPrimitive osm : list)
     185        for (OsmPrimitive osm : list) {
    179186            osm.selected = false;
     187        }
    180188    }
    181189
    … …  
    189197            return sel;
    190198        for (OsmPrimitive osm : list)
    191             if (osm.selected && !osm.deleted)
     199            if (osm.selected && !osm.deleted) {
    192200                sel.add(osm);
     201            }
    193202        return sel;
    194203    }
    … …  
    200209     */
    201210    public static void fireSelectionChanged(Collection<? extends OsmPrimitive> sel) {
    202         for (SelectionChangedListener l : selListeners)
     211        for (SelectionChangedListener l : selListeners) {
    203212            l.selectionChanged(sel);
     213        }
    204214    }
    205215
    206216    @Override public DataSet clone() {
    207217        DataSet ds = new DataSet();
    208         for (Node n : nodes)
     218        for (Node n : nodes) {
    209219            ds.nodes.add(new Node(n));
    210         for (Way w : ways)
     220        }
     221        for (Way w : ways) {
    211222            ds.ways.add(new Way(w));
    212         for (Relation e : relations)
     223        }
     224        for (Relation e : relations) {
    213225            ds.relations.add(new Relation(e));
    214         for (DataSource source : dataSources)
     226        }
     227        for (DataSource source : dataSources) {
    215228            ds.dataSources.add(new DataSource(source.bounds, source.origin));
     229        }
    216230        ds.version = version;
    217231        return ds;
    … …  
    260274        return selArr;
    261275    }
     276
     277    /**
     278     * returns a  primitive with a given id from the data set. null, if no such primitive
     279     * exists
     280     *
     281     * @param id  the id, > 0 required
     282     * @return the primitive
     283     * @exception IllegalArgumentException thrown, if id <= 0
     284     */
     285    public OsmPrimitive getPrimitiveById(long id) {
     286        if (id <= 0)
     287            throw new IllegalArgumentException(tr("parameter {0} > 0 required. Got {1}.", "id", id));
     288        for (OsmPrimitive primitive : nodes) {
     289            if (primitive.id == id) return primitive;
     290        }
     291        for (OsmPrimitive primitive : ways) {
     292            if (primitive.id == id) return primitive;
     293        }
     294        for (OsmPrimitive primitive : relations) {
     295            if (primitive.id == id) return primitive;
     296        }
     297        return null;
     298    }
     299
     300    public Set<Long> getPrimitiveIds() {
     301        HashSet<Long> ret = new HashSet<Long>();
     302        for (OsmPrimitive primitive : nodes) {
     303            ret.add(primitive.id);
     304        }
     305        for (OsmPrimitive primitive : ways) {
     306            ret.add(primitive.id);
     307        }
     308        for (OsmPrimitive primitive : relations) {
     309            ret.add(primitive.id);
     310        }
     311        return ret;
     312    }
    262313}
  • trunk/src/org/openstreetmap/josm/data/osm/Relation.java

    r1598 r1670  
    7878    }
    7979
     80    @Override
    8081    public String getName() {
    8182        String name;
    … …  
    8485        } else {
    8586            name = get("type");
    86             if (name == null)
     87            if (name == null) {
    8788                name = tr("relation");
     89            }
    8890
    8991            name += " (";
    90             if(names == null)
    91               names = Main.pref.getCollection("relation.nameOrder", Arrays.asList(defnames));
     92            if(names == null) {
     93                names = Main.pref.getCollection("relation.nameOrder", Arrays.asList(defnames));
     94            }
    9295            String nameTag = null;
    9396            for (String n : names) {
    9497                nameTag = get(n);
    95                 if (nameTag != null) break;
     98                if (nameTag != null) {
     99                    break;
     100                }
    96101            }
    97             if (nameTag != null)
     102            if (nameTag != null) {
    98103                name += "\"" + nameTag + "\", ";
     104            }
    99105
    100106            int mbno = members.size();
    101107            name += trn("{0} member", "{0} members", mbno, mbno) + ")";
    102             if(errors != null)
     108            if(errors != null) {
    103109                name = "*"+name;
     110            }
    104111        }
    105112        return name;
    … …  
    113120        return false;
    114121    }
    115    
     122
    116123    public RelationMember firstMember() {
    117124        if (incomplete) return null;
    … …  
    122129        return (members.size() == 0) ? null : members.get(members.size() -1);
    123130    }
     131
     132    /**
     133     * removes all members with member.member == primitive
     134     *
     135     * @param primitive the primitive to check for
     136     */
     137    public void removeMembersFor(OsmPrimitive primitive) {
     138        if (primitive == null)
     139            return;
     140
     141        ArrayList<RelationMember> todelete = new ArrayList<RelationMember>();
     142        for (RelationMember member: members) {
     143            if (member.member == primitive) {
     144                todelete.add(member);
     145            }
     146        }
     147        members.removeAll(todelete);
     148    }
    124149}
Note: See TracChangeset for help on using the changeset viewer.