Ignore:
Timestamp:
2015-06-20T14:36:00+02:00 (9 years ago)
Author:
Don-vip
Message:

fix many checkstyle violations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java

    r8285 r8509  
    2929    private static final DatasetEventManager instance = new DatasetEventManager();
    3030
    31     public enum FireMode {
    32         /**
    33          * Fire in calling thread immediately.
    34          */
    35         IMMEDIATELY,
    36         /**
    37          * Fire in event dispatch thread.
    38          */
    39         IN_EDT,
    40         /**
    41          * Fire in event dispatch thread. If more than one event arrived when event queue is checked, merged them to
    42          * one event
    43          */
    44         IN_EDT_CONSOLIDATED}
    45 
    46     private static class ListenerInfo {
    47         private final DataSetListener listener;
    48         private final boolean consolidate;
    49 
    50         public ListenerInfo(DataSetListener listener, boolean consolidate) {
    51             this.listener = listener;
    52             this.consolidate = consolidate;
    53         }
    54 
    55         @Override
    56         public int hashCode() {
    57             return listener.hashCode();
    58         }
    59 
    60         @Override
    61         public boolean equals(Object o) {
    62             return o instanceof ListenerInfo && ((ListenerInfo)o).listener == listener;
    63         }
    64     }
    65 
    66     public static DatasetEventManager getInstance() {
    67         return instance;
    68     }
    69 
    70     private final Queue<AbstractDatasetChangedEvent> eventsInEDT = new LinkedBlockingQueue<>();
    71     private final CopyOnWriteArrayList<ListenerInfo> inEDTListeners = new CopyOnWriteArrayList<>();
    72     private final CopyOnWriteArrayList<ListenerInfo> normalListeners = new CopyOnWriteArrayList<>();
    73     private final DataSetListener myListener = new DataSetListenerAdapter(this);
    74 
    75     /**
    76      * Constructs a new {@code DatasetEventManager}.
    77      */
    78     public DatasetEventManager() {
    79         MapView.addEditLayerChangeListener(this);
    80     }
    81 
    82     /**
    83      * Register listener, that will receive events from currently active dataset
    84      * @param listener the listener to be registered
    85      * @param fireMode If {@link FireMode#IN_EDT} or {@link FireMode#IN_EDT_CONSOLIDATED},
    86      * listener will be notified in event dispatch thread instead of thread that caused
    87      * the dataset change
    88      */
    89     public void addDatasetListener(DataSetListener listener, FireMode fireMode) {
    90         if (fireMode == FireMode.IN_EDT || fireMode == FireMode.IN_EDT_CONSOLIDATED) {
    91             inEDTListeners.addIfAbsent(new ListenerInfo(listener, fireMode == FireMode.IN_EDT_CONSOLIDATED));
    92         } else {
    93             normalListeners.addIfAbsent(new ListenerInfo(listener, false));
    94         }
    95     }
    96 
    97     public void removeDatasetListener(DataSetListener listener) {
    98         ListenerInfo searchListener = new ListenerInfo(listener, false);
    99         inEDTListeners.remove(searchListener);
    100         normalListeners.remove(searchListener);
    101     }
    102 
    103     @Override
    104     public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
    105         if (oldLayer != null) {
    106             oldLayer.data.removeDataSetListener(myListener);
    107         }
    108 
    109         if (newLayer != null) {
    110             newLayer.data.addDataSetListener(myListener);
    111             processDatasetEvent(new DataChangedEvent(newLayer.data));
    112         } else {
    113             processDatasetEvent(new DataChangedEvent(null));
    114         }
    115     }
    116 
    117     private void fireEvents(List<ListenerInfo> listeners, AbstractDatasetChangedEvent event) {
    118         for (ListenerInfo listener: listeners) {
    119             if (!listener.consolidate) {
    120                 event.fire(listener.listener);
    121             }
    122         }
    123     }
    124 
    125     private void fireConsolidatedEvents(List<ListenerInfo> listeners, AbstractDatasetChangedEvent event) {
    126         for (ListenerInfo listener: listeners) {
    127             if (listener.consolidate) {
    128                 event.fire(listener.listener);
    129             }
    130         }
    131     }
    132 
    133     @Override
    134     public void processDatasetEvent(AbstractDatasetChangedEvent event) {
    135         fireEvents(normalListeners, event);
    136         eventsInEDT.add(event);
    137         SwingUtilities.invokeLater(edtRunnable);
    138     }
    139 
    140     private final Runnable edtRunnable = new Runnable() {
     31    private final class EdtRunnable implements Runnable {
    14132        @Override
    14233        public void run() {
    14334            while (!eventsInEDT.isEmpty()) {
    144                 List<AbstractDatasetChangedEvent> events = new ArrayList<>();
    145                 events.addAll(eventsInEDT);
     35                List<AbstractDatasetChangedEvent> events = new ArrayList<>(eventsInEDT);
    14636
    14737                DataSet dataSet = null;
     
    19282                            consolidatedEvent = new DataChangedEvent(dataSet, new ArrayList<>(Arrays.asList(consolidatedEvent)));
    19383                        }
    194 
    19584                    }
    19685                }
     
    20089            }
    20190        }
    202     };
     91    }
     92
     93    public enum FireMode {
     94        /**
     95         * Fire in calling thread immediately.
     96         */
     97        IMMEDIATELY,
     98        /**
     99         * Fire in event dispatch thread.
     100         */
     101        IN_EDT,
     102        /**
     103         * Fire in event dispatch thread. If more than one event arrived when event queue is checked, merged them to
     104         * one event
     105         */
     106        IN_EDT_CONSOLIDATED}
     107
     108    private static class ListenerInfo {
     109        private final DataSetListener listener;
     110        private final boolean consolidate;
     111
     112        public ListenerInfo(DataSetListener listener, boolean consolidate) {
     113            this.listener = listener;
     114            this.consolidate = consolidate;
     115        }
     116
     117        @Override
     118        public int hashCode() {
     119            return listener.hashCode();
     120        }
     121
     122        @Override
     123        public boolean equals(Object o) {
     124            return o instanceof ListenerInfo && ((ListenerInfo)o).listener == listener;
     125        }
     126    }
     127
     128    public static DatasetEventManager getInstance() {
     129        return instance;
     130    }
     131
     132    private final Queue<AbstractDatasetChangedEvent> eventsInEDT = new LinkedBlockingQueue<>();
     133    private final CopyOnWriteArrayList<ListenerInfo> inEDTListeners = new CopyOnWriteArrayList<>();
     134    private final CopyOnWriteArrayList<ListenerInfo> normalListeners = new CopyOnWriteArrayList<>();
     135    private final DataSetListener myListener = new DataSetListenerAdapter(this);
     136    private final Runnable edtRunnable = new EdtRunnable();
     137
     138    /**
     139     * Constructs a new {@code DatasetEventManager}.
     140     */
     141    public DatasetEventManager() {
     142        MapView.addEditLayerChangeListener(this);
     143    }
     144
     145    /**
     146     * Register listener, that will receive events from currently active dataset
     147     * @param listener the listener to be registered
     148     * @param fireMode If {@link FireMode#IN_EDT} or {@link FireMode#IN_EDT_CONSOLIDATED},
     149     * listener will be notified in event dispatch thread instead of thread that caused
     150     * the dataset change
     151     */
     152    public void addDatasetListener(DataSetListener listener, FireMode fireMode) {
     153        if (fireMode == FireMode.IN_EDT || fireMode == FireMode.IN_EDT_CONSOLIDATED) {
     154            inEDTListeners.addIfAbsent(new ListenerInfo(listener, fireMode == FireMode.IN_EDT_CONSOLIDATED));
     155        } else {
     156            normalListeners.addIfAbsent(new ListenerInfo(listener, false));
     157        }
     158    }
     159
     160    public void removeDatasetListener(DataSetListener listener) {
     161        ListenerInfo searchListener = new ListenerInfo(listener, false);
     162        inEDTListeners.remove(searchListener);
     163        normalListeners.remove(searchListener);
     164    }
     165
     166    @Override
     167    public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
     168        if (oldLayer != null) {
     169            oldLayer.data.removeDataSetListener(myListener);
     170        }
     171
     172        if (newLayer != null) {
     173            newLayer.data.addDataSetListener(myListener);
     174            processDatasetEvent(new DataChangedEvent(newLayer.data));
     175        } else {
     176            processDatasetEvent(new DataChangedEvent(null));
     177        }
     178    }
     179
     180    private void fireEvents(List<ListenerInfo> listeners, AbstractDatasetChangedEvent event) {
     181        for (ListenerInfo listener: listeners) {
     182            if (!listener.consolidate) {
     183                event.fire(listener.listener);
     184            }
     185        }
     186    }
     187
     188    private void fireConsolidatedEvents(List<ListenerInfo> listeners, AbstractDatasetChangedEvent event) {
     189        for (ListenerInfo listener: listeners) {
     190            if (listener.consolidate) {
     191                event.fire(listener.listener);
     192            }
     193        }
     194    }
     195
     196    @Override
     197    public void processDatasetEvent(AbstractDatasetChangedEvent event) {
     198        fireEvents(normalListeners, event);
     199        eventsInEDT.add(event);
     200        SwingUtilities.invokeLater(edtRunnable);
     201    }
    203202}
Note: See TracChangeset for help on using the changeset viewer.