use of reactor.core.publisher.Sinks.One in project CavalliumDBEngine by cavallium.
the class SpeedExample method test.
public static <A, B, C> Mono<Void> test(String name, Mono<A> setup, Function<A, Mono<B>> test, long numRepeats, Function<A, Mono<C>> close) {
One<Instant> instantInit = Sinks.one();
One<Instant> instantInitTest = Sinks.one();
One<Instant> instantEndTest = Sinks.one();
One<Instant> instantEnd = Sinks.one();
Duration WAIT_TIME = Duration.ofSeconds(5);
Duration WAIT_TIME_END = Duration.ofSeconds(5);
return Mono.delay(WAIT_TIME).doOnSuccess(s -> {
System.out.println("----------------------------------------------------------------------");
System.out.println(name);
}).then(Mono.fromRunnable(() -> instantInit.tryEmitValue(now()))).then(setup).doOnSuccess(s -> instantInitTest.tryEmitValue(now())).flatMap(a -> Mono.defer(() -> test.apply(a)).repeat(numRepeats - 1).then().doOnSuccess(s -> instantEndTest.tryEmitValue(now())).then(close.apply(a))).doOnSuccess(s -> instantEnd.tryEmitValue(now())).then(Mono.zip(instantInit.asMono(), instantInitTest.asMono(), instantEndTest.asMono(), instantEnd.asMono())).doOnSuccess(tuple -> {
System.out.println("\t - Executed " + DecimalFormat.getInstance(Locale.ITALY).format((numRepeats * batchSize)) + " times:");
System.out.println("\t - Test time: " + DecimalFormat.getInstance(Locale.ITALY).format(Duration.between(tuple.getT2(), tuple.getT3()).toNanos() / (double) (numRepeats * batchSize) / (double) 1000000) + "ms");
System.out.println("\t - Test speed: " + DecimalFormat.getInstance(Locale.ITALY).format((numRepeats * batchSize) / (Duration.between(tuple.getT2(), tuple.getT3()).toNanos() / (double) 1000000 / (double) 1000)) + " tests/s");
System.out.println("\t - Total time: " + DecimalFormat.getInstance(Locale.ITALY).format(Duration.between(tuple.getT2(), tuple.getT3()).toNanos() / (double) 1000000) + "ms");
System.out.println("\t - Total time (setup+test+end): " + DecimalFormat.getInstance(Locale.ITALY).format(Duration.between(tuple.getT1(), tuple.getT4()).toNanos() / (double) 1000000) + "ms");
System.out.println("----------------------------------------------------------------------");
}).delayElement(WAIT_TIME_END).then();
}
use of reactor.core.publisher.Sinks.One in project sirius-components by eclipse-sirius.
the class CreateDiagramEventHandlerTests method testDiagramCreation.
@Test
public void testDiagramCreation() {
IRepresentationDescriptionSearchService representationDescriptionSearchService = new IRepresentationDescriptionSearchService.NoOp() {
@Override
public Optional<IRepresentationDescription> findById(IEditingContext editingContext, UUID id) {
// @formatter:off
DiagramDescription diagramDescription = DiagramDescription.newDiagramDescription(UUID.randomUUID()).label(// $NON-NLS-1$
"label").canCreatePredicate(variableManager -> Boolean.TRUE).edgeDescriptions(new ArrayList<>()).labelProvider(// $NON-NLS-1$
variableManager -> "label").toolSections(List.of()).nodeDescriptions(new ArrayList<>()).targetObjectIdProvider(// $NON-NLS-1$
variableManager -> "targetObjectId").dropHandler(// $NON-NLS-1$
variableManager -> new Failure("")).build();
return Optional.of(diagramDescription);
}
};
AtomicBoolean hasBeenCalled = new AtomicBoolean();
IDiagramCreationService diagramCreationService = new IDiagramCreationService.NoOp() {
@Override
public Diagram create(String label, Object targetObject, DiagramDescription diagramDescription, IEditingContext editingContext) {
hasBeenCalled.set(true);
return new TestDiagramBuilder().getDiagram(UUID.randomUUID().toString());
}
};
IObjectService objectService = new IObjectService.NoOp() {
@Override
public Optional<Object> getObject(IEditingContext editingContext, String objectId) {
return Optional.of(new Object());
}
};
CreateDiagramEventHandler handler = new CreateDiagramEventHandler(representationDescriptionSearchService, new IRepresentationPersistenceService.NoOp(), diagramCreationService, objectService, new ICollaborativeDiagramMessageService.NoOp(), new SimpleMeterRegistry());
// $NON-NLS-1$//$NON-NLS-2$
var input = new CreateRepresentationInput(UUID.randomUUID(), UUID.randomUUID().toString(), UUID.randomUUID(), "objectId", "representationName");
assertThat(handler.canHandle(null, input)).isTrue();
Many<ChangeDescription> changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer();
One<IPayload> payloadSink = Sinks.one();
IEditingContext editingContext = () -> UUID.randomUUID().toString();
handler.handle(payloadSink, changeDescriptionSink, editingContext, input);
assertThat(hasBeenCalled.get()).isTrue();
ChangeDescription changeDescription = changeDescriptionSink.asFlux().blockFirst();
assertThat(changeDescription.getKind()).isEqualTo(ChangeKind.REPRESENTATION_CREATION);
IPayload payload = payloadSink.asMono().block();
assertThat(payload).isInstanceOf(CreateRepresentationSuccessPayload.class);
}
use of reactor.core.publisher.Sinks.One in project sirius-components by eclipse-sirius.
the class FormEventProcessor method handle.
@Override
public void handle(One<IPayload> payloadSink, Many<ChangeDescription> changeDescriptionSink, IRepresentationInput representationInput) {
if (representationInput instanceof IFormInput) {
IFormInput formInput = (IFormInput) representationInput;
if (formInput instanceof UpdateWidgetFocusInput) {
UpdateWidgetFocusInput input = (UpdateWidgetFocusInput) formInput;
this.widgetSubscriptionManager.handle(input);
payloadSink.tryEmitValue(new UpdateWidgetFocusSuccessPayload(representationInput.getId(), input.getWidgetId()));
changeDescriptionSink.tryEmitNext(new ChangeDescription(ChangeKind.FOCUS_CHANGE, representationInput.getRepresentationId(), input));
} else {
Optional<IFormEventHandler> optionalFormEventHandler = this.formEventHandlers.stream().filter(handler -> handler.canHandle(formInput)).findFirst();
if (optionalFormEventHandler.isPresent()) {
IFormEventHandler formEventHandler = optionalFormEventHandler.get();
formEventHandler.handle(payloadSink, changeDescriptionSink, this.currentForm.get(), formInput);
} else {
// $NON-NLS-1$
this.logger.warn("No handler found for event: {}", formInput);
}
}
}
}
use of reactor.core.publisher.Sinks.One in project sirius-components by eclipse-sirius.
the class EditMultiSelectEventHandler method handle.
@Override
public void handle(One<IPayload> payloadSink, Many<ChangeDescription> changeDescriptionSink, Form form, IFormInput formInput) {
this.counter.increment();
String message = this.messageService.invalidInput(formInput.getClass().getSimpleName(), EditMultiSelectInput.class.getSimpleName());
IPayload payload = new ErrorPayload(formInput.getId(), message);
ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, formInput.getRepresentationId(), formInput);
if (formInput instanceof EditMultiSelectInput) {
EditMultiSelectInput input = (EditMultiSelectInput) formInput;
// @formatter:off
Optional<MultiSelect> optionalMultiSelect = this.formQueryService.findWidget(form, input.getSelectId()).filter(MultiSelect.class::isInstance).map(MultiSelect.class::cast);
IStatus status = optionalMultiSelect.map(MultiSelect::getNewValuesHandler).map(handler -> handler.apply(input.getNewValues())).orElse(// $NON-NLS-1$
new Failure(""));
if (status instanceof Success) {
payload = new EditMultiSelectSuccessPayload(formInput.getId());
changeDescription = new ChangeDescription(ChangeKind.SEMANTIC_CHANGE, formInput.getRepresentationId(), formInput);
} else if (status instanceof Failure) {
payload = new ErrorPayload(formInput.getId(), ((Failure) status).getMessage());
}
}
changeDescriptionSink.tryEmitNext(changeDescription);
payloadSink.tryEmitValue(payload);
}
use of reactor.core.publisher.Sinks.One in project sirius-components by eclipse-sirius.
the class EditingContextEventProcessor method refreshOtherRepresentations.
/**
* Refresh all the representations except the one with the given representationId.
*
* @param input
* The input which has triggered the refresh sequence
* @param representationId
* The identifier of the representation which should not be refreshed
* @param changeDescription
* The description of change to consider in order to determine if the representation should be refreshed
*/
private void refreshOtherRepresentations(ChangeDescription changeDescription) {
// @formatter:off
this.representationEventProcessors.entrySet().stream().filter(entry -> !Objects.equals(entry.getKey(), changeDescription.getSourceId())).map(Entry::getValue).map(RepresentationEventProcessorEntry::getRepresentationEventProcessor).forEach(representationEventProcessor -> {
representationEventProcessor.refresh(changeDescription);
IRepresentation representation = representationEventProcessor.getRepresentation();
this.applicationEventPublisher.publishEvent(new RepresentationRefreshedEvent(this.editingContext.getId(), representation));
});
// @formatter:on
}
Aggregations