Ignore:
Timestamp:
2010-12-29T22:03:57+01:00 (14 years ago)
Author:
bastik
Message:

'add rudimentary support for undeleting relations'

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/Undelete.java

    r23189 r24905  
    2626import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2727import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     28import org.openstreetmap.josm.data.osm.Relation;
     29import org.openstreetmap.josm.data.osm.RelationMember;
    2830import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
    2931import org.openstreetmap.josm.data.osm.User;
     
    3335import org.openstreetmap.josm.data.osm.history.HistoryNode;
    3436import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
     37import org.openstreetmap.josm.data.osm.history.HistoryRelation;
    3538import org.openstreetmap.josm.data.osm.history.HistoryWay;
    3639import org.openstreetmap.josm.gui.ExtendedDialog;
     
    4447import org.openstreetmap.josm.tools.Shortcut;
    4548
    46 
     49/**
     50 *  // TODO: undelete relation members if necessary
     51 */
    4752
    4853public class Undelete extends Plugin {
     
    7984        OsmPrimitiveTypesComboBox cbType = new OsmPrimitiveTypesComboBox();
    8085        cbType.setToolTipText("Choose the OSM object type");
     86        cbType.setSelectedIndex(Main.pref.getInteger("undelete.lasttype", 0));
    8187        gc.weightx = 1;
    8288        all.add(cbType, gc);
     
    111117        dialog.showDialog();
    112118        if (dialog.getValue() != 1) return;
     119        Main.pref.putInteger("undelete.lasttype", cbType.getSelectedIndex());
    113120        Main.pref.put("undelete.newlayer", layer.isSelected());
    114121        Main.pref.putInteger("undelete.osmid", tfId.getOsmId());
     
    210217                  else
    211218                  {
    212                       primitive=new Node();
     219                      primitive=new Relation();
    213220                      hPrimitive1=h.getLatest();
    214                       hPrimitive2=h.getLatest();
     221                      hPrimitive2=h.getByVersion(h.getNumVersions()-1);
     222                     
     223                      Relation rel = new Relation(id, (int) hPrimitive1.getVersion());
     224                     
     225                      HistoryRelation hRel = (HistoryRelation) hPrimitive2;
     226                     
     227                      List<RelationMember> members = new ArrayList<RelationMember>(hRel.getNumMembers());
     228                      for (org.openstreetmap.josm.data.osm.history.RelationMember m : hRel.getMembers()) {
     229                        OsmPrimitive p = datas.getPrimitiveById(m.getPrimitiveId(), m.getPrimitiveType());
     230                        if (p == null) {
     231                            switch (m.getPrimitiveType()) {
     232                            case NODE: p = new Node(m.getPrimitiveId()); break;
     233                            case WAY: p = new Way(m.getPrimitiveId()); break;
     234                            case RELATION: p = new Relation(m.getPrimitiveId()); break;
     235                            }
     236                            datas.addPrimitive(p);
     237                        }
     238                        members.add(new RelationMember(m.getRole(), p));
     239                      }
     240                     
     241                      rel.setMembers(members);
     242                     
     243                      primitive=rel;
    215244                  }
    216245
Note: See TracChangeset for help on using the changeset viewer.