use of au.gov.amsa.ais.Timestamped in project risky by amsa-code.
the class ShipStaticDataCreator method writeStaticDataToFileWithTimestamps.
public static Observable<Timestamped<AisShipStatic>> writeStaticDataToFileWithTimestamps(List<File> files, File outputFile, Scheduler scheduler) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Func0<PrintStream> resourceFactory = Checked.f0(() -> new PrintStream(outputFile));
Func1<PrintStream, Observable<Timestamped<AisShipStatic>>> observableFactory = out -> Observable.from(files).buffer(Math.max(1, files.size() / Runtime.getRuntime().availableProcessors() - 1)).flatMap(list -> //
Observable.from(list).lift(//
Logging.<File>logger().showValue().showMemory().log()).concatMap(//
file -> timestampedShipStatics(file))).groupBy(//
m -> m.message().getMmsi()).flatMap(//
g -> collect(g).subscribeOn(scheduler)).compose(Transformers.doOnFirst(x -> {
out.println("# MMSI, Time, IMO, AisClass, AisShipType, MaxPresentStaticDraughtMetres, DimAMetres, DimBMetres, DimCMetres, DimDMetres, LengthMetres, WidthMetres, Name");
out.println("# columns are tab delimited");
out.println("# -1 = not present");
})).filter(//
set -> set.size() <= 10).flatMapIterable(//
set -> set).doOnNext(k -> {
AisShipStatic m = k.message();
out.format("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", m.getMmsi(), sdf.format(new Date(k.time())), getImo(m).orElse(-1), m instanceof AisShipStaticA ? "A" : "B", m.getShipType(), getMaximumPresentStaticDraughtMetres(m).orElse(-1F), m.getDimensionA().orElse(-1), m.getDimensionB().orElse(-1), m.getDimensionC().orElse(-1), m.getDimensionD().orElse(-1), AisShipStaticUtil.lengthMetres(m).orElse(-1), AisShipStaticUtil.widthMetres(m).orElse(-1), prepareName(m.getName()));
out.flush();
});
Action1<PrintStream> disposeAction = out -> out.close();
return Observable.using(resourceFactory, observableFactory, disposeAction);
}
use of au.gov.amsa.ais.Timestamped in project risky by amsa-code.
the class StreamsTest method stringRepresentationOfTimestampedAndLineContainsMessageInCaseOfSuccess.
@Test
public void stringRepresentationOfTimestampedAndLineContainsMessageInCaseOfSuccess() {
final Timestamped<AisMessage> aisMessage = new Timestamped<>(new AisMessageOther(4242, "source", 0), 0);
final TimestampedAndLine<AisMessage> message = new TimestampedAndLine<>(Optional.of(aisMessage), "test", null);
final String representation = message.toString();
assertNotNull(representation);
assertTrue("String representation should contain message ID, but got: " + representation, representation.contains("4242"));
}
use of au.gov.amsa.ais.Timestamped in project risky by amsa-code.
the class OperatorCraftProperty method call.
@Override
public Subscriber<? super Timestamped<? extends AisMessage>> call(final Subscriber<? super CraftProperty> child) {
return new Subscriber<Timestamped<? extends AisMessage>>(child) {
@Override
public void onCompleted() {
if (!isUnsubscribed())
child.onCompleted();
}
@Override
public void onError(Throwable e) {
if (!isUnsubscribed())
child.onError(e);
}
@SuppressWarnings("unchecked")
@Override
public void onNext(Timestamped<? extends AisMessage> m) {
if (m.message() instanceof AisShipStaticA) {
handleShipStatic((Timestamped<AisShipStaticA>) m, child);
} else if (m.message() instanceof AisPositionBExtended)
handleAisPositionBExtended((Timestamped<AisPositionBExtended>) m, child);
}
private void handleShipStatic(Timestamped<AisShipStaticA> m, Subscriber<? super CraftProperty> child) {
handleProperty(child, m, CraftPropertyName.CALLSIGN, m.message().getCallsign());
handleProperty(child, m, CraftPropertyName.DESTINATION, m.message().getDestination());
handleProperty(child, m, CraftPropertyName.DIMENSION_A, m.message().getDimensionA());
handleProperty(child, m, CraftPropertyName.DIMENSION_B, m.message().getDimensionB());
handleProperty(child, m, CraftPropertyName.DIMENSION_C, m.message().getDimensionC());
handleProperty(child, m, CraftPropertyName.DIMENSION_D, m.message().getDimensionD());
handleProperty(child, m, CraftPropertyName.IMO_NUMBER, m.message().getImo());
handleProperty(child, m, CraftPropertyName.LENGTH_METRES, m.message().getLengthMetres());
handleProperty(child, m, CraftPropertyName.DRAUGHT_METRES, m.message().getMaximumPresentStaticDraughtMetres());
handleProperty(child, m, CraftPropertyName.NAME, m.message().getName());
handleProperty(child, m, CraftPropertyName.SHIP_TYPE, m.message().getShipType());
handleProperty(child, m, CraftPropertyName.WIDTH_METRES, m.message().getWidthMetres());
}
private void handleAisPositionBExtended(Timestamped<AisPositionBExtended> m, Subscriber<? super CraftProperty> child) {
handleProperty(child, m, CraftPropertyName.DIMENSION_A, m.message().getDimensionA());
handleProperty(child, m, CraftPropertyName.DIMENSION_B, m.message().getDimensionB());
handleProperty(child, m, CraftPropertyName.DIMENSION_C, m.message().getDimensionC());
handleProperty(child, m, CraftPropertyName.DIMENSION_D, m.message().getDimensionD());
handleProperty(child, m, CraftPropertyName.LENGTH_METRES, m.message().getLengthMetres());
handleProperty(child, m, CraftPropertyName.NAME, m.message().getName());
handleProperty(child, m, CraftPropertyName.SHIP_TYPE, m.message().getShipType());
handleProperty(child, m, CraftPropertyName.WIDTH_METRES, m.message().getWidthMetres());
}
private <R extends AisMessage & HasMmsi> void handleProperty(Subscriber<? super CraftProperty> child, Timestamped<R> m, CraftPropertyName name, Object value) {
if (!isUnsubscribed() && value != null)
child.onNext(new CraftProperty(new Mmsi(m.message().getMmsi()), name, value.toString(), m.time()));
}
};
}
Aggregations