Search in sources :

Example 11 with One

use of reactor.core.publisher.Sinks.One in project sirius-components by eclipse-sirius.

the class EditSelectEventHandler 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(), EditSelectInput.class.getSimpleName());
    IPayload payload = new ErrorPayload(formInput.getId(), message);
    ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, formInput.getRepresentationId(), formInput);
    if (formInput instanceof EditSelectInput) {
        EditSelectInput input = (EditSelectInput) formInput;
        // @formatter:off
        Optional<Select> optionalSelect = this.formQueryService.findWidget(form, input.getSelectId()).filter(Select.class::isInstance).map(Select.class::cast);
        IStatus status = optionalSelect.map(Select::getNewValueHandler).map(handler -> handler.apply(input.getNewValue())).orElse(// $NON-NLS-1$
        new Failure(""));
        if (status instanceof Success) {
            payload = new EditSelectSuccessPayload(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);
}
Also used : ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) Counter(io.micrometer.core.instrument.Counter) Form(org.eclipse.sirius.components.forms.Form) ChangeKind(org.eclipse.sirius.components.collaborative.api.ChangeKind) EditSelectSuccessPayload(org.eclipse.sirius.components.collaborative.forms.dto.EditSelectSuccessPayload) Failure(org.eclipse.sirius.components.representations.Failure) Success(org.eclipse.sirius.components.representations.Success) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) Select(org.eclipse.sirius.components.forms.Select) One(reactor.core.publisher.Sinks.One) Objects(java.util.Objects) IFormEventHandler(org.eclipse.sirius.components.collaborative.forms.api.IFormEventHandler) IFormQueryService(org.eclipse.sirius.components.collaborative.forms.api.IFormQueryService) ICollaborativeFormMessageService(org.eclipse.sirius.components.collaborative.forms.messages.ICollaborativeFormMessageService) IPayload(org.eclipse.sirius.components.core.api.IPayload) IStatus(org.eclipse.sirius.components.representations.IStatus) Monitoring(org.eclipse.sirius.components.collaborative.api.Monitoring) Service(org.springframework.stereotype.Service) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) Many(reactor.core.publisher.Sinks.Many) Optional(java.util.Optional) IFormInput(org.eclipse.sirius.components.collaborative.forms.api.IFormInput) EditSelectInput(org.eclipse.sirius.components.collaborative.forms.dto.EditSelectInput) ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) IStatus(org.eclipse.sirius.components.representations.IStatus) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) Select(org.eclipse.sirius.components.forms.Select) EditSelectSuccessPayload(org.eclipse.sirius.components.collaborative.forms.dto.EditSelectSuccessPayload) Failure(org.eclipse.sirius.components.representations.Failure) Success(org.eclipse.sirius.components.representations.Success) EditSelectInput(org.eclipse.sirius.components.collaborative.forms.dto.EditSelectInput) IPayload(org.eclipse.sirius.components.core.api.IPayload)

Example 12 with One

use of reactor.core.publisher.Sinks.One in project sirius-components by eclipse-sirius.

the class EditTextfieldEventHandler 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(), EditTextfieldInput.class.getSimpleName());
    IPayload payload = new ErrorPayload(formInput.getId(), message);
    ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, formInput.getRepresentationId(), formInput);
    if (formInput instanceof EditTextfieldInput) {
        EditTextfieldInput input = (EditTextfieldInput) formInput;
        // @formatter:off
        IStatus status = this.formQueryService.findWidget(form, input.getTextfieldId()).map(widget -> {
            Function<String, IStatus> handlerFunction = null;
            if (widget instanceof Textfield) {
                handlerFunction = ((Textfield) widget).getNewValueHandler();
            } else if (widget instanceof Textarea) {
                handlerFunction = ((Textarea) widget).getNewValueHandler();
            }
            return handlerFunction;
        }).map(handler -> handler.apply(input.getNewValue())).orElse(// $NON-NLS-1$
        new Failure(""));
        if (status instanceof Success) {
            payload = new EditTextfieldSuccessPayload(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);
}
Also used : ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) Counter(io.micrometer.core.instrument.Counter) Form(org.eclipse.sirius.components.forms.Form) ChangeKind(org.eclipse.sirius.components.collaborative.api.ChangeKind) Failure(org.eclipse.sirius.components.representations.Failure) Success(org.eclipse.sirius.components.representations.Success) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) One(reactor.core.publisher.Sinks.One) Textarea(org.eclipse.sirius.components.forms.Textarea) Function(java.util.function.Function) EditTextfieldSuccessPayload(org.eclipse.sirius.components.collaborative.forms.dto.EditTextfieldSuccessPayload) Objects(java.util.Objects) IFormEventHandler(org.eclipse.sirius.components.collaborative.forms.api.IFormEventHandler) IFormQueryService(org.eclipse.sirius.components.collaborative.forms.api.IFormQueryService) ICollaborativeFormMessageService(org.eclipse.sirius.components.collaborative.forms.messages.ICollaborativeFormMessageService) IPayload(org.eclipse.sirius.components.core.api.IPayload) Textfield(org.eclipse.sirius.components.forms.Textfield) IStatus(org.eclipse.sirius.components.representations.IStatus) Monitoring(org.eclipse.sirius.components.collaborative.api.Monitoring) Service(org.springframework.stereotype.Service) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) EditTextfieldInput(org.eclipse.sirius.components.collaborative.forms.dto.EditTextfieldInput) Many(reactor.core.publisher.Sinks.Many) IFormInput(org.eclipse.sirius.components.collaborative.forms.api.IFormInput) IStatus(org.eclipse.sirius.components.representations.IStatus) Success(org.eclipse.sirius.components.representations.Success) IPayload(org.eclipse.sirius.components.core.api.IPayload) ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) EditTextfieldInput(org.eclipse.sirius.components.collaborative.forms.dto.EditTextfieldInput) Textarea(org.eclipse.sirius.components.forms.Textarea) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) Textfield(org.eclipse.sirius.components.forms.Textfield) Failure(org.eclipse.sirius.components.representations.Failure) EditTextfieldSuccessPayload(org.eclipse.sirius.components.collaborative.forms.dto.EditTextfieldSuccessPayload)

Example 13 with One

use of reactor.core.publisher.Sinks.One in project sirius-components by eclipse-sirius.

the class TreePathEventHandler method handle.

@Override
public void handle(One<IPayload> payloadSink, Many<ChangeDescription> changeDescriptionSink, IEditingContext editingContext, Tree tree, ITreeInput treeInput) {
    IPayload payload = new TreePathSuccessPayload(treeInput.getId(), new TreePath(List.of(), 0));
    ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, treeInput.getRepresentationId(), treeInput);
    if (treeInput instanceof TreePathInput) {
        TreePathInput input = (TreePathInput) treeInput;
        Optional<ITreePathProvider> optionalPathProvider = this.treePathProviders.stream().filter(treePathProvider -> treePathProvider.canHandle(tree)).findFirst();
        if (optionalPathProvider.isPresent()) {
            IPayload resultPayload = optionalPathProvider.get().handle(editingContext, tree, input);
            if (resultPayload instanceof TreePathSuccessPayload) {
                payload = resultPayload;
            } else if (resultPayload instanceof ErrorPayload) {
                ErrorPayload errorPayload = (ErrorPayload) resultPayload;
                this.logger.warn(errorPayload.getMessage());
            }
        }
    }
    changeDescriptionSink.tryEmitNext(changeDescription);
    payloadSink.tryEmitValue(payload);
}
Also used : ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) ChangeKind(org.eclipse.sirius.components.collaborative.api.ChangeKind) TreePathSuccessPayload(org.eclipse.sirius.components.collaborative.trees.dto.TreePathSuccessPayload) IEditingContext(org.eclipse.sirius.components.core.api.IEditingContext) Logger(org.slf4j.Logger) TreePath(org.eclipse.sirius.components.collaborative.trees.dto.TreePath) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) LoggerFactory(org.slf4j.LoggerFactory) One(reactor.core.publisher.Sinks.One) ITreeEventHandler(org.eclipse.sirius.components.collaborative.trees.api.ITreeEventHandler) ITreeInput(org.eclipse.sirius.components.collaborative.trees.api.ITreeInput) Objects(java.util.Objects) List(java.util.List) IPayload(org.eclipse.sirius.components.core.api.IPayload) Service(org.springframework.stereotype.Service) Many(reactor.core.publisher.Sinks.Many) Optional(java.util.Optional) ITreePathProvider(org.eclipse.sirius.components.collaborative.trees.api.ITreePathProvider) TreePathInput(org.eclipse.sirius.components.collaborative.trees.dto.TreePathInput) Tree(org.eclipse.sirius.components.trees.Tree) TreePathInput(org.eclipse.sirius.components.collaborative.trees.dto.TreePathInput) ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) TreePath(org.eclipse.sirius.components.collaborative.trees.dto.TreePath) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) IPayload(org.eclipse.sirius.components.core.api.IPayload) TreePathSuccessPayload(org.eclipse.sirius.components.collaborative.trees.dto.TreePathSuccessPayload) ITreePathProvider(org.eclipse.sirius.components.collaborative.trees.api.ITreePathProvider)

Example 14 with One

use of reactor.core.publisher.Sinks.One in project sirius-components by eclipse-sirius.

the class TreeEventProcessor method handle.

@Override
public void handle(One<IPayload> payloadSink, Many<ChangeDescription> changeDescriptionSink, IRepresentationInput representationInput) {
    if (representationInput instanceof ITreeInput) {
        ITreeInput treeInput = (ITreeInput) representationInput;
        Optional<ITreeEventHandler> optionalTreeEventHandler = this.treeEventHandlers.stream().filter(handler -> handler.canHandle(treeInput)).findFirst();
        if (optionalTreeEventHandler.isPresent()) {
            ITreeEventHandler treeEventHandler = optionalTreeEventHandler.get();
            treeEventHandler.handle(payloadSink, changeDescriptionSink, this.editingContext, this.currentTree.get(), treeInput);
        } else {
            // $NON-NLS-1$
            this.logger.warn("No handler found for event: {}", treeInput);
        }
    }
}
Also used : Sinks(reactor.core.publisher.Sinks) IEditingContext(org.eclipse.sirius.components.core.api.IEditingContext) LoggerFactory(org.slf4j.LoggerFactory) One(reactor.core.publisher.Sinks.One) IInput(org.eclipse.sirius.components.core.api.IInput) AtomicReference(java.util.concurrent.atomic.AtomicReference) Timer(io.micrometer.core.instrument.Timer) Monitoring(org.eclipse.sirius.components.collaborative.api.Monitoring) IRepresentation(org.eclipse.sirius.components.representations.IRepresentation) IRepresentationRefreshPolicyRegistry(org.eclipse.sirius.components.collaborative.api.IRepresentationRefreshPolicyRegistry) EmitResult(reactor.core.publisher.Sinks.EmitResult) ITreeEventProcessor(org.eclipse.sirius.components.collaborative.trees.api.ITreeEventProcessor) ChangeKind(org.eclipse.sirius.components.collaborative.api.ChangeKind) ISubscriptionManager(org.eclipse.sirius.components.collaborative.api.ISubscriptionManager) Logger(org.slf4j.Logger) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) Mono(reactor.core.publisher.Mono) IRepresentationInput(org.eclipse.sirius.components.core.api.IRepresentationInput) ITreeEventHandler(org.eclipse.sirius.components.collaborative.trees.api.ITreeEventHandler) IRepresentationRefreshPolicy(org.eclipse.sirius.components.collaborative.api.IRepresentationRefreshPolicy) ITreeInput(org.eclipse.sirius.components.collaborative.trees.api.ITreeInput) ITreeService(org.eclipse.sirius.components.collaborative.trees.api.ITreeService) Objects(java.util.Objects) TimeUnit(java.util.concurrent.TimeUnit) Flux(reactor.core.publisher.Flux) List(java.util.List) IPayload(org.eclipse.sirius.components.core.api.IPayload) TreeRefreshedEventPayload(org.eclipse.sirius.components.collaborative.trees.dto.TreeRefreshedEventPayload) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) TreeCreationParameters(org.eclipse.sirius.components.collaborative.trees.api.TreeCreationParameters) Many(reactor.core.publisher.Sinks.Many) Optional(java.util.Optional) Tree(org.eclipse.sirius.components.trees.Tree) ITreeInput(org.eclipse.sirius.components.collaborative.trees.api.ITreeInput) ITreeEventHandler(org.eclipse.sirius.components.collaborative.trees.api.ITreeEventHandler)

Example 15 with One

use of reactor.core.publisher.Sinks.One in project sirius-web by eclipse-sirius.

the class DeleteDocumentEventHandler method handle.

@Override
public void handle(One<IPayload> payloadSink, Many<ChangeDescription> changeDescriptionSink, IEditingContext editingContext, IInput input) {
    this.counter.increment();
    String message = this.messageService.invalidInput(input.getClass().getSimpleName(), DeleteDocumentInput.class.getSimpleName());
    IPayload payload = new ErrorPayload(input.getId(), message);
    ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, editingContext.getId(), input);
    // @formatter:off
    var optionalEditingDomain = Optional.of(editingContext).filter(EditingContext.class::isInstance).map(EditingContext.class::cast).map(EditingContext::getDomain);
    if (input instanceof DeleteDocumentInput) {
        DeleteDocumentInput deleteDocumentInput = (DeleteDocumentInput) input;
        var optionalDocument = this.documentService.getDocument(deleteDocumentInput.getDocumentId());
        if (optionalEditingDomain.isPresent() && optionalDocument.isPresent()) {
            AdapterFactoryEditingDomain editingDomain = optionalEditingDomain.get();
            Document document = optionalDocument.get();
            ResourceSet resourceSet = editingDomain.getResourceSet();
            URI uri = URI.createURI(document.getId().toString());
            // @formatter:off
            List<Resource> resourcesToDelete = resourceSet.getResources().stream().filter(resource -> resource.getURI().equals(uri)).collect(Collectors.toUnmodifiableList());
            resourcesToDelete.stream().forEach(resourceSet.getResources()::remove);
            // @formatter:on
            this.documentService.delete(document.getId());
            payload = new DeleteDocumentSuccessPayload(input.getId());
            changeDescription = new ChangeDescription(ChangeKind.SEMANTIC_CHANGE, editingContext.getId(), input);
        }
    }
    payloadSink.tryEmitValue(payload);
    changeDescriptionSink.tryEmitNext(changeDescription);
}
Also used : AdapterFactoryEditingDomain(org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain) ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) IEditingContext(org.eclipse.sirius.components.core.api.IEditingContext) URI(org.eclipse.emf.common.util.URI) One(reactor.core.publisher.Sinks.One) IInput(org.eclipse.sirius.components.core.api.IInput) ResourceSet(org.eclipse.emf.ecore.resource.ResourceSet) EditingContext(org.eclipse.sirius.components.emf.services.EditingContext) Document(org.eclipse.sirius.web.services.api.document.Document) Monitoring(org.eclipse.sirius.components.collaborative.api.Monitoring) Service(org.springframework.stereotype.Service) DeleteDocumentInput(org.eclipse.sirius.components.collaborative.dto.DeleteDocumentInput) Counter(io.micrometer.core.instrument.Counter) ChangeKind(org.eclipse.sirius.components.collaborative.api.ChangeKind) IDocumentService(org.eclipse.sirius.web.services.api.document.IDocumentService) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) Collectors(java.util.stream.Collectors) DeleteDocumentSuccessPayload(org.eclipse.sirius.components.collaborative.dto.DeleteDocumentSuccessPayload) Objects(java.util.Objects) List(java.util.List) IPayload(org.eclipse.sirius.components.core.api.IPayload) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) Resource(org.eclipse.emf.ecore.resource.Resource) IServicesMessageService(org.eclipse.sirius.web.services.messages.IServicesMessageService) Many(reactor.core.publisher.Sinks.Many) Optional(java.util.Optional) IEditingContextEventHandler(org.eclipse.sirius.components.collaborative.api.IEditingContextEventHandler) AdapterFactoryEditingDomain(org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain) Resource(org.eclipse.emf.ecore.resource.Resource) ResourceSet(org.eclipse.emf.ecore.resource.ResourceSet) Document(org.eclipse.sirius.web.services.api.document.Document) URI(org.eclipse.emf.common.util.URI) IPayload(org.eclipse.sirius.components.core.api.IPayload) ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) IEditingContext(org.eclipse.sirius.components.core.api.IEditingContext) EditingContext(org.eclipse.sirius.components.emf.services.EditingContext) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) DeleteDocumentInput(org.eclipse.sirius.components.collaborative.dto.DeleteDocumentInput) DeleteDocumentSuccessPayload(org.eclipse.sirius.components.collaborative.dto.DeleteDocumentSuccessPayload)

Aggregations

One (reactor.core.publisher.Sinks.One)22 ChangeDescription (org.eclipse.sirius.components.collaborative.api.ChangeDescription)21 ChangeKind (org.eclipse.sirius.components.collaborative.api.ChangeKind)21 IPayload (org.eclipse.sirius.components.core.api.IPayload)21 Many (reactor.core.publisher.Sinks.Many)21 Optional (java.util.Optional)18 List (java.util.List)16 Objects (java.util.Objects)15 Form (org.eclipse.sirius.components.forms.Form)12 Sinks (reactor.core.publisher.Sinks)12 IFormQueryService (org.eclipse.sirius.components.collaborative.forms.api.IFormQueryService)11 ICollaborativeFormMessageService (org.eclipse.sirius.components.collaborative.forms.messages.ICollaborativeFormMessageService)11 ErrorPayload (org.eclipse.sirius.components.core.api.ErrorPayload)11 Success (org.eclipse.sirius.components.representations.Success)11 IEditingContext (org.eclipse.sirius.components.core.api.IEditingContext)10 IStatus (org.eclipse.sirius.components.representations.IStatus)10 MeterRegistry (io.micrometer.core.instrument.MeterRegistry)9 UUID (java.util.UUID)9 Monitoring (org.eclipse.sirius.components.collaborative.api.Monitoring)9 Service (org.springframework.stereotype.Service)8