use of org.eclipse.sirius.components.core.configuration.StereotypeDescription 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);
}
use of org.eclipse.sirius.components.core.configuration.StereotypeDescription 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);
}
use of org.eclipse.sirius.components.core.configuration.StereotypeDescription in project sirius-web by eclipse-sirius.
the class EditingContextStereotypeDescriptionsDataFetcher method get.
@Override
public Connection<StereotypeDescription> get(DataFetchingEnvironment environment) throws Exception {
String editingContextId = environment.getSource();
var stereotypeDescriptions = this.stereotypeDescriptionService.getStereotypeDescriptions(editingContextId);
// @formatter:off
List<Edge<StereotypeDescription>> stereotypeDescriptionEdges = stereotypeDescriptions.stream().map(stereotypeDescription -> {
String value = Base64.getEncoder().encodeToString(stereotypeDescription.getId().toString().getBytes());
ConnectionCursor cursor = new DefaultConnectionCursor(value);
return new DefaultEdge<>(stereotypeDescription, cursor);
}).collect(Collectors.toList());
// @formatter:on
ConnectionCursor startCursor = stereotypeDescriptionEdges.stream().findFirst().map(Edge::getCursor).orElse(null);
ConnectionCursor endCursor = null;
if (!stereotypeDescriptionEdges.isEmpty()) {
endCursor = stereotypeDescriptionEdges.get(stereotypeDescriptionEdges.size() - 1).getCursor();
}
PageInfo pageInfo = new DefaultPageInfo(startCursor, endCursor, false, false);
return new DefaultConnection<>(stereotypeDescriptionEdges, pageInfo);
}
use of org.eclipse.sirius.components.core.configuration.StereotypeDescription 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);
}
}
}
use of org.eclipse.sirius.components.core.configuration.StereotypeDescription in project sirius-web by eclipse-sirius.
the class StereotypeDescriptionRegistryConfigurer method addStereotypeDescriptions.
@Override
public void addStereotypeDescriptions(IStereotypeDescriptionRegistry registry) {
registry.add(new StereotypeDescription(EMPTY_FLOW_ID, EMPTY_FLOW_LABEL, this::getEmptyFlowContent));
if (this.studiosEnabled) {
registry.add(new StereotypeDescription(EMPTY_DOMAIN_ID, EMPTY_DOMAIN_LABEL, this::getEmptyDomainContent));
registry.add(new StereotypeDescription(EMPTY_VIEW_ID, EMPTY_VIEW_LABEL, this::getEmptyViewContent));
}
registry.add(new StereotypeDescription(ROBOT_FLOW_ID, ROBOT_FLOW_LABEL, this::getRobotFlowContent));
registry.add(new StereotypeDescription(BIG_GUY_FLOW_ID, BIG_GUY_FLOW_LABEL, this::getBigGuyFlowContent));
// $NON-NLS-1$
registry.add(new StereotypeDescription(EMPTY_ID, EMPTY_LABEL, "New", this::getEmptyContent));
}
Aggregations