Ignore:
Timestamp:
2010-05-05T01:40:27+02:00 (14 years ago)
Author:
nakor
Message:

Second version: undeletes ways as well

File:
1 edited

Legend:

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

    r21114 r21124  
    1313import java.util.LinkedList;
    1414import java.util.ArrayList;
     15import java.util.List;
    1516
    1617import javax.swing.JCheckBox;
     
    4243import org.openstreetmap.josm.data.osm.history.HistoryNode;
    4344import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
     45import org.openstreetmap.josm.data.osm.history.HistoryWay;
    4446import org.openstreetmap.josm.gui.ExtendedDialog;
    4547import org.openstreetmap.josm.gui.MainMenu;
     
    119121        Main.pref.put("undelete.newlayer", layer.isSelected());
    120122        Main.pref.putInteger("undelete.osmid", tfId.getOsmId());
    121         undelete(layer.isSelected(), cbType.getType(), tfId.getOsmId());
     123        List<Long> ids=new ArrayList<Long>();
     124        ids.add((long)tfId.getOsmId());
     125        undelete(layer.isSelected(), cbType.getType(), ids, 0);
    122126      }
    123127    }     
     
    126130     * Download the given primitive.
    127131     */
    128     public void undelete(boolean newLayer, final OsmPrimitiveType type, final long id) {
     132    public void undelete(boolean newLayer, final OsmPrimitiveType type, final List<Long> ids, final long parent) {
    129133        OsmDataLayer layer = Main.main.getEditLayer();
    130134        if ((layer == null) || newLayer) {
     
    136140       
    137141        HistoryLoadTask task  = new HistoryLoadTask();
    138         task.add (id, type);
     142        for (long id: ids)
     143        {
     144          task.add (id, type);
     145        }
     146
    139147       
    140148       
     
    143151        Runnable r = new Runnable() {
    144152            public void run() {
     153              List<Node> nodes=new ArrayList<Node>();
     154              for (long id: ids)
     155              {
     156
    145157                History h = HistoryDataSet.getInstance().getHistory(id, type);
    146158               
    147159                OsmPrimitive primitive;
    148                 HistoryOsmPrimitive hPrimitive=h.getLatest();
     160                HistoryOsmPrimitive hPrimitive1;
     161                HistoryOsmPrimitive hPrimitive2;
    149162               
    150163                if (type.equals(OsmPrimitiveType.NODE))
    151164                {
    152                   HistoryNode hNode = (HistoryNode) hPrimitive;
    153                  
    154                   Node node = new Node(id, (int) hNode.getVersion());
     165                  // We get all info from the latest version
     166                  hPrimitive1=h.getLatest();
     167                  hPrimitive2=hPrimitive1;
     168                 
     169                  Node node = new Node(id, (int) hPrimitive1.getVersion());
     170
     171                  HistoryNode hNode = (HistoryNode) hPrimitive1;
    155172                  node.setCoor(hNode.getCoords());
    156173                 
    157174                  primitive=node;
     175                  if (parent>0)
     176                  {
     177                    nodes.add(node);
     178                  }
     179                }
     180                else if (type.equals(OsmPrimitiveType.WAY))
     181                {
     182                  // We get version and user from the latest version, nodes and tags from n-1 version
     183                  hPrimitive1 = h.getLatest();
     184                  hPrimitive2 = h.getByVersion(h.getNumVersions()-1);
     185
     186                 
     187                 
     188                  Way way = new Way(id, (int) hPrimitive1.getVersion());
     189                 
     190                  HistoryWay hWay = (HistoryWay) hPrimitive2;
     191                  //System.out.println(tr("Primitive {0} version {1}: {2} nodes", hPrimitive2.getId(), hPrimitive2.getVersion(), hWay.getNumNodes()));
     192                  List<Long> nodeIds = hWay.getNodes();
     193                  undelete(false, OsmPrimitiveType.NODE, nodeIds, id);
     194                 
     195                  primitive=way;
     196                 
    158197                }
    159198                else
    160                 { primitive=new Node();}
    161                
    162                 primitive.setKeys(hPrimitive.getTags());
    163                
    164                 User user = User.createOsmUser(hPrimitive.getUid(), hPrimitive.getUser());
     199                {
     200                    primitive=new Node();
     201                    hPrimitive1=h.getLatest();
     202                    hPrimitive2=h.getLatest();
     203                }
     204
     205                User user = User.createOsmUser(hPrimitive1.getUid(), hPrimitive1.getUser());
    165206               
    166207                primitive.setUser(user);
     208               
     209                primitive.setKeys(hPrimitive2.getTags());
    167210               
    168211                primitive.setModified(true);
     
    170213                datas.addPrimitive(primitive);               
    171214                //HistoryBrowserDialogManager.getInstance().show(h);
     215              }
     216              if ((parent>0) && (type.equals(OsmPrimitiveType.NODE)))
     217              {
     218                Way parentWay=(Way)datas.getPrimitiveById(parent, OsmPrimitiveType.WAY);
     219               
     220                parentWay.setNodes(nodes);
     221              }
    172222            }
    173223        };
Note: See TracChangeset for help on using the changeset viewer.