started adding WindListener pattern to NMEAWindReceiver

Change-Id: Idbdd0b205370f32a3282a418fc9600d226a6313a
This commit is contained in:
Axel Uhl
2017-04-24 11:36:41 +02:00
parent 1ab44d908c
commit 89e59d4302
2 changed files with 35 additions and 2 deletions
@@ -1,5 +1,9 @@
package com.sap.sailing.nmeaconnector;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.tracking.WindListener;
import com.sap.sse.common.TimePoint;
import net.sf.marineapi.nmea.event.SentenceListener;
import net.sf.marineapi.nmea.io.SentenceReader;
import net.sf.marineapi.nmea.sentence.DateSentence;
@@ -12,7 +16,9 @@ import net.sf.marineapi.nmea.sentence.TimeSentence;
* for which it acts as a {@link SentenceListener} for sentences providing information
* about wind measurements, date/time reference, location of measurements and data
* that may be required to convert apparent wind speeds and angles into true wind
* speeds and directions.<p>
* speeds and directions. Clients can {@link #addWindListener(WindListener) register}
* as a {@link WindListener} and receive {@link WindListener#windDataReceived} callbacks
* whenever a {@link Wind} fix was assembled out of the various NMEA sentences.<p>
*
* The NMEA 0183 protocol specifies that a {@link SentenceId#MWV} sentence may provide
* "true" (relative to true north) or "relative" (relative to bow) wind angles. However,
@@ -41,5 +47,7 @@ import net.sf.marineapi.nmea.sentence.TimeSentence;
*
*/
public interface NMEAWindReceiver {
void addWindListener(WindListener listener);
void removeWindListener(WindListener listener);
}
@@ -1,7 +1,32 @@
package com.sap.sailing.nmeaconnector.impl;
import java.util.concurrent.ConcurrentHashMap;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.tracking.WindListener;
import com.sap.sailing.nmeaconnector.NMEAWindReceiver;
public class NMEAWindReceiverImpl implements NMEAWindReceiver {
private final ConcurrentHashMap<WindListener, WindListener> listeners;
public NMEAWindReceiverImpl() {
super();
this.listeners = new ConcurrentHashMap<>();
}
@Override
public void addWindListener(WindListener listener) {
listeners.put(listener, listener);
}
@Override
public void removeWindListener(WindListener listener) {
listeners.remove(listener);
}
private void notifyListeners(Wind wind) {
for (WindListener listener : listeners.values()) {
listener.windDataReceived(wind);
}
}
}