Search in sources :

Example 1 with CreateDocumentInput

use of org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput in project sirius-web by eclipse-sirius.

the class CreateDocumentEventHandlerTests method testCreateTwoDocumentWithSameName.

@Test
public void testCreateTwoDocumentWithSameName() {
    IDocumentService documentService = new IDocumentService.NoOp() {

        @Override
        public Optional<Document> createDocument(String projectId, String name, String content) {
            // $NON-NLS-1$ //$NON-NLS-2$
            return Optional.of(new Document(UUID.randomUUID(), new Project(UUID.fromString(projectId), "", new Profile(UUID.randomUUID(), "username"), Visibility.PUBLIC), name, content));
        }
    };
    IStereotypeDescriptionService stereotypeDescriptionService = new IStereotypeDescriptionService.NoOp() {

        @Override
        public Optional<StereotypeDescription> getStereotypeDescriptionById(String editingContextId, UUID stereotypeId) {
            // $NON-NLS-1$
            StereotypeDescription stereotypeDescription = new StereotypeDescription(stereotypeId, "label", () -> CONTENT);
            return Optional.of(stereotypeDescription);
        }
    };
    IServicesMessageService messageService = new NoOpServicesMessageService();
    AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create();
    EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain);
    CreateDocumentEventHandler handler = new CreateDocumentEventHandler(documentService, stereotypeDescriptionService, messageService, new SimpleMeterRegistry());
    Many<ChangeDescription> changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer();
    changeDescriptionSink.asFlux().subscribe(changeDescription -> {
        assertThat(changeDescription.getKind()).isEqualTo(ChangeKind.SEMANTIC_CHANGE);
    });
    var firstCreateInput = new CreateDocumentInput(UUID.randomUUID(), editingContext.getId(), DOCUMENT_NAME, STEREOTYPE_DESCRIPTION_ID);
    assertThat(handler.canHandle(editingContext, firstCreateInput)).isTrue();
    One<IPayload> firstPayloadSink = Sinks.one();
    handler.handle(firstPayloadSink, changeDescriptionSink, editingContext, firstCreateInput);
    IPayload firstPayload = firstPayloadSink.asMono().block();
    assertThat(firstPayload).isInstanceOf(CreateDocumentSuccessPayload.class);
    var secondCreatedInput = new CreateDocumentInput(UUID.randomUUID(), editingContext.getId(), DOCUMENT_NAME, STEREOTYPE_DESCRIPTION_ID);
    assertThat(handler.canHandle(editingContext, secondCreatedInput)).isTrue();
    One<IPayload> secondPayloadSink = Sinks.one();
    handler.handle(secondPayloadSink, changeDescriptionSink, editingContext, secondCreatedInput);
    IPayload secondPayload = firstPayloadSink.asMono().block();
    assertThat(secondPayload).isInstanceOf(CreateDocumentSuccessPayload.class);
}
Also used : AdapterFactoryEditingDomain(org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain) StereotypeDescription(org.eclipse.sirius.components.core.configuration.StereotypeDescription) IServicesMessageService(org.eclipse.sirius.web.services.messages.IServicesMessageService) NoOpServicesMessageService(org.eclipse.sirius.web.services.projects.NoOpServicesMessageService) SimpleMeterRegistry(io.micrometer.core.instrument.simple.SimpleMeterRegistry) IStereotypeDescriptionService(org.eclipse.sirius.web.services.api.stereotypes.IStereotypeDescriptionService) Document(org.eclipse.sirius.web.services.api.document.Document) Profile(org.eclipse.sirius.web.services.api.accounts.Profile) IPayload(org.eclipse.sirius.components.core.api.IPayload) Project(org.eclipse.sirius.web.services.api.projects.Project) EditingContext(org.eclipse.sirius.components.emf.services.EditingContext) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) IDocumentService(org.eclipse.sirius.web.services.api.document.IDocumentService) UUID(java.util.UUID) CreateDocumentInput(org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput) Test(org.junit.jupiter.api.Test)

Example 2 with CreateDocumentInput

use of org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput in project sirius-web by eclipse-sirius.

the class CreateDocumentEventHandlerTests method testCreateDocument.

@Test
public void testCreateDocument() {
    IDocumentService documentService = new IDocumentService.NoOp() {

        @Override
        public Optional<Document> createDocument(String projectId, String name, String content) {
            // $NON-NLS-1$ //$NON-NLS-2$
            return Optional.of(new Document(UUID.randomUUID(), new Project(UUID.fromString(projectId), "", new Profile(UUID.randomUUID(), "username"), Visibility.PUBLIC), name, content));
        }
    };
    IStereotypeDescriptionService stereotypeDescriptionService = new IStereotypeDescriptionService.NoOp() {

        @Override
        public Optional<StereotypeDescription> getStereotypeDescriptionById(String editingContextId, UUID stereotypeId) {
            // $NON-NLS-1$
            StereotypeDescription stereotypeDescription = new StereotypeDescription(stereotypeId, "label", () -> CONTENT);
            return Optional.of(stereotypeDescription);
        }
    };
    IServicesMessageService messageService = new NoOpServicesMessageService();
    CreateDocumentEventHandler handler = new CreateDocumentEventHandler(documentService, stereotypeDescriptionService, messageService, new SimpleMeterRegistry());
    var input = new CreateDocumentInput(UUID.randomUUID(), UUID.randomUUID().toString(), DOCUMENT_NAME, STEREOTYPE_DESCRIPTION_ID);
    AdapterFactoryEditingDomain editingDomain = new EditingDomainFactory().create();
    EditingContext editingContext = new EditingContext(UUID.randomUUID().toString(), editingDomain);
    Many<ChangeDescription> changeDescriptionSink = Sinks.many().unicast().onBackpressureBuffer();
    One<IPayload> payloadSink = Sinks.one();
    assertThat(handler.canHandle(editingContext, input)).isTrue();
    handler.handle(payloadSink, changeDescriptionSink, editingContext, input);
    ChangeDescription changeDescription = changeDescriptionSink.asFlux().blockFirst();
    assertThat(changeDescription.getKind()).isEqualTo(ChangeKind.SEMANTIC_CHANGE);
    IPayload payload = payloadSink.asMono().block();
    assertThat(payload).isInstanceOf(CreateDocumentSuccessPayload.class);
    assertThat(editingDomain.getResourceSet().getResources().size()).isEqualTo(1);
    // $NON-NLS-1$
    Condition<Object> condition = new Condition<>(adapter -> adapter instanceof DocumentMetadataAdapter, "has an DocumentMetadataAdapter");
    assertThat(editingDomain.getResourceSet().getResources().get(0).eAdapters()).areAtLeastOne(condition);
}
Also used : AdapterFactoryEditingDomain(org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain) NoOpServicesMessageService(org.eclipse.sirius.web.services.projects.NoOpServicesMessageService) IStereotypeDescriptionService(org.eclipse.sirius.web.services.api.stereotypes.IStereotypeDescriptionService) Document(org.eclipse.sirius.web.services.api.document.Document) Profile(org.eclipse.sirius.web.services.api.accounts.Profile) IPayload(org.eclipse.sirius.components.core.api.IPayload) EditingContext(org.eclipse.sirius.components.emf.services.EditingContext) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) UUID(java.util.UUID) CreateDocumentInput(org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput) Condition(org.assertj.core.api.Condition) StereotypeDescription(org.eclipse.sirius.components.core.configuration.StereotypeDescription) IServicesMessageService(org.eclipse.sirius.web.services.messages.IServicesMessageService) SimpleMeterRegistry(io.micrometer.core.instrument.simple.SimpleMeterRegistry) Project(org.eclipse.sirius.web.services.api.projects.Project) IDocumentService(org.eclipse.sirius.web.services.api.document.IDocumentService) Test(org.junit.jupiter.api.Test)

Example 3 with CreateDocumentInput

use of org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput in project sirius-web by eclipse-sirius.

the class CreateDocumentEventHandler method handle.

@Override
public void handle(One<IPayload> payloadSink, Many<ChangeDescription> changeDescriptionSink, IEditingContext editingContext, IInput input) {
    this.counter.increment();
    IPayload payload = new ErrorPayload(input.getId(), this.messageService.unexpectedError());
    ChangeDescription changeDescription = new ChangeDescription(ChangeKind.NOTHING, editingContext.getId(), input);
    if (input instanceof CreateDocumentInput) {
        CreateDocumentInput createDocumentInput = (CreateDocumentInput) input;
        String name = createDocumentInput.getName().trim();
        String editingContextId = createDocumentInput.getEditingContextId();
        UUID stereotypeDescriptionId = createDocumentInput.getStereotypeDescriptionId();
        Optional<StereotypeDescription> optionalStereotypeDescription = this.stereotypeDescriptionService.getStereotypeDescriptionById(editingContextId, stereotypeDescriptionId);
        if (name.isBlank()) {
            payload = new ErrorPayload(input.getId(), this.messageService.invalidDocumentName(name));
            payloadSink.tryEmitValue(payload);
            changeDescriptionSink.tryEmitNext(changeDescription);
        } else if (optionalStereotypeDescription.isEmpty()) {
            payload = new ErrorPayload(input.getId(), this.messageService.stereotypeDescriptionNotFound(stereotypeDescriptionId));
            payloadSink.tryEmitValue(payload);
            changeDescriptionSink.tryEmitNext(changeDescription);
        } else {
            StereotypeDescription stereotypeDescription = optionalStereotypeDescription.get();
            this.createDocument(payloadSink, changeDescriptionSink, createDocumentInput, editingContext, editingContextId, name, stereotypeDescription);
        }
    }
}
Also used : ErrorPayload(org.eclipse.sirius.components.core.api.ErrorPayload) StereotypeDescription(org.eclipse.sirius.components.core.configuration.StereotypeDescription) ChangeDescription(org.eclipse.sirius.components.collaborative.api.ChangeDescription) UUID(java.util.UUID) IPayload(org.eclipse.sirius.components.core.api.IPayload) CreateDocumentInput(org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput)

Aggregations

UUID (java.util.UUID)3 ChangeDescription (org.eclipse.sirius.components.collaborative.api.ChangeDescription)3 CreateDocumentInput (org.eclipse.sirius.components.collaborative.dto.CreateDocumentInput)3 IPayload (org.eclipse.sirius.components.core.api.IPayload)3 StereotypeDescription (org.eclipse.sirius.components.core.configuration.StereotypeDescription)3 SimpleMeterRegistry (io.micrometer.core.instrument.simple.SimpleMeterRegistry)2 AdapterFactoryEditingDomain (org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain)2 EditingContext (org.eclipse.sirius.components.emf.services.EditingContext)2 Profile (org.eclipse.sirius.web.services.api.accounts.Profile)2 Document (org.eclipse.sirius.web.services.api.document.Document)2 IDocumentService (org.eclipse.sirius.web.services.api.document.IDocumentService)2 Project (org.eclipse.sirius.web.services.api.projects.Project)2 IStereotypeDescriptionService (org.eclipse.sirius.web.services.api.stereotypes.IStereotypeDescriptionService)2 IServicesMessageService (org.eclipse.sirius.web.services.messages.IServicesMessageService)2 NoOpServicesMessageService (org.eclipse.sirius.web.services.projects.NoOpServicesMessageService)2 Test (org.junit.jupiter.api.Test)2 Condition (org.assertj.core.api.Condition)1 ErrorPayload (org.eclipse.sirius.components.core.api.ErrorPayload)1