From 34bd8d2e5f45fd0abf0bf14b54d376b8beea50ac Mon Sep 17 00:00:00 2001
From: Michael Zangl <michael.zangl@student.kit.edu>
Date: Sun, 5 Jul 2015 14:21:51 +0200
Subject: [PATCH 2/2] MapView: Use enum set instead of integer flags.
---
src/org/openstreetmap/josm/gui/MapView.java | 48 +++++++++++++++--------------
1 file changed, 25 insertions(+), 23 deletions(-)
diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
index 70afe09..a0b161d 100644
a
|
b
|
import java.util.Arrays;
|
26 | 26 | import java.util.Collection; |
27 | 27 | import java.util.Collections; |
28 | 28 | import java.util.Comparator; |
| 29 | import java.util.EnumSet; |
29 | 30 | import java.util.LinkedHashSet; |
30 | 31 | import java.util.List; |
31 | 32 | import java.util.Set; |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
406 | 407 | boolean isOsmDataLayer = layer instanceof OsmDataLayer; |
407 | 408 | layerLock.writeLock().lock(); |
408 | 409 | layerLock.readLock().lock(); |
409 | | int listenersToFire = 0; |
| 410 | EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class); |
410 | 411 | Layer oldActiveLayer = activeLayer; |
411 | 412 | OsmDataLayer oldEditLayer = editLayer; |
412 | 413 | try { |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
433 | 434 | |
434 | 435 | if (isOsmDataLayer || oldActiveLayer == null) { |
435 | 436 | // autoselect the new layer |
436 | | listenersToFire = setActiveLayer(layer, true); |
| 437 | listenersToFire.addAll(setActiveLayer(layer, true)); |
437 | 438 | } |
438 | 439 | } finally { |
439 | 440 | layerLock.writeLock().unlock(); |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
450 | 451 | } finally { |
451 | 452 | layerLock.readLock().unlock(); |
452 | 453 | } |
453 | | if (listenersToFire != 0) { |
| 454 | if (!listenersToFire.isEmpty()) { |
454 | 455 | repaint(); |
455 | 456 | } |
456 | 457 | } |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
532 | 533 | layerLock.writeLock().lock(); |
533 | 534 | layerLock.readLock().lock(); |
534 | 535 | |
535 | | int listenersToFire = 0; |
| 536 | EnumSet<LayerListenerType> listenersToFire = EnumSet.noneOf(LayerListenerType.class); |
536 | 537 | Layer oldActiveLayer = activeLayer; |
537 | 538 | OsmDataLayer oldEditLayer = editLayer; |
538 | 539 | try { |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
545 | 546 | listenersToFire = setEditLayer(layersList); |
546 | 547 | |
547 | 548 | if (layer == activeLayer) { |
548 | | listenersToFire |= setActiveLayer(determineNextActiveLayer(layersList), false); |
| 549 | listenersToFire.addAll(setActiveLayer(determineNextActiveLayer(layersList), false)); |
549 | 550 | } |
550 | 551 | |
551 | 552 | if (layer instanceof OsmDataLayer) { |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
602 | 603 | public void moveLayer(Layer layer, int pos) { |
603 | 604 | layerLock.writeLock().lock(); |
604 | 605 | layerLock.readLock().lock(); |
605 | | int listenersToFire; |
| 606 | EnumSet<LayerListenerType> listenersToFire; |
606 | 607 | Layer oldActiveLayer = activeLayer; |
607 | 608 | OsmDataLayer oldEditLayer = editLayer; |
608 | 609 | try { |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
936 | 937 | * <p> |
937 | 938 | * You must own a write {@link #layerLock} when calling this method. |
938 | 939 | * @param layersList A list to select that layer from. |
939 | | * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, Layer, int)} |
| 940 | * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)} |
940 | 941 | */ |
941 | | private int setEditLayer(List<Layer> layersList) { |
| 942 | private EnumSet<LayerListenerType> setEditLayer(List<Layer> layersList) { |
942 | 943 | final OsmDataLayer newEditLayer = findNewEditLayer(layersList); |
943 | 944 | |
944 | 945 | // Set new edit layer |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
949 | 950 | } |
950 | 951 | |
951 | 952 | editLayer = newEditLayer; |
952 | | return FIRE_CHANGE_EDIT_LAYER; |
| 953 | return EnumSet.of(LayerListenerType.EDIT_LAYER_CHANGE); |
953 | 954 | } else { |
954 | | return 0; |
| 955 | return EnumSet.noneOf(LayerListenerType.class); |
955 | 956 | } |
956 | 957 | |
957 | 958 | } |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
984 | 985 | public void setActiveLayer(Layer layer) { |
985 | 986 | layerLock.writeLock().lock(); |
986 | 987 | layerLock.readLock().lock(); |
987 | | int listenersToFire; |
| 988 | EnumSet<LayerListenerType> listenersToFire; |
988 | 989 | Layer oldActiveLayer = activeLayer; |
989 | 990 | OsmDataLayer oldEditLayer = editLayer; |
990 | 991 | try { |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
1004 | 1005 | * Sets the active layer. Propagates this change to all map buttons. |
1005 | 1006 | * @param layer The layer to be active. |
1006 | 1007 | * @param setEditLayer if this is <code>true</code>, the edit layer is also set. |
1007 | | * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, Layer, int)} |
| 1008 | * @return A list of change listeners that should be fired using {@link #onActiveEditLayerChanged(Layer, OsmDataLayer, EnumSet)} |
1008 | 1009 | */ |
1009 | | private int setActiveLayer(final Layer layer, boolean setEditLayer) { |
| 1010 | private EnumSet<LayerListenerType> setActiveLayer(final Layer layer, boolean setEditLayer) { |
1010 | 1011 | if (layer != null && !layers.contains(layer)) |
1011 | 1012 | throw new IllegalArgumentException(tr("Layer ''{0}'' must be in list of layers", layer.toString())); |
1012 | 1013 | |
1013 | 1014 | if (layer == activeLayer) |
1014 | | return 0; |
1015 | | |
| 1015 | return EnumSet.noneOf(LayerListenerType.class); |
1016 | 1016 | |
1017 | 1017 | activeLayer = layer; |
1018 | | int listenersToFire = FIRE_CHANGE_ACTIVE_LAYER; |
| 1018 | EnumSet<LayerListenerType> listenersToFire = EnumSet.of(LayerListenerType.ACTIVE_LAYER_CHANGE); |
1019 | 1019 | if (setEditLayer) { |
1020 | | listenersToFire |= setEditLayer(layers); |
| 1020 | listenersToFire.addAll(setEditLayer(layers)); |
1021 | 1021 | } |
1022 | 1022 | |
1023 | 1023 | return listenersToFire; |
… |
… |
implements PropertyChangeListener, PreferenceChangedListener, OsmDataLayer.Layer
|
1037 | 1037 | } |
1038 | 1038 | } |
1039 | 1039 | |
1040 | | private static final int FIRE_CHANGE_ACTIVE_LAYER = 1; |
1041 | | private static final int FIRE_CHANGE_EDIT_LAYER = 2; |
| 1040 | private enum LayerListenerType { |
| 1041 | ACTIVE_LAYER_CHANGE, |
| 1042 | EDIT_LAYER_CHANGE |
| 1043 | } |
1042 | 1044 | |
1043 | 1045 | /** |
1044 | 1046 | * This is called whenever one of active layer/edit layer or both may have been changed, |
1045 | 1047 | * @param oldActive The old active layer |
1046 | 1048 | * @param oldEdit The old edit layer. |
1047 | | * @param listenersToFire A bitmask using {@link #FIRE_CHANGE_ACTIVE_LAYER} and {@link #FIRE_CHANGE_EDIT_LAYER} |
| 1049 | * @param listenersToFire A mask of listeners to fire using {@link LayerListenerType}s |
1048 | 1050 | */ |
1049 | | private void onActiveEditLayerChanged(final Layer oldActive, final OsmDataLayer oldEdit, int listenersToFire) { |
1050 | | if ((listenersToFire & FIRE_CHANGE_EDIT_LAYER) != 0) { |
| 1051 | private void onActiveEditLayerChanged(final Layer oldActive, final OsmDataLayer oldEdit, EnumSet<LayerListenerType> listenersToFire) { |
| 1052 | if (listenersToFire.contains(LayerListenerType.EDIT_LAYER_CHANGE)) { |
1051 | 1053 | onEditLayerChanged(oldEdit); |
1052 | 1054 | } |
1053 | | if ((listenersToFire & FIRE_CHANGE_ACTIVE_LAYER) != 0) { |
| 1055 | if (listenersToFire.contains(LayerListenerType.ACTIVE_LAYER_CHANGE)) { |
1054 | 1056 | onActiveLayerChanged(oldActive); |
1055 | 1057 | } |
1056 | 1058 | } |