Ignore:
Timestamp:
2016-07-04T09:32:09+02:00 (8 years ago)
Author:
donvip
Message:

checkstyle

Location:
applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete
Files:
3 edited

Legend:

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

    r29474 r32552  
    1 // License: GPL. See LICENSE file for details.
     1// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.plugins.undelete;
    33
  • applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/UndeleteAction.java

    r32512 r32552  
    1 // License: GPL. See LICENSE file for details.
     1// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.plugins.undelete;
    33
     
    4040public class UndeleteAction extends JosmAction {
    4141
     42    private final class Worker implements Runnable {
     43        private final OsmPrimitive parent;
     44
     45        private final OsmDataLayer layer;
     46
     47        private final List<PrimitiveId> ids;
     48
     49        private Worker(OsmPrimitive parent, OsmDataLayer layer, List<PrimitiveId> ids) {
     50            this.parent = parent;
     51            this.layer = layer;
     52            this.ids = ids;
     53        }
     54
     55        @Override
     56        public void run() {
     57            List<Node> nodes = new ArrayList<>();
     58            for (PrimitiveId pid : ids) {
     59                OsmPrimitive primitive = layer.data.getPrimitiveById(pid);
     60                if (primitive == null) {
     61                    try {
     62                        final Long id = pid.getUniqueId();
     63                        final OsmPrimitiveType type = pid.getType();
     64
     65                        History h = HistoryDataSet.getInstance().getHistory(id, type);
     66
     67                        HistoryOsmPrimitive hPrimitive1 = h.getLatest();
     68                        HistoryOsmPrimitive hPrimitive2;
     69
     70                        boolean visible = hPrimitive1.isVisible();
     71
     72                        if (visible) {
     73                            // If the object is not deleted we get the real object
     74                            DownloadPrimitivesTask download = new DownloadPrimitivesTask(layer, Collections.singletonList(pid), true);
     75                            download.run();
     76
     77                            primitive = layer.data.getPrimitiveById(id, type);
     78                        } else {
     79                            if (type.equals(OsmPrimitiveType.NODE)) {
     80                                // We get version and user from the latest version,
     81                                // coordinates and tags from n-1 version
     82                                hPrimitive2 = h.getByVersion(h.getNumVersions() - 1);
     83
     84                                Node node = new Node(id, (int) hPrimitive1.getVersion());
     85
     86                                HistoryNode hNode = (HistoryNode) hPrimitive2;
     87                                if (hNode != null) {
     88                                    node.setCoor(hNode.getCoords());
     89                                }
     90
     91                                primitive = node;
     92                            } else if (type.equals(OsmPrimitiveType.WAY)) {
     93                                // We get version and user from the latest version,
     94                                // nodes and tags from n-1 version
     95                                hPrimitive1 = h.getLatest();
     96                                hPrimitive2 = h.getByVersion(h.getNumVersions() - 1);
     97
     98                                Way way = new Way(id, (int) hPrimitive1.getVersion());
     99
     100                                HistoryWay hWay = (HistoryWay) hPrimitive2;
     101                                // System.out.println(tr("Primitive {0} version {1}: {2} nodes",
     102                                // hPrimitive2.getId(), hPrimitive2.getVersion(),
     103                                // hWay.getNumNodes()));
     104                                List<PrimitiveId> nodeIds = new ArrayList<>();
     105                                if (hWay != null) {
     106                                    for (Long i : hWay.getNodes()) {
     107                                        nodeIds.add(new SimplePrimitiveId(i, OsmPrimitiveType.NODE));
     108                                    }
     109                                }
     110                                undelete(false, nodeIds, way);
     111
     112                                primitive = way;
     113                            } else {
     114                                primitive = new Relation();
     115                                hPrimitive1 = h.getLatest();
     116                                hPrimitive2 = h.getByVersion(h.getNumVersions() - 1);
     117
     118                                Relation rel = new Relation(id, (int) hPrimitive1.getVersion());
     119
     120                                HistoryRelation hRel = (HistoryRelation) hPrimitive2;
     121
     122                                if (hRel != null) {
     123                                    List<RelationMember> members = new ArrayList<>(hRel.getNumMembers());
     124                                    for (RelationMemberData m : hRel.getMembers()) {
     125                                        OsmPrimitive p = layer.data.getPrimitiveById(m.getMemberId(), m.getMemberType());
     126                                        if (p == null) {
     127                                            switch (m.getMemberType()) {
     128                                            case NODE:
     129                                                p = new Node(m.getMemberId());
     130                                                break;
     131                                            case CLOSEDWAY:
     132                                            case WAY:
     133                                                p = new Way(m.getMemberId());
     134                                                break;
     135                                            case MULTIPOLYGON:
     136                                            case RELATION:
     137                                                p = new Relation(m.getMemberId());
     138                                                break;
     139                                            }
     140                                            layer.data.addPrimitive(p);
     141                                        }
     142                                        members.add(new RelationMember(m.getRole(), p));
     143                                    }
     144
     145                                    rel.setMembers(members);
     146                                }
     147
     148                                primitive = rel;
     149                            }
     150
     151                            if (hPrimitive2 != null) {
     152                                primitive.setChangesetId((int) hPrimitive1.getChangesetId());
     153                                primitive.setTimestamp(hPrimitive1.getTimestamp());
     154                                primitive.setUser(hPrimitive1.getUser());
     155                                primitive.setVisible(hPrimitive1.isVisible());
     156                                primitive.setKeys(hPrimitive2.getTags());
     157                                primitive.setModified(true);
     158
     159                                layer.data.addPrimitive(primitive);
     160                            } else {
     161                              final String msg = OsmPrimitiveType.NODE.equals(type)
     162                                  ? tr("Unable to undelete node {0}. Object has likely been redacted", id)
     163                                  : OsmPrimitiveType.WAY.equals(type)
     164                                  ? tr("Unable to undelete way {0}. Object has likely been redacted", id)
     165                                  : OsmPrimitiveType.RELATION.equals(type)
     166                                  ? tr("Unable to undelete relation {0}. Object has likely been redacted", id)
     167                                  : null;
     168                                GuiHelper.runInEDT(new Runnable() {
     169                                    @Override
     170                                    public void run() {
     171                                        new Notification(msg).setIcon(JOptionPane.WARNING_MESSAGE).show();
     172                                    }
     173                                });
     174                                Main.warn(msg);
     175                            }
     176                        }
     177                    } catch (Exception t) {
     178                        Main.error(t);
     179                    }
     180                }
     181                if (parent != null && primitive instanceof Node) {
     182                    nodes.add((Node) primitive);
     183                }
     184            }
     185            if (parent instanceof Way && !nodes.isEmpty()) {
     186                ((Way) parent).setNodes(nodes);
     187                Main.map.repaint();
     188            }
     189            GuiHelper.runInEDT(new Runnable() {
     190                @Override
     191                public void run() {
     192                    AutoScaleAction.zoomTo(layer.data.allNonDeletedPrimitives());
     193                }
     194            });
     195        }
     196    }
     197
    42198    public UndeleteAction() {
    43         super(tr("Undelete object..."), "undelete", tr("Undelete object by id"), 
     199        super(tr("Undelete object..."), "undelete", tr("Undelete object by id"),
    44200                Shortcut.registerShortcut("tools:undelete", tr("File: {0}", tr("Undelete object...")), KeyEvent.VK_U, Shortcut.ALT_SHIFT), true);
    45201    }
     
    54210        undelete(dialog.isNewLayerSelected(), dialog.getOsmIds(), null);
    55211    }
    56    
     212
    57213    /**
    58214     * // TODO: undelete relation members if necessary
    59215     */
    60216    public void undelete(boolean newLayer, final List<PrimitiveId> ids, final OsmPrimitive parent) {
    61        
    62         Main.info("Undeleting "+ids+(parent==null?"":" with parent "+parent));
    63        
     217
     218        Main.info("Undeleting "+ids+(parent == null ? "" : " with parent "+parent));
     219
    64220        OsmDataLayer tmpLayer = Main.getLayerManager().getEditLayer();
    65221        if ((tmpLayer == null) || newLayer) {
     
    76232
    77233        Main.worker.execute(task);
    78 
    79         Runnable r = new Runnable() {
    80             @Override
    81             public void run() {
    82                 List<Node> nodes = new ArrayList<>();
    83                 for (PrimitiveId pid : ids) {
    84                     OsmPrimitive primitive = layer.data.getPrimitiveById(pid);
    85                     if (primitive == null) {
    86                         try {
    87                             final Long id = pid.getUniqueId();
    88                             final OsmPrimitiveType type = pid.getType();
    89 
    90                             History h = HistoryDataSet.getInstance().getHistory(id, type);
    91 
    92                             HistoryOsmPrimitive hPrimitive1 = h.getLatest();
    93                             HistoryOsmPrimitive hPrimitive2;
    94        
    95                             boolean visible = hPrimitive1.isVisible();
    96        
    97                             if (visible) {
    98                                 // If the object is not deleted we get the real object
    99                                 DownloadPrimitivesTask download = new DownloadPrimitivesTask(layer, Collections.singletonList(pid), true);
    100                                 download.run();
    101        
    102                                 primitive = layer.data.getPrimitiveById(id, type);
    103                             } else {
    104                                 if (type.equals(OsmPrimitiveType.NODE)) {
    105                                     // We get version and user from the latest version,
    106                                     // coordinates and tags from n-1 version
    107                                     hPrimitive2 = h.getByVersion(h.getNumVersions() - 1);
    108        
    109                                     Node node = new Node(id, (int) hPrimitive1.getVersion());
    110        
    111                                     HistoryNode hNode = (HistoryNode) hPrimitive2;
    112                                     if (hNode != null) {
    113                                         node.setCoor(hNode.getCoords());
    114                                     }
    115        
    116                                     primitive = node;
    117                                 } else if (type.equals(OsmPrimitiveType.WAY)) {
    118                                     // We get version and user from the latest version,
    119                                     // nodes and tags from n-1 version
    120                                     hPrimitive1 = h.getLatest();
    121                                     hPrimitive2 = h.getByVersion(h.getNumVersions() - 1);
    122        
    123                                     Way way = new Way(id, (int) hPrimitive1.getVersion());
    124        
    125                                     HistoryWay hWay = (HistoryWay) hPrimitive2;
    126                                     // System.out.println(tr("Primitive {0} version {1}: {2} nodes",
    127                                     // hPrimitive2.getId(), hPrimitive2.getVersion(),
    128                                     // hWay.getNumNodes()));
    129                                     List<PrimitiveId> nodeIds = new ArrayList<>();
    130                                     if (hWay != null) {
    131                                             for (Long i : hWay.getNodes()) {
    132                                                 nodeIds.add(new SimplePrimitiveId(i, OsmPrimitiveType.NODE));
    133                                             }
    134                                     }
    135                                     undelete(false, nodeIds, way);
    136        
    137                                     primitive = way;
    138                                 } else {
    139                                     primitive = new Relation();
    140                                     hPrimitive1 = h.getLatest();
    141                                     hPrimitive2 = h.getByVersion(h.getNumVersions() - 1);
    142        
    143                                     Relation rel = new Relation(id,(int) hPrimitive1.getVersion());
    144        
    145                                     HistoryRelation hRel = (HistoryRelation) hPrimitive2;
    146        
    147                                     if (hRel != null) {
    148                                             List<RelationMember> members = new ArrayList<>(hRel.getNumMembers());
    149                                             for (RelationMemberData m : hRel.getMembers()) {
    150                                                 OsmPrimitive p = layer.data.getPrimitiveById(m.getMemberId(), m.getMemberType());
    151                                                 if (p == null) {
    152                                                     switch (m.getMemberType()) {
    153                                                     case NODE:
    154                                                         p = new Node(m.getMemberId());
    155                                                         break;
    156                                                     case CLOSEDWAY:
    157                                                     case WAY:
    158                                                         p = new Way(m.getMemberId());
    159                                                         break;
    160                                                     case MULTIPOLYGON:
    161                                                     case RELATION:
    162                                                         p = new Relation(m.getMemberId());
    163                                                         break;
    164                                                     }
    165                                                     layer.data.addPrimitive(p);
    166                                                 }
    167                                                 members.add(new RelationMember(m.getRole(), p));
    168                                             }
    169                
    170                                             rel.setMembers(members);
    171                                     }
    172        
    173                                     primitive = rel;
    174                                 }
    175        
    176                                 if (hPrimitive2 != null) {
    177                                     primitive.setChangesetId((int) hPrimitive1.getChangesetId());
    178                                     primitive.setTimestamp(hPrimitive1.getTimestamp());
    179                                     primitive.setUser(hPrimitive1.getUser());
    180                                     primitive.setVisible(hPrimitive1.isVisible());
    181                                     primitive.setKeys(hPrimitive2.getTags());
    182                                     primitive.setModified(true);
    183            
    184                                     layer.data.addPrimitive(primitive);
    185                                 } else {
    186                                   final String msg = OsmPrimitiveType.NODE.equals(type)
    187                                       ? tr("Unable to undelete node {0}. Object has likely been redacted", id)
    188                                       : OsmPrimitiveType.WAY.equals(type)
    189                                       ? tr("Unable to undelete way {0}. Object has likely been redacted", id)
    190                                       : OsmPrimitiveType.RELATION.equals(type)
    191                                       ? tr("Unable to undelete relation {0}. Object has likely been redacted", id)
    192                                       : null;
    193                                         GuiHelper.runInEDT(new Runnable() {
    194                                                                                 @Override
    195                                                                                 public void run() {
    196                                                         new Notification(msg).setIcon(JOptionPane.WARNING_MESSAGE).show();
    197                                                                                 }
    198                                                                         });
    199                                         Main.warn(msg);
    200                                 }
    201                             }
    202                         } catch (Exception t) {
    203                             Main.error(t);
    204                         }
    205                     }
    206                     if (parent != null && primitive instanceof Node) {
    207                         nodes.add((Node) primitive);
    208                     }
    209                 }
    210                 if (parent instanceof Way && !nodes.isEmpty()) {
    211                     ((Way) parent).setNodes(nodes);
    212                     Main.map.repaint();
    213                 }
    214                 GuiHelper.runInEDT(new Runnable() {
    215                                         @Override
    216                                         public void run() {
    217                                                 AutoScaleAction.zoomTo(layer.data.allNonDeletedPrimitives());
    218                                         }
    219                                 });
    220             }
    221         };
    222         Main.worker.submit(r);
     234        Main.worker.submit(new Worker(parent, layer, ids));
    223235    }
    224236}
  • applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/UndeleteDialog.java

    r29474 r32552  
    1 // License: GPL. See LICENSE file for details.
     1// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.plugins.undelete;
    33
     
    2424    private final JCheckBox layer = new JCheckBox(tr("Separate Layer"));
    2525    private final OsmIdTextField tfId = new OsmIdTextField();
    26    
     26
    2727    public UndeleteDialog(Component parent) {
    2828        super(parent, tr("Undelete Object"), new String[] {tr("Undelete object"), tr("Cancel")});
    29        
     29
    3030        JPanel all = new JPanel(new GridBagLayout());
    3131        GridBagConstraints gc = new GridBagConstraints();
     
    3535        gc.weightx = 0;
    3636        all.add(new JLabel(tr("Object ID:")), gc);
    37        
     37
    3838        tfId.setText(Main.pref.get("undelete.osmid"));
    3939        tfId.setToolTipText(tr("Enter the type and ID of the objects that should be undeleted, e.g., ''n1 w2''"));
     
    5252        all.add(layer, gc);
    5353        setContent(all, false);
    54         setButtonIcons(new String[] { "undelete.png", "cancel.png" });
    55         setToolTipTexts(new String[] { tr("Start undeleting"), tr("Close dialog and cancel") });
     54        setButtonIcons(new String[] {"undelete.png", "cancel.png"});
     55        setToolTipTexts(new String[] {tr("Start undeleting"), tr("Close dialog and cancel")});
    5656        setDefaultButton(1);
    5757    }
    58    
     58
    5959    public final boolean isNewLayerSelected() {
    6060        return layer.isSelected();
    6161    }
    62    
     62
    6363    public final String getOsmIdsString() {
    6464        return tfId.getText();
    6565    }
    66    
     66
    6767    public final List<PrimitiveId> getOsmIds() {
    6868        return tfId.getIds();
Note: See TracChangeset for help on using the changeset viewer.