Ignore:
Timestamp:
2016-03-29T02:19:23+02:00 (4 years ago)
Author:
Don-vip
Message:

refactor duplicated code

Location:
trunk/src/org/openstreetmap/josm/actions
Files:
6 edited

Legend:

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

    r8443 r10074  
    55
    66import java.awt.Component;
     7import java.awt.GraphicsEnvironment;
    78import java.awt.GridBagLayout;
    89import java.util.List;
     
    5758    }
    5859
    59     protected Layer askTargetLayer(List<Layer> targetLayers) {
    60         JosmComboBox<Layer> layerList = new JosmComboBox<>(targetLayers.toArray(new Layer[0]));
     60    protected static Layer askTargetLayer(List<Layer> targetLayers) {
     61        return askTargetLayer(targetLayers.toArray(new Layer[0]),
     62                tr("Please select the target layer."),
     63                tr("Select target layer"),
     64                tr("Merge"), "dialogs/mergedown");
     65    }
     66
     67    /**
     68     * Asks a target layer.
     69     * @param <T> type of layer
     70     * @param targetLayers array of proposed target layers
     71     * @param label label displayed in dialog
     72     * @param title title of dialog
     73     * @param buttonText text of button used to select target layer
     74     * @param buttonIcon icon name of button used to select target layer
     75     * @return choosen target layer
     76     */
     77    @SuppressWarnings("unchecked")
     78    public static <T extends Layer> T askTargetLayer(T[] targetLayers, String label, String title, String buttonText, String buttonIcon) {
     79        JosmComboBox<T> layerList = new JosmComboBox<>(targetLayers);
    6180        layerList.setRenderer(new LayerListCellRenderer());
    6281        layerList.setSelectedIndex(0);
    6382
    6483        JPanel pnl = new JPanel(new GridBagLayout());
    65         pnl.add(new JLabel(tr("Please select the target layer.")), GBC.eol());
     84        pnl.add(new JLabel(label), GBC.eol());
    6685        pnl.add(layerList, GBC.eol());
    67 
    68         ExtendedDialog ed = new ExtendedDialog(Main.parent,
    69                 tr("Select target layer"),
    70                 new String[] {tr("Merge"), tr("Cancel")});
    71         ed.setButtonIcons(new String[] {"dialogs/mergedown", "cancel"});
     86        if (GraphicsEnvironment.isHeadless()) {
     87            // return first layer in headless mode, for unit tests
     88            return targetLayers[0];
     89        }
     90        ExtendedDialog ed = new ExtendedDialog(Main.parent, title, new String[] {buttonText, tr("Cancel")});
     91        ed.setButtonIcons(new String[] {buttonIcon, "cancel"});
    7292        ed.setContent(pnl);
    7393        ed.showDialog();
    74         if (ed.getValue() != 1)
     94        if (ed.getValue() != 1) {
    7595            return null;
    76 
    77         return (Layer) layerList.getSelectedItem();
     96        }
     97        return (T) layerList.getSelectedItem();
    7898    }
    7999
  • trunk/src/org/openstreetmap/josm/actions/DownloadAlongAction.java

    r9804 r10074  
    117117        final PleaseWaitProgressMonitor monitor = new PleaseWaitProgressMonitor(tr("Download data"));
    118118        final Future<?> future = new DownloadTaskList().download(false, toDownload, osmDownload, gpxDownload, monitor);
    119         Main.worker.submit(new Runnable() {
    120             @Override
    121             public void run() {
    122                 try {
    123                     future.get();
    124                 } catch (Exception e) {
    125                     Main.error(e);
    126                     return;
    127                 }
    128                 monitor.close();
    129             }
    130         });
     119        waitFuture(future, monitor);
    131120    }
    132121}
  • trunk/src/org/openstreetmap/josm/actions/JosmAction.java

    r10000 r10074  
    66import java.awt.event.KeyEvent;
    77import java.util.Collection;
     8import java.util.concurrent.Future;
    89
    910import javax.swing.AbstractAction;
     
    1718import org.openstreetmap.josm.gui.layer.Layer;
    1819import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     20import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
    1921import org.openstreetmap.josm.gui.util.GuiHelper;
    2022import org.openstreetmap.josm.tools.Destroyable;
     
    230232    }
    231233
     234    protected static void waitFuture(final Future<?> future, final PleaseWaitProgressMonitor monitor) {
     235        Main.worker.submit(
     236                new Runnable() {
     237                    @Override
     238                    public void run() {
     239                        try {
     240                            future.get();
     241                        } catch (Exception e) {
     242                            Main.error(e);
     243                            return;
     244                        }
     245                        monitor.close();
     246                    }
     247                }
     248        );
     249    }
     250
    232251    /**
    233252     * Override in subclasses to init the enabled state of an action when it is
  • trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java

    r10043 r10074  
    367367     * @return List of ways to split
    368368     */
    369     private static List<Way> getApplicableWays(List<Way> selectedWays, List<Node> selectedNodes) {
     369    static List<Way> getApplicableWays(List<Way> selectedWays, List<Node> selectedNodes) {
    370370        if (selectedNodes.isEmpty())
    371371            return null;
    372372
    373         // Special case - one of the selected ways touches (not cross) way that we
    374         // want to split
     373        // Special case - one of the selected ways touches (not cross) way that we want to split
    375374        if (selectedNodes.size() == 1) {
    376375            Node n = selectedNodes.get(0);
     
    395394
    396395        // List of ways shared by all nodes
    397         List<Way> result =
    398             new ArrayList<>(OsmPrimitive.getFilteredList(selectedNodes.get(0).getReferrers(),
    399                                                          Way.class));
    400         for (int i = 1; i < selectedNodes.size(); i++) {
    401             List<OsmPrimitive> ref = selectedNodes.get(i).getReferrers();
    402             for (Iterator<Way> it = result.iterator(); it.hasNext();) {
    403                 if (!ref.contains(it.next())) {
    404                     it.remove();
    405                 }
    406             }
    407         }
    408 
    409         // Remove broken ways
    410         for (Iterator<Way> it = result.iterator(); it.hasNext();) {
    411             if (it.next().getNodesCount() <= 2) {
    412                 it.remove();
    413             }
    414         }
    415 
    416         if (selectedWays.isEmpty())
    417             return result;
    418         else {
    419             // Return only selected ways
    420             for (Iterator<Way> it = result.iterator(); it.hasNext();) {
    421                 if (!selectedWays.contains(it.next())) {
    422                     it.remove();
    423                 }
    424             }
    425             return result;
    426         }
     396        return UnJoinNodeWayAction.getApplicableWays(selectedWays, selectedNodes);
    427397    }
    428398
  • trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java

    r10043 r10074  
    149149     * @return List of relevant ways
    150150     */
    151     private static List<Way> getApplicableWays(List<Way> selectedWays, List<Node> selectedNodes) {
     151    static List<Way> getApplicableWays(List<Way> selectedWays, List<Node> selectedNodes) {
    152152        if (selectedNodes.isEmpty())
    153153            return null;
  • trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java

    r8510 r10074  
    8989            final PleaseWaitProgressMonitor monitor = new PleaseWaitProgressMonitor(tr("Download data"));
    9090            final Future<?> future = new DownloadTaskList().download(false /* no new layer */, areasToDownload, true, false, monitor);
    91             Main.worker.submit(
    92                     new Runnable() {
    93                         @Override
    94                         public void run() {
    95                             try {
    96                                 future.get();
    97                             } catch (Exception e) {
    98                                 Main.error(e);
    99                                 return;
    100                             }
    101                             monitor.close();
    102                         }
    103                     }
    104             );
     91            waitFuture(future, monitor);
    10592        }
    10693    }
Note: See TracChangeset for help on using the changeset viewer.